Вопрос: Переопределение метода класса ядра в плагине
Уважаемые коллеги,
Каким образом можно (правильно :)) переопределить (делегировать) методы классов ядра в плагине? В частности, я хотел бы перегрузить методы класса Router (Exec и RewriteRequest в частности).
Насколько я пока нашёл (статьи по похожей теме были найдены здесь, тут и там) можно делегировать Actions (но это не action), и методы классов модулей — но вроде бы Router не является частью модуля (или я что-то упустил). Эксперименты (методом тыка) с разными названиями хуков результата не дали, мой код не вызывается.
В API определена функция AddDeletageFunction, но я не могу понять, как сформировать к ней правильное название хука — найденные примеры, опять таки, опираются на экшины и модули.
Заранее благодарю за любые конструктивные подсказки и помощь.
Каким образом можно (правильно :)) переопределить (делегировать) методы классов ядра в плагине? В частности, я хотел бы перегрузить методы класса Router (Exec и RewriteRequest в частности).
Насколько я пока нашёл (статьи по похожей теме были найдены здесь, тут и там) можно делегировать Actions (но это не action), и методы классов модулей — но вроде бы Router не является частью модуля (или я что-то упустил). Эксперименты (методом тыка) с разными названиями хуков результата не дали, мой код не вызывается.
В API определена функция AddDeletageFunction, но я не могу понять, как сформировать к ней правильное название хука — найденные примеры, опять таки, опираются на экшины и модули.
Заранее благодарю за любые конструктивные подсказки и помощь.
6 комментариев
зачем?
Зачем: Дописать обработку массива псевдонимов, чтобы при использовании псевдонима (из $config['router']['uri']) проходил редирект по 301 (или устанавливалось значение канонического пути во View — см. livestreet.ru/blog/11908.html).
Разобрался, как сделать и то и то в ядре, в Router.class.php, но не хотел бы оставлять это в виде хака.
В принципе, каноник я могу установить и по экшину показа — полностью скопировать туда парсинг псевдонимов, и если результат не совпал с ури запроса — добавлять каноник. Но 301 так сделать уже не получится, насколько я понимаю.
А пример задачи — если сейчас в $config['router']['uri'] прописать два урла, то по обоим этим ссылкам будет доступен одинаковый контент. Гугл говорит, что это не очень похвально, поэтому для исходного урла (который преображается в целевой) надо добавить указание, что именно целевой является главным («каноническим»).
Причём канонический линк уже поддерживается в стандартном шаблоне (и используется для пагинации), его надо только установить.