Плагин для фронтенда блогов
При написании собственного плагина для блогов столкнулся со следующей проблемой:
Я создал lib/actions/frontend/blogMypluginPluginFrontendMyaction.action.php
Внутри него создан класс blogMypluginPluginFrontendMyactionAction
По идее я сейчас должен запустить /blog/?plugin=myplugin&action=myaction
Но, на самом деле, я получаю ошибку 404.
Я начал дебажить, и обратил внимание, что во фронт контроллере /wa-apps/blog/lib/classes/blogFrontController.class.php при такой ссылке не определяется плагин.
Там public function execute($plugin = null, $module = null, $action = null, $default = false)
Но $plugin даже не null, а string(0) ""
Я что-то не так делаю или нельзя ничего делать во фронтенде блогов? Из существующих плагинов я не нашел ни одного, который бы делал что-то во фронтенде. Поэтому закрались смутные сомнения...
Я создал lib/actions/frontend/blogMypluginPluginFrontendMyaction.action.php
Внутри него создан класс blogMypluginPluginFrontendMyactionAction
По идее я сейчас должен запустить /blog/?plugin=myplugin&action=myaction
Но, на самом деле, я получаю ошибку 404.
Я начал дебажить, и обратил внимание, что во фронт контроллере /wa-apps/blog/lib/classes/blogFrontController.class.php при такой ссылке не определяется плагин.
Там public function execute($plugin = null, $module = null, $action = null, $default = false)
Но $plugin даже не null, а string(0) ""
Я что-то не так делаю или нельзя ничего делать во фронтенде блогов? Из существующих плагинов я не нашел ни одного, который бы делал что-то во фронтенде. Поэтому закрались смутные сомнения...
7 ответов
Насколько я знаю:
Для бекенда нужно только в URL добавлять параметр <code style="font-size: 13px; line-height: 19.5px;">plugin=PLUGIN</code>. Для фронтенда необходимо создать файл routing.php, аналогично тому, как это делается для приложения.
В файле routing.php нужно писать:
return array(
'myplugin/myaction/' => array(
'module' => 'frontend',
'plugin' => 'myplugin',
'action' => 'myaction',
),
);
https://developers.webasyst.ru/cookbook/plugins/, в пункте "Контроллеры/экшены"
Например, у меня есть плагин "killMe", я хочу что бы при запросе с клиентской части на определённый url, у меня дропался каталог wa-data, для этого я создам файл wa-apps/blog/plugins/killMe/lib/config/routing.php , в этом файле будет написано нечто, о чём написал Артур, т.е возврат массива. Например
Хорошо, теперь я могу создать файл
wa-apps/[приложение]/plugins/killMe/lib/actions/blogKillMePluginFrontendKill.action.php, прошу заметить что в frontend/kill и blogKillMePluginFrontendKill.action.php взаимосвязаны.
В этом файле у вас будет класс shopKillMePluginFrontendKillAction, где в методе execute будет описан необходимый функционал.
Если вам необходимо передавать параметры, в массиве вы можете использовать необходимые переменные, например
Тогда значение post_id, в коде метода execute вы можете получить строкой waRequest::param("post_id");
Для фронте твой url с GET-параметрами не сработает. Нужен обязательно роутинг. Либо массивом, либо строкой.
Насчет параметра @Сельский правильно все написал.
В шаблоне/коде страницы правильно формировать url к твоему плагину
Если у тебя еще и переменные роутинга, как <post_id> из примера выше, то
В этом случае в коде экшена ID поста получать
не контроллер, а модуль (module), в WA контроллеры/экшены через жопу реализованы т.ч. Вы его так только запутаете.
некроманты -) человек за 4 года уже разобрался поди
Информация может быть полезна и для других пользователей, которые прочтут это обсуждение.