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

Я использую 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>

После того, как администратор нажал кнопку возврата продукта, он запустит следующее:

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

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

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

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

1 Ответ

2 голосов
/ 08 мая 2019

Наиболее элегантное и удобное для UX решение для ритейлера - обработка пользовательского ввода с помощью вызова Ajax.

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

Refund example

Refund reason

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

  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']

...