Создан плагин(структура с provider и src через namespace) для добавления пункта меню в JoomShopping 5.
Файл: имеет путь /plugins/jshoppingmenu/addnewmenu/src/Extension/Addnewmenu.php
Сам файл:
<?php
namespace Joomla\Plugin\Jshoppingmenu\Addnewmenu\Extension;
// phpcs:disable PSR1.Files.SideEffects
defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\CMS\Language\Text;
use Joomla\Event\DispatcherInterface;
/**
* Plugin class for redirect handling.
*
* @since 1.6
*/
final class Addnewmenu extends CMSPlugin
{
/**
* Affects constructor behavior. If true, language files will be loaded automatically.
*
* @var boolean
* @since 3.1
*/
protected $autoloadLanguage = true;
/**
* Constructor
*
* @param DispatcherInterface &$subject The object to observe
* @param array $config An optional associative array of configuration settings.
* Recognized key values include 'name', 'group', 'params', 'language'
* (this list is not meant to be comprehensive).
*
* @since 1.5
*/
public function __construct(&$subject, $config)
{
parent::__construct($subject, $config);
}
function onBeforeAdminOptionPanelMenuDisplay(&$menu)
{
$menu['jsbio'] = [
Text::_('PLG_ADDNEWMENU_MENU_TITLE'),
'index.php?option=com_jshopping&controller=addnewmenu',
'rcmjsseo/icon.jpg',
1
];
}
public function onBeforeAdminOptionPanelIcoDisplay(&$menu)
{
$menu['jsbio'] = [
Text::_('PLG_ADDNEWMENU_MENU_TITLE'),
'index.php?option=com_jshopping&controller=addnewmenu',
'rcmjsseo/icon.jpg',
1
];
}
}
Второй файл имеет путь plugins/jshoppingmenu/addnewmenu/services/provider.php
<?php
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Extension\PluginInterface;
use Joomla\CMS\Factory;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\DI\Container;
use Joomla\DI\ServiceProviderInterface;
use Joomla\Event\DispatcherInterface;
//Внимание указна SYSTEM хотя по факту в другой группе
use Joomla\Plugin\Jshoppingmenu\Addnewmenu\Extension\Addnewmenu;
/**
* service provider.
*
* @since 1.0.0
*/
return new class () implements ServiceProviderInterface {
/**
* Registers the service provider with a DI container.
*
* @param Container $container The DI container.
*
* @return void
*
* @since 4.3.0
*/
public function register(Container $container): void
{
$container->set(
PluginInterface::class,
function (Container $container) {
$dispatcher = $container->get(DispatcherInterface::class);
$plugin = new Addnewmenu(
$dispatcher,
(array)PluginHelper::getPlugin('jshoppingmenu', 'addnewmenu')
);
$plugin->setApplication(Factory::getApplication());
return $plugin;
}
);
}
};
xml файл тоже имеет это же пространство.
При попытки включить плагин ошибок не происходит. Но если заходим в JoomShopping то вываливается ошибка. Словно с новой структурой плагинов надо писать код по другому. Предполагаю что это из-за того, что сам класс в src, а JS не может этого понять.
См. скриншот=
Возможно подцепить меню для JoomShopping`а через новую структуру плагинов?
Joomla: 4.4.2
JoomShopping: 5.3.0
PHP: 8.2
JoomShopping: 5.3.0
PHP: 8.2