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 零售商开发了类似的东西:
这个有效:
- 将 ID 添加到您的
refund_reason
输入字段
- 在您的 .tpl 文件中或通过您包含的单独 JS 文件,使用 jQuery 捕获由
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']
检索您的值
我正在使用 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 零售商开发了类似的东西:
这个有效:
- 将 ID 添加到您的
refund_reason
输入字段 - 在您的 .tpl 文件中或通过您包含的单独 JS 文件,使用 jQuery 捕获由
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']
检索您的值