Решено: "Упаковка" изменений в плагин. Замена экшенов и переопределения
Помогите, пожалуйста, разобраться в следующем вопросе:
Пытаюсь упаковать изменения в плагин:
основной функционал — изменение вывода топиков на главной странице.
Изменения в файлах, на основе которых и хочу сделать плагин:
Изменял:
Дополнял:
Соответственно:
1. создаю каркас плагина datefilter с помощью консоли
2. определяю необходимые данные в plugins.xml
3. Делегирую экшн главной страницы и переопределяю маппер и модуль в
4. Создаю необходимые классы:
Новый экшн для главной страницы:
Модуль для топиков (добавились параметры фильтра):
Новый маппер для топиков (добавились поля в таблице топиков, создавал вручную):
5. Не трогаю конфиг, не переопределяю роутер, так как задача — только изменить вывод топиков на главной.
В результате, постоянно получаю ошибку вида:
Но, изменений в роутере я не делал…
— Без плагина (прямое изменения в классах) — все работает.
— Сам экшн ActionIndexFilterByEventDate.class.php — находится в верной папке и путь правильный.
Понимаю, что туплю, но не могу понять в чем. Помогите, пожалуйста!
Пытаюсь упаковать изменения в плагин:
основной функционал — изменение вывода топиков на главной странице.
Изменения в файлах, на основе которых и хочу сделать плагин:
Изменял:
/classes/actions/ActionIndex.class.php
Дополнял:
/classes/modules/topic/Topic.class.php
/classes/modules/topic/mapper/Topic.mapper.class.php
Соответственно:
1. создаю каркас плагина datefilter с помощью консоли
2. определяю необходимые данные в plugins.xml
3. Делегирую экшн главной страницы и переопределяю маппер и модуль в
class PluginDatefilter extends Plugin {
// Объявление делегирований (нужны для того, чтобы назначить свои экшны и шаблоны)
public $aDelegates = array(
'action' => array('ActionIndex'=>'_ActionIndexFilterByEventDate'),
);
// Объявление переопределений (модули, мапперы и сущности)
protected $aInherits=array(
'module' =>array('ModuleTopic'=>'_ModuleTopic'),
'mapper' =>array('ModuleTopic_MapperTopic' => '_ModuleTopic_MapperTopic'),
);
}
4. Создаю необходимые классы:
Новый экшн для главной страницы:
/plugins/datefilter/classes/actions/ActionIndexFilterByEventDate.class.php
Модуль для топиков (добавились параметры фильтра):
/plugins/datefilter/classes/modules/Topic.class.php
Новый маппер для топиков (добавились поля в таблице топиков, создавал вручную):
/plugins/datefilter/classes/modules/mapper/Topic.mapper.class.php
5. Не трогаю конфиг, не переопределяю роутер, так как задача — только изменить вывод топиков на главной.
В результате, постоянно получаю ошибку вида:
Fatal error: Class 'PluginDatefilter_ActionIndexFilterByEventDate' not found in ...../engine/classes/Router.class.php on line 261
Но, изменений в роутере я не делал…
— Без плагина (прямое изменения в классах) — все работает.
— Сам экшн ActionIndexFilterByEventDate.class.php — находится в верной папке и путь правильный.
Понимаю, что туплю, но не могу понять в чем. Помогите, пожалуйста!
9 комментариев
Config::Set('router.page.test', 'PluginTest_ActionTest');
Разкомментируйте и отредактируйте на свой вкус.
Остается все таже ошибка
Не совсем понимаю сейчас, для чего указывать роутинг по-умолчанию в конфиге плагина, если в основном конфиге — уже определен роутинг index-page, а в плагине делается всего лишь делегирование экшина для index-page… Помогите, пожалуйста, разобраться в этом вопросе, если знаете…
На счет длинных названий экшенов — пока для меня так проще, на первых этапах разбора работы с LS.
или нужно так
И
Но теперь полезли ошибки:
Переопределял все по мануалу в шаблоне плагина:
Пути правильные… название класса в файле класса (/plugins/abcplugin/classes/modules/Topic.class.php)
Мне ведь необходимо изменить стандартный функционал класса топика…
Делегирование Экшина ActionIndex, а не наследование, применил, так как думал, что это единственный способ задать свое поведение вывода на главной странице. В шаблоне плагина, создаваемого через консоль, описанно именно делегирование экшенов. Исходил из этого.
На счет
мое творчество.
Пытался сделать по аналогии с плагином, идущим в поставке LS (pages):
Не правильно?
Через ?
Т.е., там я могу заменить метод вывода на главную ?