如何解决使用覆盖的模块无法在prestshop中正确安装/卸载

时间:2014-12-29 09:08:36

标签: php prestashop

我在prestashop中创建了一个新模块。在这里,我已经覆盖了产品类的一些核心功能。

我的覆盖文件位于以下位置:prestashop/modules/mymodule/override/

当我安装模块时,我收到以下错误:

 Cannot redeclare class ProductOverrideOriginal in /var/www/html/htdocs/prestashop/modules/sharesoft_relatedproducts/sharesoft_relatedproducts.php(96) : eval()'d code on line 2
[PrestaShop] Fatal error in module sharesoft_relatedproducts.php(96) : eval()'d :
Cannot redeclare class ProductOverrideOriginal .

我该如何解决这个问题

1 个答案:

答案 0 :(得分:1)

这意味着它说的话。您的代码尝试两次声明一个类(使用相同的),因此存在冲突。

我也不明白为什么你的班级被命名为ProductOverrideOriginal。所有Prestashop覆盖必须覆盖原始的PrestaShop类,例如

class Product extends ProductCore { ...

从错误消息中我假设你试图包含你的覆盖类

require('/override/sharesoft_relatedproducts.php');

但是模块文件夹中的所有文件

prestashop/modules/mymodule/override/

会自动复制到

prestashop/override/

在模块安装期间。我的猜测是你的覆盖类文件被复制到那里并被加载,但是你也尝试在你的模块中再次包含它,这会给你错误(尝试声明两次)。

另外,请确保使用以下语句:

require_once('myfile.php');

if (!class_exists('MyFile'))
    require_once('myfile.php');

确保同一个类未声明两次。 Seconde选项更好,因为它更快(不检查文件系统)