Плагин для фронтенда блогов

При написании собственного плагина для блогов столкнулся со следующей проблемой:
Я создал 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 ответов

  • 1
    Артур 14 июня 2018 21:09 #

    В файле routing.php нужно писать:

    return array(

    'myplugin/myaction/' => array(

    'module' => 'frontend',

    'plugin' => 'myplugin',

    'action' => 'myaction',

    ),

    );

  • 1
    Сельский 15 июня 2018 16:51 #

    https://developers.webasyst.ru/cookbook/plugins/, в пункте "Контроллеры/экшены"
    Например, у меня есть плагин "killMe", я хочу что бы при запросе с клиентской части на определённый url, у меня дропался каталог wa-data, для этого я создам файл wa-apps/blog/plugins/killMe/lib/config/routing.php , в этом файле будет написано нечто, о чём написал Артур, т.е возврат массива. Например

    <?php
    
    return [
        'kill_me_plugin/' => 'frontend/kill',
    ];

    Хорошо, теперь я могу создать файл
    wa-apps/[приложение]/plugins/killMe/lib/actions/blogKillMePluginFrontendKill.action.php, прошу заметить что в frontend/kill и blogKillMePluginFrontendKill.action.php взаимосвязаны.
    В этом файле у вас будет класс shopKillMePluginFrontendKillAction, где в методе execute будет описан необходимый функционал.

    Если вам необходимо передавать параметры, в массиве вы можете использовать необходимые переменные, например

    <?php
    
    return [
        'kill_me_plugin/<post_id>/' => 'frontend/kill',
    ];

    Тогда значение post_id, в коде метода execute вы можете получить строкой waRequest::param("post_id");


  • 1
    Syrnik.com 15 июня 2018 17:07 #

    Для фронте твой url с GET-параметрами не сработает. Нужен обязательно роутинг. Либо массивом, либо строкой.

    'твой/path/ => 'контроллер/экшен'

    Насчет параметра @Сельский правильно все написал.

    В шаблоне/коде страницы правильно формировать url к твоему плагину

    {$wa->getUrl("приложение/контроллер/экшен", ["plugin"=>"id_твоего_плагина"])}

    Если у тебя еще и переменные роутинга, как <post_id> из примера выше, то

    {$wa->getUrl("приложение/контроллер/экшен", ["plugin"=>"id_твоего_плагина", 'post_id'=>id_поста])}

    В этом случае в коде экшена ID поста получать

    $post_id = waRequest::param('post_id');
    • +1
      enso_studio@mail.ru enso_studio@mail.ru 15 июня 2018 19:06 #

      не контроллер, а модуль (module), в WA контроллеры/экшены через жопу реализованы т.ч. Вы его так только запутаете.

  • 1
    Николай Иванов 20 июня 2018 11:23 #

    некроманты -) человек за 4 года уже разобрался поди

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите