По неизвестной для меня причине, находятся разработчики, у которых есть потребность в подключении фреймворка 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 по ссылке ниже:
С уважением, Владимир Егоров
