OpenCart v2使用OCMOD修改代码提示未找到对应代码行如何解决
OCMOD匹配失败原因说明
核心原因
- 空白字符精确匹配规则限制
OCMOD的搜索逻辑是严格全匹配,除了代码内容本身,代码前后的空格数量、缩进用的制表符/空格差异、换行符差异都会影响匹配结果。你在IDE中看到代码内容一致,大概率是两类文件的空白符号不统一导致的匹配失败。 - CDATA块首尾冗余空白
你编写的规则中,<search>标签包裹的CDATA块如果开头有多余换行、结尾]]>前有多余空白,都会被计入匹配内容,和源文件的实际代码产生差异。 - 多行匹配兼容问题
OpenCart 2.0早期版本对多行代码搜索的支持存在缺陷,同时匹配多行代码时也有概率触发匹配失败。
可行解决方案
- 给
<search>标签添加trim="true"属性,自动忽略匹配内容前后的所有空白字符,修改后的规则示例如下:
<file path="admin/view/template/sale/order_form.tpl"> <operation> <search trim="true"><![CDATA[ if (option['type'] == 'select' || option['type'] == 'radio' || option['type'] == 'image') { html += '<input type="hidden" name="product[' + i + '][option][' + option['product_option_id'] + ']" value="' + option['product_option_value_id'] + '" />'; } ]]></search> <add position="replace"><![CDATA[ if (option['type'] == 'select' || option['type'] == 'radio' || option['type'] == 'image'||option['type']=='input_qty') { html += '<input type="hidden" name="product[' + i + '][option][' + option['product_option_id'] + ']" value="' + option['product_option_value_id'] + '" />'; } ]]></add> </operation> </file>
- 也可以缩小匹配范围,仅保留可唯一识别代码的核心行进行匹配,进一步降低匹配失败概率。
- 规则修改完成后,需要清空OpenCart的OCMOD缓存、刷新修改存储后再验证效果。
内容的提问来源于stack exchange,提问作者Bogdan Onyshenko
相关产品推荐
相关产品推荐

