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. 46. 47. Permutations

    求全排列. 1. 无重复元素 Given a collection of distinct numbers, return all possible permutations. For example ...

  2. Vysor_v1.6.9

    ---恢复内容开始--- 装系统 D:\home sys 触摸板驱动 1 D:\envs\common\jdk jdk安装 2 DriveTheLife 3 img 4 PCMaster 5 Sogo ...

  3. 弹出层小插件之(一)sweetalert

    //弹出层小插件之(一)sweetalert 1.引入sweetalert.css 2.引入sweetalert.min.js 下载地址:http://t4t5.github.io/sweetaler ...

  4. MyEclipse持续性开发教程:用JPA和Spring管理数据(二)

    MyEclipse红运年货节 在线购买低至69折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于JPA / Spring的功能.有关设置JPA项 ...

  5. Chrome 应用推荐 - Shortcuts for Google™ 3.4.1

    Choose from 200+ Google™ services to show up as buttons in a space-saving popup. Official Firefox ex ...

  6. L241

    Parents, try to get enough sleep to role model good habits to children. Bessesen notes that some med ...

  7. avalon源码阅读(1)

    来源 写angularJS源码阅读系列的时候,写的太垃圾了. 一个月后看,真心不忍直视,以后有机会的话得重写. 这次写avalonJS,希望能在代码架构层面多些一点,少上源码.多写思路. avalon ...

  8. 移动端 解决自适应 和 多种dpr (device pixel ratio) 的 [淘宝] 解决方案 lib-flexible

    其实H5适配的方案有很多种,网上有关于这方面的教程也非常的多. 不管哪种方法,都有其自己的优势和劣势. 为什么推荐使用Flexible库来做H5页面的终端设备适配呢?   原理  简单易懂  源码疑问 ...

  9. Centos7 安装 MySQL5.7

    Centos7 安装 MySQL5.7 一.环境介绍 1.安装包版本介绍 MySQL 有三种安装方式:RPM安装.二进制包安装.源码包安装.我们这篇文章以二进制方式安装MySQL 软件名称 版本 系统 ...

  10. 求a^b

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求a^b 由于结果可能很大,我们现在只需要知道这个值 mod 1012就可以了(为什么是1012?我的生日) ...