虽说 PHPCMS 开源,但其它开发文档及参考资料实在少得可怜。进行二次开发时,自己还得慢慢去研究它的代码,实在让人郁闷。

PHPCMS 的“Baibu/Google地图”实在有待改进,对于数据量比较大的网站来说,就一个字,烂!为了 SEO 不得不另辟蹊径,于是研究了几个 PHPCMS 自带的插件,为了方便以后的插件开发,顺便总结一下。

PHPCMS 插件基本目录结构:

  1. └plugin (插件目录名,下同)
  2. ├admin
  3. ├include
  4. ├templates
  5. ├admin.inc.php
  6. └priv.inc.php
  7. ├include
  8. ├common.inc.php
  9. └priv.inc.php
  10. ├install
  11. ├languages
  12. ├plugin.lang.php
  13. └plugin_admin.lang.php
  14. ├templates
  15. ├chmod.txt
  16. ├config.inc.php
  17. ├extention.inc.php
  18. └mysql.sql
  19. ├uninstall
  20. ├delete.txt
  21. ├extention.inc.php
  22. └mysql.sql
  23. └index.php

先讲讲插件的安装吧。文件夹:plugin/install

plugin/install/languages 文件夹内的文件是你所开发的插件的语言标签文件。语言标签类似这样子的“ $LANG['tag_name'] = '语言标签内容''; ”,语言标签文件通常有两个,一个是前台的,一个是后台的。

plugin/install/templates 文件夹内的插件模板文件在安装时会被复制到当前模板方案所在目录下的插件模板目录里(如 templates/default/plugin),所以如果安装插件后要更换模板方案,需要把插件模板目录复制一下。但是,如果你开发的插件没有前台功能,templates 这个文件夹可以直接删掉。顺便提下,name.inc.php 文件存放的是当前目录下的所有模板文件的中文名,每一个模板目录里都有这个文件的。

如果你所开发的插件需要将数据写入指定文件夹内时,需要将指定文件夹路径保存到 chmod.txt 文件内,插件在安装时会赋予所指定的文件夹写入权限。格式:“plugin/data/”,每行一条记录。

config.inc.php 文件保存的是插件的相关信息,如插件名称、开发者相关资料什么的。如下:

  1. $module = "sitemap";
  2. $modulename = "XML Sitemap";
  3. $introduce = "";
  4. $author = "Victor";
  5. $authorsite = "http://www.sougee.com/";
  6. $authoremail = "admin@sougee.com";

extention.inc.php 文件主要用于创建后台菜单,通常是模块管理下相关菜单及模板管理下相关菜单。后台菜单链接地址的格式说明如下:

  1. /*
  2. * mod=sitemap 模块名称,插件文件夹
  3. * file=build 对应plugin/admin/build.inc.php文件
  4. * action=manage 相关参数
  5. * 如果这里的mod=phpcms,file=build 对应的则是根目录下的admin/build.inc.php文件
  6. */
  7. ?mod=sitemap&file=type&action=manage
  8. /*
  9. * 以下的菜单链接通常用于模块的 "新建模板" 或 "模板管理"
  10. * 给相关插件添加菜单时,只要把 module 的值改为插件模块名即可($module)
  11. */
  12. ?mod=phpcms&file=template&action=add&module=guestbook
  13. /*
  14. * 如果你的插件涉及语言标签文件
  15. * 务必在extention.inc.php文件里加入以下代码
  16. * 作用是将插件里的语言标签文件复制到PHPCMS根目录下的languages/文件夹里
  17. */
  18. dir_copy(PHPCMS_ROOT . $installdir . '/install/languages/', PHPCMS_ROOT . 'languages/' . LANG . '/');

mysql.sql 文件里有一条语句是必须的,“INSERT INTO `phpcms_module` ...”,需不需要创建表什么的就看你开发的插件而定了。

插件的卸载。文件夹:plugin/uninstall

主要就是三个文件(请看插件基本目录结构)。作用分别是:删除插件文件,删除插件相关的表及数据(后台菜单)。

