我正在Prestashop中做一个模块,我需要覆盖类CartCore中的方法更新。我在文件夹覆盖中创建了一个类(我已尝试过modules / name_of_module / override)Cart扩展CartCore(文件是Cart.php),我有下一个代码。
public function update($null_values = false, $hook = true)
{
if (isset(self::$_nbProducts[$this->id])) {
unset(self::$_nbProducts[$this->id]);
}
if (isset(self::$_totalWeight[$this->id])) {
unset(self::$_totalWeight[$this->id]);
}
$this->_products = null;
$return = parent::update($null_values);
if($hook) Hook::exec('actionCartSave');
return $return;
}
我删除了文件缓存/ class_index.php,我已经激活了后台性能中的覆盖,但它不起作用。仅在我更改原始Cart类时才有效,但我不想这样做。
谢谢!
答案 0 :(得分:2)
在模块中创建新的覆盖时Prestashop不知道这个新文件。删除/cache/class_index.php
只会强制Prestashop在根/overrides/
文件夹中查找新文件,但不会在模块/modules/your_module/overrides/
文件夹中查找。
您的文件需要放在根/overrides/
文件夹下。安装模块时会自动完成此过程。模块中的每个覆盖文件都放在根/overrides/
文件夹下。如果您在安装模块时创建了新的覆盖,Prestashop将不会为您移动它。
然后你有两种可能性。卸载并安装模块。或者将此文件复制到根/overrides/
文件夹并删除/cache/class_index.php
文件。
另外考虑到Niclas Larsson建议将此文件放在/overrides/classes/Cart.php
下。
答案 1 :(得分:1)
覆盖课程
为了覆盖Product类,您的文件需要被称为Product.php,并且必须具有Product类,然后扩展ProductCore类。
该文件可以放在以下任一位置:
/override/classes/Product.php
/modules/my_module/override/classes/Product.php
根据文件类型(类,控制器,模块......)覆盖文件夹中的文件
所以我认为你做得对,但你需要在覆盖中添加文件夹'classes',并将文件移入其中。