хук 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 ответов
<?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>',
);
}
}
#/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'е.
$(document).ready(function(){
$.reports.statusAction = function(){
$("#reportscontent").html('hello world');
};
});