Opencart 3.0.3.x部分控制器修改无效果问题排查求助
针对你遇到的部分控制器/模型修改无效果的问题,结合VQMod和前任硬编码的背景,给你几个排查方向:
VQMod规则强制覆盖
去vqmod/xml目录下翻所有xml规则文件,找有没有针对catalog/controller/account/login.php的改写逻辑。不少VQMod规则会直接替换整个方法甚至文件内容,你改原文件自然没用。可以先把vqmod/xml临时改名为vqmod/xml_bak,刷新页面测试如果修改生效了,再逐个恢复xml文件定位具体捣乱的规则。硬编码路由映射
前任可能在index.php或者核心路由文件里硬改了路由指向,比如把account/login路由定向到了某个自定义控制器,而非默认的catalog/controller/account/login.php。可以在index.php里加临时调试代码,比如在路由解析后打印$route和对应的控制器加载路径,看看实际跑的是哪个文件。OCMod缓存残留
有些Opencart版本自带OCMod,哪怕清了VQMod缓存,OCMod生成的修改文件还在system/storage/modification目录里生效。直接删掉整个modification目录,刷新页面再测试修改是否生效。自定义控制器优先级
主题或扩展可能在catalog/controller下创建了自定义目录(比如extension/module或者主题专属目录),如果存在和account/login路由同名的自定义控制器,Opencart会优先加载这个自定义文件,忽略默认的account/login.php。可以全目录搜索login.php,看看有没有其他路径下的同名控制器。模型修改无效的额外排查
- 同样检查VQMod/OCMod对目标模型文件的改写规则,尤其是和登录相关的
catalog/model/account/customer.php这类文件。 - 看代码里有没有硬编码的模型实例化,比如开发者没使用
$this->load->model(),而是直接new了某个自定义模型类,导致默认模型文件的修改不生效。
- 同样检查VQMod/OCMod对目标模型文件的改写规则,尤其是和登录相关的
内容的提问来源于stack exchange,提问作者Peter

