По неизвестной для меня причине, находятся разработчики, у которых есть потребность в подключении фреймворка Joomla во «внешний» скрипт. Недавно мне пришлось заниматься миграцией одного такого скрипта на Joomla 4, поэтому я решил написать небольшую шпаргалку для себя и уважаемых читателей.
Начну с того, что на просторах сети Интернет встречается готовый фрагмент кода, который на первый взгляд действительно помогает подключить фреймворк Joomla 4 или Joomla 5 в сторонний скрипт.
Однако, помогает он исключительно «на первый взгляд».
Если ваш скрипт будет работать с переменными локализации, или просто обращаться к существующим компонентам, плагинам, модулям, то вероятнее всего вы получите ошибку.
Например, такую:
Call to a member function getTag() on null
Чтобы подключение фреймворка прошло безоблачно, мы должны подключить класс для работы с локализацией, а также загрузить, собственно говоря, какой то язык в оперативную память.
Также я очень рекомендую подключить системные плагины, без которых при работе со сторонними расширениями во «внешнем» скрипте можно получить некоторую дозу ошибок.
Итоговый код будет выглядеть так:
use Joomla\CMS\Factory; use Joomla\CMS\Language\LanguageFactoryInterface; use Joomla\CMS\Plugin\PluginHelper; define('_JEXEC', 1); define('JPATH_BASE',$_SERVER['DOCUMENT_ROOT']); require_once JPATH_BASE . '/includes/defines.php'; require_once JPATH_BASE . '/includes/framework.php'; $container = Factory::getContainer(); $container->alias('session.web', 'session.web.site') ->alias('session', 'session.web.site') ->alias('JSession', 'session.web.site') ->alias(\Joomla\CMS\Session\Session::class, 'session.web.site') ->alias(\Joomla\Session\Session::class, 'session.web.site') ->alias(\Joomla\Session\SessionInterface::class, 'session.web.site'); $app = $container->get(\Joomla\CMS\Application\SiteApplication::class); $app->createExtensionNamespaceMap(); $lang = $container->get(LanguageFactoryInterface::class)->createLanguage("ru-RU", false); $app->loadLanguage($lang); PluginHelper::importPlugin('system');
Хочу обратить внимание, что код, показанный выше, будет работать исключительно под Joomla 4 и выше. Не стоит пытаться запускать его под Joomla 3 и более древние версии.
Заключение
Очень надеюсь, что данная заметка помогла вам сэкономить время и нервные клетки, которые, как известно, восстанавливаются медленно. И вам с помощью представленного примера удалось подключить фреймворк Joomla в свой php скрипт.
Если у вас появилось желание написать простое человеческое спасибо, сделать это можно в моей группе VK по ссылке ниже:
С уважением, Владимир Егоров