以上内容只是前菜,下面端上主菜了,以我自己开发的“XML Sitemap”插件为例,扭扭脖子开始吧。

先说说下面两个文件的代码,注意看注释
plugin/include/common.inc.php
plugin/include/priv.inc.php

  1. /*
  2. * plugin/include/common.inc.php
  3. */
  4. $mod = 'sitemap';  //模块名称,即插件目录名
  5. define('MOD_ROOT', substr(dirname(__FILE__), 0, -8));  //定义模块根目录
  6. require substr(MOD_ROOT, 0, -strlen($mod)).'include/common.inc.php';  //包含phpcms相关文件
  7. /*
  8. * plugin/include/priv.inc.php
  9. * 设置当前插件有哪些权限
  10. * 'file'=>'' 为空指的是plugin/admin下所有的文件
  11. * 'file'=>'build' build对应plugin/admin/build.inc.php文件
  12. * 'file'=>'setting' setting对应plugin/admin/setting.inc.php文件
  13. * 'action'=>'manage' 指定允许接收的地址栏参数,多个参数用逗号隔开
  14. */
  15. return array(
  16. 'all'=>array('name'=>'模块管理', 'file'=>'', 'action'=>''),
  17. 'build'=>array('name'=>'生成站点地图', 'file'=>'build', 'action'=>'manage'),
  18. 'setting'=>array('name'=>'模块配置', 'file'=>'setting', 'action'=>''),
  19. );

你要是仔细观察,会发现还有个 plugin/admin/priv.inc.php 文件没设置权限,由于这个文件比较特殊,所以无需设置权限,系统会自动进行相关处理。如果你开发的插件不需要设置权限,你只要把 plugin/include 及 plugin/admin 这两个文件夹下的 priv.inc.php 文件删除即可。

plugin/admin 文件夹里的是插件后台相关文件,可以说是插件的核心部分。其下文件的命名方式是:xxx.inc.php ,不过其中的 priv.inc.php 是插件“权限设置”页面,此文件名不能更改,若插件不考虑权限的话可直接删除,而 admin.inc.php 文件是必须有的,它是插件连接后台的桥梁。

plugin/admin/templates 下是插件后台模板文件,模板文件的命名方式是:xxx.tpl.php ,不过如果所开发的插件涉及到前台标签,还需要几个特殊的模板文件,如下:

  1. /*
  2. * 经研究,这几个插件标签模板文件貌似是固定的
  3. * 这里的 plugin 是指插件目录名
  4. */
  5. tag_plugin_add.tpl.php
  6. tag_plugin_ajax_edit.tpl.php
  7. tag_plugin_copy.tpl.php
  8. tag_plugin_edit.tpl.php
  9. tag_plugin_manage.tpl.php

讲到这里,PHPCMS插件开发也算是入门了,不过记住修行还在个人,其路依然漫漫。与君共勉!

