Подключение 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();