我在Prestashop 1.7(例如here或there)中阅读了有关“重置”或“卸载”和“安装”正在开发的模块的许多类似问题。
Basicaly我已在[prestashop project]/modules/[custom module]/override/classes/
和[prestashop project]/modules/[custom module]/override/controllers/front/
中覆盖了文件。我的所有文件都遵守惯例:
<?php
class [Class to be overridden] extends [Class to be overridden]Core {
....
}
?>
在[prestashop project]/override/classes/
或[prestashop project]/override/controllers/front/
我的文件经常从[prestashop project]/modules/[custom module]/override/...
复制而出现错误:例如,无法正确打开/关闭的括号{}缓冲区(源文件中不存在)班上没用。
因此,我手动删除了[prestashop project]/override/...
中的错误复制文件并启动了一些“重置”操作。
我要补充一点,在手动删除后,我经常在尝试“重置”自定义模块时在Symfony日志中看到此问题:
安装时模块[模块名称]抛出的异常。类[覆盖文件] OverrideOriginal_remove [some char chain]不存在。
如[prestashop project]/override/readme_override.txt
中所述:
常见问题
问:我添加了一个覆盖文件,但PrestaShop似乎忽略了它 答:您需要触发/cache/class_index.php文件的重新生成。只需删除文件即可完成此操作。手动删除覆盖时也是如此:为了恢复默认行为,您必须删除/cache/class_index.php文件。
但Prestashop 1.7中不存在[prestashop project]/cache/class_index.php
。
答案 0 :(得分:0)
在Prestashop 1.7中,class_index.php
个文件位于:
[prestashop project]/app/cache/dev
或
[prestashop project]/app/cache/prod
,如果项目设置为“dev”或“prod”模式。
答案 1 :(得分:0)
要覆盖Prestashop 1.7中的类,您必须在模块安装期间复制[module_name]/override/classes
目录中的类文件,并在卸载时将其删除。
here对此进行了详细说明。