CRM / UI 2.0 / не работают хуки backend_invoice, backend_invoice.action_button Есть решение
Написал плагин для генерации накладной из счета. Суть проста - есть счет - в нем есть специальный шаблон, в котором мне нужно только заменить слово "Счет" на "Наклданая" и сгенерировать PDF. В разделе счета, при открытии любого оплаченного счета мне нужно добавить кнопку "Распечатать накладную" (как я хочу - пример на скрине).

В plugin.php
<?php
return array(
'name' => 'Waybill',
'description' => 'Добавляет кнопку для скачивания накладной на странице счета',
'version' => '1.0.0',
//'img' => 'img/crmWaybill.png',
'handlers' => array(
//'backend_invoice' => 'actionButton', // пробовал и так
'backend_invoice.action_button' => 'actionButton', // и так
),
);В самом файле плагина
<?php
class crmWaybillPlugin extends waPlugin {
public function actionButton($params) {
...
return 'КОД КНОПКИ';
}
}но не работает. Я не знаю в чем причина.
/wa-apps/crm/templates/actions/invoice/InvoiceId.html тут код - вроде должно работать, но почему-то не работает
<!-- plugin hook: 'backend_invoice.action_button' -->
{* @event backend_invoice.%plugin_id%.action_button *}
{if !empty($backend_invoice)}{foreach $backend_invoice as $_}{ifset($_.action_button)}{/foreach}{/if}Подскажите пожалуйста как сделать правильно
Эта тема в архиве. Добавление комментариев к ней отключено.










5 ответов
Вы документацию читали?
public function actionButton($params) { return [ 'action_button' => 'кнопка', ]; }и в plugin.php
'handlers' => array( 'backend_invoice' => 'actionButton', ),Читал, сделал как вы написали, но не отображается кнопка по прежнему.
<?php class crmCrmWaybillPlugin extends waPlugin { public function actionButton($params) { $invoice_id = $params['invoice']['id']; $download_url = wa()->getAppUrl('crm') . 'invoice/' . $invoice_id . '/download-waybill/'; return [ //'action_button' => '<a href="' . $download_url . '" class="button green" style="margin-left: 10px;">Скачать накладную</a>', // мой код не работает 'action_button' => '<input class="button" type="button" value="' . _wp('My action button') . '">', // код документации не работает ]; } }Это в целом правильный вариант, он должен работать:
Но для лучшей читаемости кода желательно назвать метод по названию хука:
И в файле plugin.php, и в основном классе плагина надо использовать одинаковое имя метода: либо в обоих местах ваш вариант actionButton, либо в обоих местах вариант из примера выше — backendInvoice. Какое имя для метода вы выберете, не влияет на работу плагина — это имеет значение только для удобства чтения программного кода.
Вот так делать неверно в данном случае:
Обработчик этого хука должен возвращать массив, а не строку. В ключе массива 'action_button' надо вернуть HTML-код кнопки, которую вы хотите показывать на странице просмотра счёта:
return [ 'action_button' => '<input class="button" type="button" value="' . _wp('My action button') . '">', ];Если у вас даже с такими изменениями плагин не работает, очистите кеш в приложении «Настройки» и включите там же режим отладки, если он у вас ещё не включён.
Спасибо за ответ, но к сожалению вариант не рабочий.
1. Режим отладки включен разумеется.
2. Удаление wa-cache не помогает.
Или есть какой-то баг в приложении что не работает, или я что-то делаю не так.
Так и не понял что я поменял - но все заработало. Вопрос закрыт. Все выражаю благодарность.