覆盖Prestashop 1.6.1.4

时间:2016-05-31 14:05:31

标签: php web module override prestashop

我正在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类时才有效,但我不想这样做。

谢谢!

2 个答案:

答案 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)

Overriding default behaviors

  

覆盖课程
  为了覆盖Product类,您的文件需要被称为Product.php,并且必须具有Product类,然后扩展ProductCore类。

  该文件可以放在以下任一位置:
  /override/classes/Product.php
  /modules/my_module/override/classes/Product.php

根据文件类型(类,控制器,模块......)覆盖文件夹中的文件

所以我认为你做得对,但你需要在覆盖中添加文件夹'classes',并将文件移入其中。