我知道此问题并非专门用于编程。但是我真的很想了解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}},如何使它合并更改而不是抛出错误。有可能吗?
答案 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);
}
}
,只需将此类文件包含在模块中即可。因此,如果类似的内容将包含在另一个模块中,则除非属性具有相同的名称,否则不会出现冲突。