PrestaShop - отправка значения другому контроллеру на основе существующей кнопки отправки

Я использую PrestaShop 1.7 и хочу добиться следующего:

Я добавляю причину возврата средств при возврате товара, которая по умолчанию в PrestaShop не предусмотрена.

На данный момент я хотел бы получить значение из файла TPL моего модуля. Я создал раскрывающийся список, который позволяет пользователю выбирать свой вариант. Затем я хотел бы передать это значение в AdminOrdersController, поскольку кнопка cancelProduct запускает контроллер.

Модель:

public function hookDisplayAdminOrder($params)
{
    return $this->display(__FILE__, 'views/templates/admin/refund_reason.tpl');
}

TPL:

<div class="panel">
<div class="panel-heading">
    <i class="icon-money"></i>
    Pick A Reason For Refunding
</div>
<select name="refund_reason" style="width: 300px;">
  <option value="0"></option>
  <option value="1">Out of stock</option>
  <option value="2">Incorrect product sent to user</option>
  <option value="3">Defective/faulty product</option>
  <option value="4">Poor quality on receipt (dirty, poor stitching etc)</option>
  <option value="5">Looks different from image on website</option>
  <option value="6">Size does not fit user</option>
  <option value="7">Change of mind</option>
  <option value="8">No indication/Others</option>
</select>

Once administrator clicked the product refund button, it will initiate the following :

elseif (Tools::isSubmit('cancelProduct') && isset($order)) {
   // retrieve user input here
}

Я создал модуль, который использует крючок hookActionProductCancel для добавления дополнительной функции, когда кнопка также вызывается, она отправляет суммы возврата в соответствующий банк через API.

Итак, может ли кто-нибудь указать, как я могу получить ввод пользователя, поскольку я не понимаю, как отправить форму, поскольку кнопка cancelProduct вызывается с другого контроллера.

Для других модулей, которые я создал, форма будет применена к контроллеру модуля, и я возьму с помощью getValue. Но в этом случае он использует существующую кнопку, и я понятия не имею, как нажать ее на AdminOrdersController.


person Enthu    schedule 08.05.2019    source источник


Ответы (1)


Самым элегантным и дружественным к UX решением для продавца будет обработка пользовательского ввода через вызов Ajax.

Я действительно разработал нечто подобное для продавца PrestaShop:

Пример возврата

Причина возврата

Это работает:

  1. Добавьте идентификатор в поле ввода refund_reason
  2. В вашем файле .tpl или через отдельный файл JS, который вы включаете, используйте jQuery, чтобы поймать отправку формы, инициированную кнопкой cancelProduct
  3. Добавьте свой элемент в форму следующим образом: var input = $('<input>').attr('type', 'hidden').attr('name', 'refund_reason').val($('#refund_reason').val()); $('form').append(input);

  4. В вашем hookActionProductCancel() методе просто получите свое значение с помощью Tools::getValue('refund_reason') или $_POST['refund_reason']

person Bruno Leveque    schedule 08.05.2019
comment
Я действительно попробовал нажать (function (), чтобы обнаружить срабатывание кнопки cancelProduct. Но я все еще не уверен, как отправить значения. Я хотел бы инициировать возврат с указанием причины и записывать весь продукт и количество для каждого возврата. вы знаете, как я могу редактировать раскрывающийся раздел, когда мы нажимаем Standard Refund или Return Products? Я бы просто добавил форму туда, так как я могу отправлять сообщения непосредственно контроллеру. - person Enthu; 08.05.2019
comment
Давайте переключимся в чат-комнату SO и опубликуем окончательное решение, когда оно заработает: chat.stackoverflow.com/rooms/192800/prestashop < / а> - person Bruno Leveque; 08.05.2019
comment
Конечно, перейдем в чат! :) - person Enthu; 08.05.2019
comment
Рад, что мы нашли решение! Я только что обновил свой ответ, указав, что нужно делать - person Bruno Leveque; 09.05.2019