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


How to solve modules which use overrides are not able to install / uninstall properly in prestshop

我在prestashop中创建了一个新模块。在这里,我过度介绍了产品类的一些核心功能。

我的 overrite 文件已放置在以下位置: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 .

我该如何解决这个问题

它的意思就是它所说的。您的代码尝试声明一个类两次(使用相同的),因此存在冲突。

我也不明白为什么你的类被命名为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 选项更好,因为它更快(不检查文件系统)