Подключение API Joomla! в своем скрипте
Подключение АПИ Джулы 4:
1. Скопировать /api/includes/app.php в /api/includes/api.php и закоментить в нем последнюю строку ($app->execute();).
2. Подключить этот файл в своем скрипте:
<?php
$_SERVER['REQUEST_URI'] = '...';
$_SERVER['HTTP_HOST'] = '...';
define('_JEXEC', 1);
include_once dirname(__DIR__).'/api/includes/api.php';
$db = \Joomla\CMS\Factory::getDbo();
Пример скрипта с вызовом процедуры плагина:
<?php
define('_JEXEC', 1);
$_SERVER['REQUEST_URI'] = '...';
$_SERVER['HTTP_HOST'] = '...';
include_once dirname(__DIR__).'/api/includes/japi.php';
$app = \Joomla\CMS\Factory::getApplication();
$db = \Joomla\CMS\Factory::getDbo();
\Joomla\CMS\Plugin\PluginHelper::importPlugin('system', 'custom');
$app->triggerEvent('onExecuteEvent', array());
Параметры $_SERVER['REQUEST_URI'] и $_SERVER['HTTP_HOST'] необходимы для запуска скрипта из консоли или по крону. Без них будет ругань.
Joomla 4+:
<?php
if(!isset($_SERVER['HTTP_HOST'])) $_SERVER['HTTP_HOST'] = 'mysite.ru';
if(empty($_SERVER['DOCUMENT_ROOT'])) $_SERVER['DOCUMENT_ROOT'] = dirname(__DIR__);
define('_JEXEC', 1);
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/includes/defines.php';
define('JPATH_COMPONENT',JPATH_BASE . '/components/com_content');
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/includes/framework.php';
// Boot the DI container
$container = \Joomla\CMS\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');
// Instantiate the application.
$app = $container->get(\Joomla\CMS\Application\SiteApplication::class);
// Set the application as global app
\Joomla\CMS\Factory::$application = $app;
//необходимо зарегистрировать пространства имен расширений, чтобы использовать классы расширений.
$app->createExtensionNamespaceMap();