用模块覆盖已经覆盖的类-Prestashop 1.6

时间:2018-08-06 10:12:15

标签: prestashop prestashop-1.6 prestashop-1.7

我知道此问题并非专门用于编程。但是我真的很想了解PRESTASHOP通过模块覆盖文件的行为。

我想扩展一个MYSQL表,例如Orders。 Module的install方法中的原始sql查询可以解决这个问题。但是我也想将此列添加到Order模型中,这将是主要问题所在。因为我必须这样重写它:

  public function __construct($id = null, $id_lang = null)
  {
    parent::__construct($id, $id_lang);
    self::$definition['fields']['new_column'] = array('type' => self::TYPE_STRING);
  }

我的问题是,如何确保如果override目录中已经有一个带有Order.php的{​​{1}},如何使它合并更改而不是抛出错误。有可能吗?

1 个答案:

答案 0 :(得分:1)

Prestashop完全不鼓励在模块内使用替代。因为据我所知,没有办法将两个替代合并,并且如果您找到一种使用第二个替代安装模块的方法,则只有最后一个可以工作。因此,他们建议扩展现有的类并从那里添加所有必要的数据。例如,您的情况应该是这样

class Order extends OrderCore
{
    public $new_filed;

    public function __construct($id = null, $id_lang = null)
    {
        Order::$definition['fields']['new_column'] = array('type' => self::TYPE_STRING);
        parent::__construct($id, $id_lang);
    }
}

,只需将此类文件包含在模块中即可。因此,如果类似的内容将包含在另一个模块中,则除非属性具有相同的名称,否则不会出现冲突。