FROM: http://www.sdtclass.com/4799.html

15年的时候,我写过一篇文章《略谈 vqmod for opencart 插件制作过程》,也不知道被哪些人抄袭过去了。不过无所谓了。文章梳理的思路还是在我这里。今天对这篇文章进行进一步补充。

file标签

如果有多个类似文件,我们写很多个吗?其实可以不必要,利用path和逗号解决这个问题。

  1. <!-- 修改最新产品模块 -->
  2. <file name="catalog/view/theme/*/template/module/latest.tpl">
  3. <!-- 规则 -->
  4. </file>
  5. <!-- 修改热卖产品模块 -->
  6. <file name="catalog/view/theme/*/template/module/bestseller.tpl">
  7. <!-- 规则 -->
  8. </file>
  9. <!-- 改为 -->
  10. <file path="catalog/view/theme/*/template/module/" name="latest.tpl,bestseller.tpl">
  11. <!-- 规则 -->
  12. </file>

其中,上面的 * 代表任何文件,如果有多个模板可以这么解决。

operation标签

如果一个地方,搜索不到,导致整个XML不起作用怎么办呢?可以定义跳过,不过不要总使用这样的,比如你TPL搜索到了代码,但是C层或者M层搜索不到,那样会导致页面报错。所以C层和M层不建议使用跳过,而V层可以。

  1. <file name="catalog/view/theme/*/template/product/product.tpl">
  2. <operation error="skip">
  3. <!-- 规则 -->
  4. </operation>
  5. </file>

当然了,如果你要写个注释,比如这个功能干嘛的。你可以这样写:

  1. <file name="catalog/view/theme/*/template/product/product.tpl">
  2. <operation error="skip" info="添加xx功能">
  3. <!-- 规则 -->
  4. </operation>
  5. </file>

regex

如果你想用正则搜索怎么办呢?有时候普通搜索很难定位,其实vqmod也是支持的啦。

  1. <file name="catalog/view/theme/*/template/product/product.tpl">
  2. <operation error="skip" info="添加xx功能">
  3. <search position="replace" regex="true"><![CDATA[~<div(.*?)class="(.*?)image(.*?)"(.*?)>~]]></search>
  4. <!-- 规则 -->
  5. </operation>
  6. </file>

正则方面以后会写一期文章,如果你不熟悉,可以用别的替代方法,比如上面提到的文章里提到的index,也可以用下面这个。

offset

这个是用于搜索到的第几行,用于position的参数是after或者before的时候。可以是正数或者负数。如果是after,搜索到的行,往下数一行然后添加代码,就是1。如果你是before,然后往上数两行再添加代码在上面,就是2。

下面搜索这段代码添加作为例子。

  1. <div class="col-sm-12">
  2. <label class="control-label"><?php echo $entry_rating; ?></label>
  3. &nbsp;&nbsp;&nbsp; <?php echo $entry_bad; ?>&nbsp;
  4. <input type="radio" name="rating" value="1" />
  5. &nbsp;
  6. <input type="radio" name="rating" value="2" />
  7. &nbsp;
  8. <input type="radio" name="rating" value="3" />
  9. &nbsp;
  10. <input type="radio" name="rating" value="4" />
  11. &nbsp;
  12. <input type="radio" name="rating" value="5" />
  13. &nbsp;<?php echo $entry_good; ?></div>
  14. </div>

用XML对这段代码进行添加代码。如下四个示例:

  1. <file name="catalog/view/theme/*/template/product/product.tpl" keep="true">
  2. <operation error="skip">
  3. <search position="after" offset="1"><![CDATA[<input type="radio" name="rating" value="1" />]]></search>
  4. <add><![CDATA[<b>测试1</b>]]></add>
  5. </operation>
  6. <operation error="skip">
  7. <search position="after" offset="-1"><![CDATA[<input type="radio" name="rating" value="2" />]]></search>
  8. <add><![CDATA[<b>测试2</b>]]></add>
  9. </operation>
  10. <operation error="skip">
  11. <search position="before" offset="1"><![CDATA[<input type="radio" name="rating" value="3" />]]></search>
  12. <add><![CDATA[<b>测试4</b>]]></add>
  13. </operation>
  14. <operation error="skip">
  15. <search position="before" offset="-1"><![CDATA[<input type="radio" name="rating" value="4" />]]></search>
  16. <add><![CDATA[<b>测试4</b>]]></add>
  17. </operation>
  18. </file>

你会得到下面的缓存代码:

大家从上面的图片中不难发现,before的时候offset是负数1的时候和直接用after,不用offset没区别,after的时候offset是负数1的时候和直接用before不用offset的也没区别,负数值大的时候,offset是-5,position是after等同于offset=4,position是before。所以其实offset有负数功能,但是也没太大意义。

iafter和ibefore

相比于after和before,前面加个i的区别就是,在搜索到的代码后面或者前面添加。下面给个例子:

【别问我为啥颜色不一样,我有几个编辑器。】

当sql这里要添加代码的时候,比如 telephone = '" . $this->db->escape($data['telephone']) . "',

代码:

  1. <operation info="添加手机号">
  2. <search position="iafter"><![CDATA[city = '" . $this->db->escape($data['city']) . "',]]></search>
  3. <add><![CDATA[ telephone = '" . $this->db->escape($data['telephone']) . "',]]></add>
  4. </operation>

