用于个人收集/接收的新模块,可选择商店(提货到商店)

时间:2014-12-07 12:24:09

标签: prestashop prestashop-1.6

我想为客户增加在我们的一家商店亲自接收订单的可能性。我试图找到一些模块,可以选择他们想要接收订单的商店,但我还没有找到任何免费的东西。因此我想为它创建新模块。还有什么我在prestashop中是全新的,我不知道从哪里开始或如何创建这个模块。我花了两三天阅读如何做到这些是我的假设:

  1. 可以通过扩展CarrierModule类来创建新的运营商模块。
  2. 我读了一些关于钩子的文章/文档。
  3. 我已经通过本文http://www.prestashop.com/blog/en/carrier_modules_functions_creation_and_configuration/附带的编辑模块创建了我的第一个运营商模块。
  4. 我取得的成就是我安装了模块并使用了钩子' BeforeCarrier'选择我的运营商后,为页面添加一些布局。
  5. 这是我的运营商的工作方式:

    1. 它应该是运营商列表的一部分,因此客户可以选择它。
    2. 如果没有选择承运人,则没有任何问题。如果客户选择了运营商,则按钮'选择商店'应该显示。
    3. 按下按钮后,选择商店'新窗口应显示我们商店的地址(而不是新窗口,它可能放在当前页面的某个地方)。
    4. 带商店地址的窗口将包含带有单选按钮的地址列表和确认选择的按钮。
    5. 确认选择窗口后,将关闭并且地址应显示为carreir的一部分。
    6. 确认电子邮件将包含商店客户可以收集订单的信息。
    7. 假设地址将在PHP代码中进行硬编码。
    8. 这是我的问题:

      1. 我创建了新的运营商模块,因此我认为它可以正常运行(如此处所述http://www.prestashop.com/blog/en/carrier_modules_functions_creation_and_configuration/)。
      2. 如何添加新按钮'选择商店'靠近选定的航空公司?
      3. 我可以使用挂钩添加'选择商店'按钮?
      4. 我应该记得在哪里选择店铺地址?载有'承运人'上课的地方吗?
      5. 如何在电子邮件中添加店铺地址?我应该编辑布局吗?电子邮件布局是否包含它的位置,或者我是否需要添加新的'占位符'对吗?
      6. 如何在管理员端显示所选地址?
      7. 为了更详细地描述我的问题,我创建了一些场景(see attachment)。 我会很乐意帮助你。

        我在prestashop forum上发布了相同的问题。

1 个答案:

答案 0 :(得分:1)

  1. 这些例子通常陈旧且写得不好。他们缺乏结构。但为了你的目的,我认为他们没事。
  2. 使用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文件的错误。

  3. 与#2相同的问题。

  4. 保存信息的正确方法是添加模型。 CustomCarrierSelectedAddress - 或类似的东西。 它将包含以下列:id_cart, id_shop_address;

    您实施商店地址的方式取决于您。您可以将它们定义为常量,甚至为它们创建一个新模型。

    模型不难创建,你只需要声明类属性,静态变量$definitio n就是这样。

    您可以添加自己的方法。为方便起见,您还应添加createTable()/dropTable()方法。

  5. 这更复杂。你可以:

    • 发送有关所选商店地址的电子邮件。
    • 搜索发送您要更改的电子邮件的控制器方法。 然后你应该通过将文件复制到模块来覆盖该方法,删除所有其他方法和 重命名里面的类定义 - &gt; class AdminAddressesController extends AdminAddressesControllerCore

    应该有一系列电子邮件占位符及其值,由控制器分配。

    例如'{order_id}'。您应该将您的电子邮件变量添加到数组{chosen_shop_info}并分配整数 段落的文字。然后,您可以在实际的电子邮件模板中使用它,您可以在BO中进行编辑。

    这或多或少是我所知道的编辑现有模板的唯一方法,因为您无法在电子邮件模板中执行条件语句。

  6. 要在BO中添加所选地址到订单页面,您应该使用另一个挂钩 - hookDisplayAdminOrder。 在这里,您可以添加自己的块以便在订单摘要中显示。
  7. 要找出可用的挂钩,请转到Hook.php并查找方法exec()。添加此行error_log($hook_name)。     当您执行特定操作时,将记录已执行的挂钩,您将看到所需的挂钩类型。