PrestaShop-根据现有的“提交”按钮向其他控制器提交值

时间:2019-05-08 16:15:56

标签: php prestashop prestashop-1.7

我正在使用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 个答案:

答案 0 :(得分:2)

对于零售商而言,最优雅的解决方案和UX友好的解决方案是通过Ajax调用来处理用户输入。

我实际上为PrestaShop零售商开发了类似的东西:

Refund example

Refund reason

这有效:

  1. 在您的refund_reason输入字段中添加ID
  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']

  5. 即可检索您的值