Prestashop 1.7容纳来自多个模块的替代

时间:2018-07-20 15:30:44

标签: php prestashop prestashop-1.7

我已经创建了2个自定义模块module_one和module_two。这些模块直接影响ps_product_lang表,因此我对类Product.php进行了覆盖。现在,我可以同时安装两个模块,但是由于覆盖Product.php类的冲突而无法启用我要安装的两个模块中的最后一个。

要使我的模块正常工作,我暂时删除了自定义模块中的替代项,然后直接编辑root_file / override / classes / Product.php。但是我的理想设置是在模块内部包含替代,以便我可以轻松地单独更新它们。我该怎么办?

这是我的目录:

  • root_dir:
    • 覆盖:
      • 类:
        • Product.php
    • 模块:
      • module_one:
        • 覆盖:
          • 类:
            • Product.php
        • 观看次数:
        • module_one.php
      • module_two:
        • 覆盖:
          • 类:
            • Product.php
        • 观看次数:
        • module_two.php

这是我的module_one / override / classes / Product.php代码:

<?php
class Product extends ProductCore {
    public $cus_field_1;
    public $cus_field_2;

    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null){

            self::$definition['fields']['cus_field_1'] = [
                'type' => self::TYPE_STRING,
                'lang' => true,
                'required' => false, 'size' => 255
            ];
            self::$definition['fields']['cus_field_2'] = [
                'type' => self::TYPE_STRING,
                'lang' => true,
                'required' => false, 'size' => 255
            ];
            parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
}

这是我的module_two / override / classes / Product.php代码:

<?php
class Product extends ProductCore {
    public $cus_field_3;
    public $cus_field_4;

    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null){

            self::$definition['fields']['cus_field_3'] = [
                'type' => self::TYPE_STRING,
                'lang' => true,
                'required' => false, 'size' => 255
            ];
            self::$definition['fields']['cus_field_4'] = [
                'type' => self::TYPE_STRING,
                'lang' => true,
                'required' => false, 'size' => 255
            ];
            parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
}

2 个答案:

答案 0 :(得分:1)

我担心您无法通过这种方法达到这一点。由于它们的冲突,Prestashop不鼓励在模块内使用替代。在覆盖过程中,Prestashop只会重写目录中的所有文件,而无法进行拼接。因此,在每次安装新模块后,只有最后一个覆盖可用,这很令人困惑。他们甚至不接受带有替代官方市场模块的模块。   因此,在我看来,正确的方法是创建将不使用替代并不会影响核心的模块。您只需要使用SQL脚本扩展产品表,并通过产品操作挂钩对其进行管理即可。

答案 1 :(得分:0)

您是否要在同一家商店中安装两个模块?