- N +

opencart3.0之插件开发

opencart3.0之插件开发原标题:opencart3.0之插件开发

导读:

opencart的插件机制 不仅可以不改变程序原代码实现功能需求,还可以重复利用 分享给其他需求者,本篇文件就给大家介绍opencart 插件的原理以及如何开发opencart...

opencart的插件机制 不仅可以不改变程序原代码实现功能需求,还可以重复利用 分享给其他需求者,本篇文件就给大家介绍opencart 插件的原理以及如何开发opencart插件。

  1. 首先我们来查看一个插件的目录结构 (显示最近游览商品的插件)

    这个插件里主要的是upload文件夹 和install.xml文件。  upload文件夹里一般都新增的文件,也有些是会覆盖的文件(同名同路径),但覆盖的文件是不可逆的,也就是
    说如果要卸载这个插件,那么覆盖之前的文件也会被删除,会造成程序文件缺失。所以如果不是必须的,我们最好在upload文件夹中不要有会覆盖的文件。

    1.png

    install.xml 文件的开头内容是声明插件合适的opencart的版本,以及开发者的相关信息,主体内容是修改程序的代码片段。

    2.png

  2. 简单的讲解一下 插件安装到实现的原理: 上传插件 -> 解压文件 -> 将解压后upload下的文件移动到对应的目录 并将文件路径记录到数据库中,然后将install.xml文件的内容
    记录到数据库中 -> 更新ocmod配置,系统根据 保存的install.xml文件内容生成 改动后的缓存文件在 /storage/modification目录下,opencart在执行代码时,会优先执行缓
    存中的文件,跳过原来的文件。

    关于install.xml文件添加修改代码片段的常用属性说明

  3. <file name="admin/controller/catalog/product.php">  <!-- 文件标签 双标签 必填-->
        <operation error="skip"> <!--声明开始修改的第一个片段,有多个修改的片段,则需要添加多个完整的operation标签。有error属性:找不到目标代码时执行的操作,属性值有skip、log;双标签必填-->
        <!-- search 搜索代码标签,作用是为add标签添加代码做参考定位,在代码下面添加目标代码 search标签有 index属性:目标代码有多个时用该属性声明排序(从0开始),属性值为数字;Offset属性:
        目标代码为原点往下排的第几行,属性值为数字;双标签 必填 -->
            <search><![CDATA[  
             $data['text_form'] = !isset($this->request->get['product_id']) ? $this->language->get('text_add') : $this->language->get('text_edit');
                ]]>
             </search>
          <!-- 添加的内容标签 添加或修改代码部分。常用属性position,属性值有 after 意思是在search目标代码之后添加,还有 before 在目标代码之前,replace 替换目标代码,双标签 必填 -->
                
            <add position="after">><![CDATA[  
             $data['product_id'] = !isset($this->request->get['product_id']) ? '' : $this->request->get['product_id'];
            ]]></add>
        </operation> <!-- 第一个修改片段结束 -->
    </file>


  4. 通过以上的说明,可以知道我们将新增的文件按照对应的路径放入upload空文件夹里,然后将install.xml文件和upload文件夹压缩命名为 xxxx.ocmod.zip,插件就完成了。
    这里需要额外说明一个情况,如果没有新增文件,只有install.xml文件,那么这个插件也是需要新建一个空的upload目录,我经过代码追踪查询到 安装插件的程序中会检
    查是否含有upload目录,如下图。
    4.png

    制作心得:插件的制作其实不是特别难,但插件的兼容性是一个比较繁琐的问题,因为插件和插件之间也可能会有冲突的地方,针对于不同版本也会有冲突的地方,所以
    想要真正的做好一个插件,还是要对应好每一个文件和每一段代码。

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

验证码

    评论列表 (暂无评论,共7428人参与)参与讨论

    还没有评论,来说两句吧...