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

overriding already overridden classes with a module - Prestashop 1.6

我知道这个问题与编程无关。但我真的很想了解 PRESTASHOP 通过模块覆盖文件的行为。

我想扩展 MYSQL table,比方说,Orders。模块安装方法中的原始 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 目录已经有一个带有 __constructOrder.php,我该如何让它合并更改而不是抛出错误.. 可能吗?

Prestashop 根本不鼓励在模块内使用覆盖。因为我怎么知道没有办法合并两个覆盖,只有最后一个可以工作,如果你能找到一种方法来安装带有第二个覆盖的模块。因此他们建议扩展现有的 classes 并从那里添加所有必要的数据。例如,在你的情况下,它应该是这样的

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);
    }
}

并且只需将此 class 文件包含在您的模块中。因此,如果类似的东西将包含在另一个模块中,则不会出现冲突,除非属性具有相同的名称。