覆盖已经用模块覆盖 类 - 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
目录已经有一个带有 __construct
的 Order.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 文件包含在您的模块中。因此,如果类似的东西将包含在另一个模块中,则不会出现冲突,除非属性具有相同的名称。
我知道这个问题与编程无关。但我真的很想了解 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
目录已经有一个带有 __construct
的 Order.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 文件包含在您的模块中。因此,如果类似的东西将包含在另一个模块中,则不会出现冲突,除非属性具有相同的名称。