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

PrestaShop - Submitting Value to Other Controller Based on Existing Submit Button

我正在使用 PrestaShop 1.7 并希望实现以下目标:

我在产品 return 上添加退款原因,默认情况下 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。

最优雅的解决方案和对零售商来说 UX-friendly 是通过 Ajax 调用处理用户输入。

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

这个有效:

  1. 将 ID 添加到您的 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']

  5. 检索您的值