Решено: "Упаковка" изменений в плагин. Замена экшенов и переопределения

Помогите, пожалуйста, разобраться в следующем вопросе:

Пытаюсь упаковать изменения в плагин:
основной функционал — изменение вывода топиков на главной странице.
Изменения в файлах, на основе которых и хочу сделать плагин:

Изменял:
/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 комментариев

avatar
Забавная штука, но в конфиге плагина не активирована строка роутинга по-умолчанию, вероятно рассчитано на то что вы как то по своему ее назовете, и в этом есть смысл особенно при таких диковинных названиях модуля.
Config::Set('router.page.test', 'PluginTest_ActionTest');
Разкомментируйте и отредактируйте на свой вкус.
avatar
Спасибо! но к сожалению, это не помогло :)
Config::Set('router.page.index', 'PluginDatefilter_ActionIndexFilterByEventDate');


Остается все таже ошибка
Fatal error: Class 'PluginDatefilter_ActionIndexFilterByEventDate' not found in ...../engine/classes/Router.class.php on line 261


Не совсем понимаю сейчас, для чего указывать роутинг по-умолчанию в конфиге плагина, если в основном конфиге — уже определен роутинг index-page, а в плагине делается всего лишь делегирование экшина для index-page… Помогите, пожалуйста, разобраться в этом вопросе, если знаете…

На счет длинных названий экшенов — пока для меня так проще, на первых этапах разбора работы с LS.
avatar
Возможно
Config::Set('router.page.index', 'PluginDatefilter_ActionIndexfilterbyeventdate');
и
/plugins/datefilter/classes/actions/ActionIndexfilterbyeventdate.class.php

или нужно так
/plugins/datefilter/classes/actions/ActionIndex.class.php
И
Config::Set('router.page.index', 'PluginDatefilter_ActionIndex');
avatar
C Роутером вроде разобрался, спасибо, spolischook и Shrike! Там была моя ошибка.
Но теперь полезли ошибки:
Fatal error: Class 'PluginDatefilter_ModuleTopic' not found in ..../engine/classes/Engine.class.php on line 374


Переопределял все по мануалу в шаблоне плагина:


 /**
        * Переопределение модулей (функционал):
        * 'module'  =>array('ModuleTopic'=>'_ModuleTopic'),
        *
        * К классу ModuleTopic (/classes/modules/Topic.class.php) добавляются методы из
        * PluginAbcplugin_ModuleTopic (/plugins/abcplugin/classes/modules/Topic.class.php) - новые или замена существующих
        */
 'module'  =>array('ModuleTopic'=>'_ModuleTopic'),


Пути правильные… название класса в файле класса (/plugins/abcplugin/classes/modules/Topic.class.php)
class PluginDatefilter_ModuleTopic extends Module
avatar
Попробуйте просто
protected $aInherits=array(
    'module' =>array('ModuleTopic'),
);
avatar
А почему так? Ошибка действительно исчезает, но ведь в примере шаблона именно:
'module'  =>array('ModuleTopic'=>'_ModuleTopic'),


Мне ведь необходимо изменить стандартный функционал класса топика…
avatar
по какому мануалу вот это?
class PluginDatefilter_ModuleTopic extends Module
также делегирование классов строго не рекомендуется, нужно использовать наследование, чтобы не убивать другие плагины
avatar
Большое спасибо всем за интерес и помощь в моем вопросе новичка в LS.

Делегирование Экшина ActionIndex, а не наследование, применил, так как думал, что это единственный способ задать свое поведение вывода на главной странице. В шаблоне плагина, создаваемого через консоль, описанно именно делегирование экшенов. Исходил из этого.

На счет
class PluginDatefilter_ModuleTopic extends Module

мое творчество.
Пытался сделать по аналогии с плагином, идущим в поставке LS (pages):
class PluginPage_ModulePage extends Module


Не правильно?
avatar
Уважаемый ort, подскажите, пожалуйста, как произвести наслевование класса экшина?
Через
protected $aInherits=array('ActionIndex'=>'_ActionIndexFilterByEventDate')
?

Т.е., там я могу заменить метод вывода на главную
protected function EventIndex()
?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.