Новости Joomla

Метод registerListeners() в CMSPlugin в плагинах планируется удалить в Joomla 7.0

Метод registerListeners() в CMSPlugin в плагинах  планируется удалить в Joomla 7.0

👩‍💻 Метод registerListeners() в CMSPlugin в плагинах планируется удалить в Joomla 7.0.Этот метод регистрирует устаревшие слушатели событий в диспетчере, имитируя работу плагинов Joomla! 3.x и ниже для Joomla 4+. По умолчанию этот метод ищет все общедоступные методы, название которых начинается с on. Он регистрирует лямбда-функции (замыкания), которые пытаются преобразовать аргументы отправленного события в аргументы вызова метода и вызвать ваш метод on<Что-то>. Результат передаётся обратно событию в его аргумент result.Теперь этот слой совместимости с устаревшей Joomla 3 помечен к удалению в Joomla 7.0, которая должна выйти осенью 2027 года. Это означает, что те уникальные расширения от Joomla 2.5 / Joomla 3, которые ещё работали на Joomla 4-6 скорее всего окончательно перестанут работать на Joomla 7. Предполагается, что активные разработчики планомерно и постепенно избавляются от технического долга и обновляют свои расширения. @joomlafeed#joomla #разработка #php

0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 3385 Просмотров
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Друзья!

Собираюсь начать разработку компонента с несколькими контроллерами. До этого писал простенькие вещи только с одним контроллером. И меня заинтересовала возможность скрыть передачу наименования контроллера через URI. Все мы знаем такую классическую схему:

Код: php
require_once( JPATH_COMPONENT.DS.'controller.php' );
 
$controller = '';
 
if ($controller == JRequest::getCmd('controller'))
{
$path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
jimport('joomla.filesystem.file');
if (JFile::exists($path)) {
require_once($path);
} else {
JError::raiseError('500', JText_::('Unknown controller'));
}
}

$classname = 'MycomponentController'.ucfirst($controller);
$controller = new $classname();

Но меня заинтересовал подход, который испольуется в JomSocial:

Код: php
// Component configuration
$config = array('name'=>JString::strtolower(JRequest::getCmd('view', 'frontpage')));

$func = JRequest::getVar('func');

// Create the controller
$viewController = JString::strtolower($config['name']);

if( !JFile::exists( JPATH_COMPONENT.DS.'controllers'.DS.$viewController.'.php' ) )
{
echo JText::_('CC INVALID TASK');
return;
}

require_once (JPATH_COMPONENT.DS.'controllers'.DS.$viewController.'.php');
$viewController = JString::ucfirst($viewController);
$viewController = 'Community'.$viewController.'Controller';

$controller = new $viewController($config);

Как я понял, тут наименование контроллера не передается в URI, а используется наименование view, и в зависимости от этого подключается нужный контроллер.

Верно ли я понял? Можно ли использовать такой подход для подключения контроллера или могут возникнуть какие-то подводные камни?
Может кто-то использует другие способы подключения контроллеров и может поделиться своим опытом? ;)
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Да нет проблем. Любая внятная логика выбора контроллера имеет право на жизнь. Хоть view проверяй, хоть что угодно.
На самом деле, грамотно написаный router.php при включенном SEF такие вопросы должен в корне решать.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка при инициализации View внутри контроллера

Автор croatian

Ответов: 2
Просмотров: 2125
Последний ответ 14.04.2009, 17:18:26
от croatian