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

вопрос создан в Wed, May 8, 2019 12:00 AM

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

    
4
1 ответ                              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']

2
2019-05-08 21: 37: 26Z
  1. Я на самом деле пытался щелкнуть (функция (), чтобы обнаружить триггер кнопки cancelProduct. Но я все еще не уверен, как передать значения. Я хотел бы вызвать Возвратите с указанием причины и запишите все продукты и количество для каждого возврата. Знаете ли вы, как я могу отредактировать выпадающий раздел, когда мы нажимаем «Стандартный возврат» или «Возврат продуктов»? Тогда я бы просто добавил туда форму, так как могу публиковать напрямую к контроллеру.
    2019-05-08 17: 59: 08Z
  2. Давайте переключимся в чат-комнату SO и опубликуем окончательное решение, как только оно заработает: chat.stackoverflow.com/rooms/192800/prestashop
    2019-05-08 18: 01: 09Z
  3. Конечно, давайте переключимся в чат! :)
    2019-05-08 18: 05: 35Z
  4. Рад, что нам удалось найти решение! Я только что обновил свой ответ, выполнив следующие шаги
    2019-05-08 21: 37: 46Z
источник размещен Вот