хук backend_reports.menu_li

пытаюсь вывести новый пункт списка отчетов, то ли хук не работает, то ли я не правильно что-то делаю, но функция точно не вызывается. Я специально не ставлю ';' в php и страница не выводит никаких ошибок, словно ничего и не выполнялось.

plugin.php

<?php

return array(

    'name' => 'Status order',

    'description' => 'Status order description',

    'author'=>'VS-avto',

    'version' => '1.0',

    'img' => 'img/plugin.png',

    'handlers' => array(

      'backend_reports.menu_li' => 'backendMenu',

    ),

);

?>



<?php

class shopStatusorderPlugin extends shopPlugin

{

    public function backendMenu() 

    {

        $view = wa()->getView();

        $content = $view->fetch($this->path.'/templates/menuli.html');

        return $content;

    }

}

?>

6 ответов

  • 0
    Леонид Вакуленко 26 ноября 2013 03:18 #
    Вот так у меня сработало:

    <?php
    return array(
    'name' => '',
    'handlers' => array(
    'backend_reports' => 'backendMenu',
    ),
    );

    * * *

    <?php
    class shopStatusorderPlugin extends shopPlugin
    {
    public function backendMenu()
    {
    return array(
    'menu_li' => '<li>Hello, World!</li>',
    );
    }
    }
    • 0
      Леонид Вакуленко Леонид Вакуленко 26 ноября 2013 03:19 #
      А, да, убедитесь, что плагин включен в wa-config/apps/shop/plugins.php
      • 0
        Сергей Варенов Сергей Варенов 26 ноября 2013 03:44 #
        спасибо, можете написать как контент отчета делать, какие хуки и т.д, там это передается в виде якоря index.php/webasyst/shop/?action=reports#/sales/, хотя бы hello world вывести при выборе своего отчета, я так понимаю мне надо написать action плагина для хука backend_reports, и туда уже выводить?
        • 0
          Леонид Вакуленко Леонид Вакуленко 26 ноября 2013 05:21 #
          Расскажу что знаю :)

          #/sales/ в урле означает, что после загрузки лэйаута выполнится $.reports.salesAction(). См. js/reports.js

          Если вы хотите, чтобы ваш отчёт открывался по хешу #/something/ то план примерно такой. При загрузке лэйаута добавить в него скрипт, который создаст функцию $.reports.somethingAction(). Это можно сделать, добавив <script> в результат работы хука backend_reports.menu_li. Или можно там же использовать wa()->getResponse()->addJs().
          В обоих случаях могут возникнуть сложности с тем, что в момент загрузки вашего скрипта ещё не создан $.reports. Наверное, это решаемо, если воткнуть в нужном месте setTimeout() или запускаться по domready.

          Ваша функция $.reports.somethingAction() должна действовать по аналогии с salesAction() и соседями: подгружать HTML и вставлять его в $("#reportscontent"). Опять-таки см. js/reports.js

          * * *

          Альтернатива - вообще не использовать ничего из js/reports.js, а генерить в backend_reports.menu_li полную ссылку на свой собственный контроллер. Типа ?plugin=...&action=...
          Ваш контроллер будет полностью рисовать всю страницу (включая лэйаут; можно использовать shopBackendLayout, кстати). Минус в следующем. Либо общую с другими отчётами навигацию придётся искусственно подделывать, либо её не будет. Если это норм, то такой способ проще тем, что не придётся копаться в JavaScript'е.
          • 0
            Сергей Варенов Сергей Варенов 26 ноября 2013 05:53 #
            Спасибо, хоть теперь знаю куда копать, я думаю разберусь, надеюсь получится, я могу конечно сделать отдельно приложение для отчетов, но охота, чтобы все красиво было в 1м месте, а не раскидано
          • -1
            %username% 27 ноября 2013 00:33 #
            hello world готов осталось дело за малым)
            $(document).ready(function(){
            $.reports.statusAction = function(){
            $("#reportscontent").html('hello world');
            };
            });

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

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