我正在使用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。
答案 0 :(得分:2)
对于零售商而言,最优雅的解决方案和UX友好的解决方案是通过Ajax调用来处理用户输入。
我实际上为PrestaShop零售商开发了类似的东西:
这有效:
refund_reason
输入字段中添加ID cancelProduct
按钮触发的表单提交通过以下方式将元素添加到表单:
var input = $('<input>').attr('type', 'hidden').attr('name', 'refund_reason').val($('#refund_reason').val());
$('form').append(input);
在您的hookActionProductCancel()
方法中,只需使用Tools::getValue('refund_reason')
或$_POST['refund_reason']