这样的话,就会在搜索到的代码后面,加入add里指定的代码。值得注意的是,平时使用其他的position时,add定义的你怎么换行都没问题,如果是iafter、ibefore和replace的时候,代码的开头最好紧挨着<add><![CDATA[ 写,为啥这样呢,因为这样SQL又是一整行,而且有时候不适合换行。也可能对后面别人开发的插件代码干扰。以后讲讲vqmod的兼容问题。

ibefore这里不举例子了,同理的。搜索的前面加,和搜索的后面加的效果。

输出:

  1. //iafter 的话
  2. city = '" . $this->db->escape($data['city']) . "', telephone = '" . $this->db->escape($data['telephone']) . "',
  3. //ibefore的话
  4. telephone = '" . $this->db->escape($data['telephone']) . "',city = '" . $this->db->escape($data['city']) . "',

PS:最近太忙了,更新频率自然下降很多了。以后多抽空更新。欢迎关注我们公众号“SDT技术网”。

vqmod for opencart插件制作进阶与技巧的更多相关文章

  1. Xcode 4 插件制作入门

    转自:http://www.onevcat.com/2013/02/xcode-plugin/ 2014.5.4更新 对于 Xcode 5,本文有些地方显得过时了.Xcode 5 现在已经全面转向了 ...

  2. iOS:插件制作入门

    本文将介绍创建一个Xcode4插件所需要的基本步骤以及一些常用的方法.请注意为Xcode创建插件并没有任何的官方支持,因此本文所描述的方法和提供的信息可能会随Apple在Xcode上做的变化而失效.另 ...

  3. JS图片上传预览插件制作(兼容到IE6)

    其实,图片预览功能非常地常见.很意外,之前遇到上传图片的时候都不需要预览,也一直没有去实现过.现在手上的项目又需要有图片预览功能,所以就动手做了一个小插件.在此分享一下思路. 一.实现图片预览的一些方 ...

  4. chrome谷歌浏览器插件制作简易教程

    1.在磁盘上创建一个目录,用来放应用的代码和资源 2.在这个目录中,创建一个文本文件,命名为manifest.json,其内容为: { "manifest_version": 2, ...

  5. npm插件制作及发布基础教程

    最近有同事在搞npm插件,想用了这么久的npm也没有自己制作一个插件出来练一练,所以动手把之前的图片随手势移动的react组件改写成了npm插件,之前的博客地址http://www.cnblogs.c ...

  6. jq 幻灯片插件制作

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  7. 【酷Q插件制作】教大家做一个简单的签到插件

    酷Q插件已经有很多了,社区分享一大堆,不过还是自己写才有乐趣,哈哈.不得不吐槽一下,酷Q竟然不更新了,出了个酷Q pro,还收费!!诶.不过这也影响不了咱写插件的心情,今天教大家写一个酷Q签到插件,虽 ...

  8. WordPress插件制作教程(八): 最后总结

    WordPress插件教程最后一篇,还是为大家简单的做下总结.这次插件制作教程讲的内容和知识点个人觉得不是很多,因为插件制作不单单是这些内容,它涉及的知识很多很多,不是说你会一些函数就可以做出一个好的 ...

  9. WordPress插件制作教程(一): 如何创建一个插件

    上一篇还是按照之前的教程流程,写了一篇WordPress插件制作教程概述,从这一篇开始就为大家具体讲解WordPress插件制作的内容.这一篇主要说一下插件的创建方法. 相信大家都知道插件的安装文件在 ...

随机推荐

  1. @Component、@Service、@Constroller

    @Component.@Service.@Constroller,@Repository,它们分别用于软件系统的不同层次: @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可 ...

  2. 我所理解的event loop

    灵魂三问 JS为什么是单线程的 我们都知道,JS是单线程的语言,那为什么呢?我的理解是JS设计之初就是为了在浏览器端完成DOM操作和一些简单交互的,既然涉及到DOM操作如果是多线程就会带来复杂的同步问 ...

  3. C++实现Vector容器的基本功能

    本文只实现了Vector的默认构造函数.赋值构造函数.赋值函数.析构函数.重置空间大小函数和插入函数,权当起到抛砖引玉的作用,其他函数功能的实现可在此基础之上进行拓展. #include <io ...

  4. 工作中遇到的oracle分页查询问题及多表查询相关

    在工作中,有时,我们会用到oracle分页查询.这时,就需要先了解oracle的rownum.rowmun是oracle的伪列,只能用符号(<.<=.!=),而不能用这些符号(>,& ...

  5. Maven Spring BOM (bill of materials)

    为了防止用Maven管理Spring项目时,不同的项目依赖了不同版本的Spring,可以使用Maven BOM来解决者一问题. 在依赖管理时,引入spring-framework-bom,如: < ...

  6. 不吹不擂,Python编程【315+道题】

    写在前面 近日恰逢学生毕业季,课程后期大家“期待+苦逼”的时刻莫过于每天早上内容回顾和面试题问答部分[临近毕业每天课前用40-60分钟对之前内容回顾.提问和补充,专挑班里不爱说话就的同学回答]. 期待 ...

  7. VMware Station NAT上网模式配置

  8. sqlserver 2008评估期已过

    sqlserver 评估期已过 分类: SQL SERVER2012-08-22 17:04 977人阅读 评论(0) 收藏 举报 打开sqlserver出现提示:评估期已过.有关如何升级的测试版软件 ...

  9. 配置total commander 显示所有或特定文件夹 (带点的文件夹)

    在配置|忽略列表 下可以添加或删除需要隐藏的文件夹通配符.

  10. MyEclipse CI 2018.9.0正式发布(附下载)

    MyEclipse线上特惠,在线立享专属折扣!火热开启中>> 此MyEclipse版本增加了对较新的Wildfly服务器的支持,修复了与PDT等第三方工具的兼容性,并在IDE中包含了许多错 ...