Подключить свои классы и методы в Joomla?
Иногда случается, что набор собственных функций или библиотек нужно подключить в Joomla. Но иногда подключить их нужно так, чтобы они присутсвовали во всей системе, вне зависимости, какой компонент сработал.
Это можно сделать самыми различными способами, но не все будут верными. Мы рассмотрим некоторые из них и опишем нюансы этих вариантов
1 способ — через загрузчик jimport
Это наиболее рекомендованный вариант. Используем встроенную возможность подключения файлов через функцию jimport.
Создайте новую директорию внутри «<корень сайта>/libraries». Допустим это будет библиотека для работы с изображениями. Тогда назовем директорию «imagelib». Внутри создаем файл, который будет объявлять необходимый функционал. Пусть этот файл будет называться «init.php».
Теперь чтобы использовать этот функционал в любом месте фреймворка, просто напишите следующую строку:
// подключение imagelib |
jimport('imagelib.init'); |
Способ имеет один явный недостаток, везде придется использовать конструкцию с jimport, что на практике не очень удобно.
Еще один маленький минус — не получиться сделать установщик для Joomla 1.5. В весрии 1.6 и выше этот недостаток исправлен (теперь библиотеку можно устанавливать как расширение).
2 способ — через системный плагин
Плагины «прослушивают» систему и когда происходит определенное действие, то исполняется код плагина. Можно привязать собственный плагин к событию «onAfterInitialise», которое срабатывает сразу после инициализации фреймворка Joomla. Таким образом код плагина будет доступен практически из любой части системы. В теле метода «onAfterInitialise» можно использовать функцию jimport, описанную выше — так код будет чище.
В этом случае недостатком можно считать факт присутствия лишнего плагина в системе и её усложнения.
3 способ — как делать не нужно
Не очень желательно использовать конструкции require, include. Но если уж сильно хочется, то придерживайтесь следующей конструкции.
// подключаем imagelib |
require_once ( JPATH_BASE .DS. 'libraries' .DS. 'imagelib' .DS. 'init.php' ); |
Недостатки тут следующие:
- нужно учитывать адрес корня сайта и разделитель директории (константы JPATH_BASE и DS )
- require_once медленнее работает, чем require, а другого удобного способа исключить повторное подключение нет.
- теряется общая красота кода.
Такой способ приемлем только на уровне загрузки фреймворка, когда еще не объявлен функционал плагинов и jimport. Но это очень редкий и крайний случай.
Подключить свои классы и методы в Joomla? - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.