我想为客户增加在我们的一家商店亲自接收订单的可能性。我试图找到一些模块,可以选择他们想要接收订单的商店,但我还没有找到任何免费的东西。因此我想为它创建新模块。还有什么我在prestashop中是全新的,我不知道从哪里开始或如何创建这个模块。我花了两三天阅读如何做到这些是我的假设:
这是我的运营商的工作方式:
这是我的问题:
为了更详细地描述我的问题,我创建了一些场景(see attachment)。 我会很乐意帮助你。
我在prestashop forum上发布了相同的问题。
答案 0 :(得分:1)
使用hookDisplayCarrierList($args)
。检查$args
以查看已选择的运营商,然后返回您的<select>
元素
商店地址。每次用户选择运营商并通过Ajax返回时,都会触发此挂钩。因此,您可能不会在这里使用ajax。
你应该在文件中包含javascript。使用hookDisplayHeader
检测何时将此文件插入页面:
public function hookDisplayHeader(){
$propExists = property_exists($this->context->controller, 'php_self');
if($propExists){
$controllerName = $this->context->controller->php_self;
if(in_array($controllerName, array('order', 'order-opc'))){
// $this->context->controller->addJS($this->_path.'js/customcarrier.js');
在进入下一步之前,此Javascript文件应检查是否已选择有效的商店;
因为你的Js代码在一个文件中,hookDisplayCarrierList
不能包含任何JavaScript(因为它返回Ajax),
您还应该使用hookDisplayBeforeCarrier
。在这里,您可以插入自定义运营商ID - 这样您就知道了
何时检查JS文件的错误。
与#2相同的问题。
保存信息的正确方法是添加模型。 CustomCarrierSelectedAddress
- 或类似的东西。
它将包含以下列:id_cart, id_shop_address
;
您实施商店地址的方式取决于您。您可以将它们定义为常量,甚至为它们创建一个新模型。
模型不难创建,你只需要声明类属性,静态变量$definitio
n就是这样。
您可以添加自己的方法。为方便起见,您还应添加createTable()/dropTable()
方法。
这更复杂。你可以:
class AdminAddressesController extends AdminAddressesControllerCore
应该有一系列电子邮件占位符及其值,由控制器分配。
例如'{order_id}'
。您应该将您的电子邮件变量添加到数组{chosen_shop_info}
并分配整数
段落的文字。然后,您可以在实际的电子邮件模板中使用它,您可以在BO中进行编辑。
这或多或少是我所知道的编辑现有模板的唯一方法,因为您无法在电子邮件模板中执行条件语句。
hookDisplayAdminOrder
。
在这里,您可以添加自己的块以便在订单摘要中显示。要找出可用的挂钩,请转到Hook.php
并查找方法exec()
。添加此行error_log($hook_name)
。
当您执行特定操作时,将记录已执行的挂钩,您将看到所需的挂钩类型。