PHPCMS 插件开发教程及经验谈的更多相关文章

  1. jQuery插件开发教程

    jQuery插件开发教程  ——让你的jQuery水平提升一个台阶 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台 ...

  2. [js插件开发教程]实现一个比较完整的开源级选项卡插件

    在这篇文章中,我实现了一个基本的选项卡功能:请猛击后面的链接>>   [js插件开发教程]原生js仿jquery架构扩展开发选项卡插件. 还缺少两个常用的切换(自动切换与透明度渐变),当然 ...

  3. 【2021/12/31】uniapp之安卓原生插件开发教程

    uniapp之安卓原生插件开发教程 准备 hbuilderX,下载 app离线SDK,下载 Andorid Studio,安卓官方或中文社区 证书(可以自己准备,也可以使用android Studio ...

  4. PHPCMS V9教程之快速入门

    这篇文章要为大家来介绍PHPCMS V9这个系统的一些基本知识,PHPCMS是基于面向对象的,严格的安装MVC开发模式开发的CMS系统,同时他还是一个非 常不错的PHP框架.下面我们一起看一下PHPC ...

  5. phpcms 采集教程

    Phpcms网站管理系统目前最新版本为Phpcms v9,作为国内主流CMS系统之一,目前已有数万网站的应用规模.那么其自带的采集模块功能如何呢,来看看吧. 文章采集 Phpcms v9默认内置有文章 ...

  6. phpcms v9教程 联动搜索在房地产网站开发中的应用

    开发简述:使用phpcms v9系统,修改源文件5个,创建模型:楼盘.出售.出租.中介.小区,增加联动菜单:楼盘,增加用户组:房产中介.实现功能:游客发布信息.会员申请中介.楼盘全方位展示.报名团购. ...

  7. phpcms插件开发初步规范

    phpcms公用库函数原型 (一)./include/global.php 中的函数可在phpcms的任何一个程序中调用,下面是各函数的原型及用法. message($alert,$goback='' ...

  8. (转)跟我一起学JQuery插件开发教程

    在逛codeproject网站的时候,突然看到一篇文章:How to write plugin in Jquery. 如果对E文好的同学 ,可以看上面的连接.现在我把上面网站的及结合自己的想法写这篇文 ...

  9. [js插件开发教程]一步步开发一个可以定制配置的隔行变色小插件

    隔行变色功能,不用js,直接用css伪类就可以做,这个实例可以作为js插件开发很好的入门级实例.本文实现的隔行变色包括以下功能: 1,支持2种常用结构共存( div元素 和 表格类型 ) 2,一个页面 ...

随机推荐

  1. Android 首次进入应用时加载引导界面

    功能需求:首次进入应用时加载引导界面 思路: 1.首次进入,怎么判断?查看SharedPreferences中某个字段 2.基本上每个应用都有个进入实际功能是的动画加载页面,我们可以在该Activit ...

  2. linux wenjian

    文件锁是一种文件读写机制,在任何特定的时间只允许一个进程访问一个文件.利用这种机制能够使读写单个文件的过程变得更安全. 在这篇文章中,我们将探讨Linux中不同类型的文件锁,并通过示例程序来理解它们之 ...

  3. Nodejs in Visual Studio Code 04.Swig模版

    1.开始 设置Node_Global:npm config set prefix "C:\Program Files\nodejs" Express组件:npm install e ...

  4. LinGo:投资问题——线性规划

    一.根据题目所给数据,建立一张表格方便查看 项目A 项目B 项目C 项目D 可投资年 1,2,3,4 3 2 1,2,3,4,5 收回本利年 次年年末 第5年 第5年 当年年末 本利 1.06 1.1 ...

  5. Topcoder 好题推荐

    SRM SRM147 DIV1 1000pt DP SRM148 DIV1 1100pt 递归 SRM149 DIV1 1000pt math SRM150 DIV1 500pt DP SRM469 ...

  6. NS CKD

    NS 定义:ALB<30:高脂血症:大量蛋白尿>3.5g:浮肿 见于:肾小球肾炎.小血管炎.微血管血栓性疾病.NSAIDs引起的急性间质性肾炎.不见于肾大血管病.间质性.小管性疾病. 并发 ...

  7. [原创小知识] 如何优雅的判断 ie 版本

    之前一直不怎么做低版本ie的前端,毕竟ie的大半江山都被chrome 霸占,但大部分情况下,却还是要去兼容下那些老顽固.一切的原因,都是因为当年微软的年轻气盛,喜欢另起炉灶,真是很无语. 通常我们去h ...

  8. Git学习资料整理

    Git作为一个优秀的版本控制系统,是我们开发人员必须要学会使用的一个工具,接触git一年多以来,也看了不少相关资料,今天把我所看过的一些学习资源整理一下. Git入门当然首推廖雪峰廖老师的教程:Git ...

  9. shell脚本编写汇集

    一.替换文本: ##1 sed -i 's/disabled=true/disabled=false/' /etc/fdfs/storage.conf ##2 sed -i 's/base_path= ...

  10. android performClick使用

    performClick 是使用代码主动去调用控件的点击事件(模拟人手去触摸控件) ----------------------------------------- boolean android. ...