虽说 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. 定时器:为 Windows 实现一个连续更新,高精度的时间供应器

    原著:Johan Nilsson 翻译:lxhui 原文出处:MSDN Magazine March 2004(Timers...) 原代码下载: HighResolutionTimer.exe (4 ...

  2. 十大免费移动程序测试框架(Android/iOS)

    十大免费移动程序测试框架(Android/iOS) 概述:本文将介绍10款免费移动程序测试框架,帮助开发人员简化测试流程,一起来看看吧. Bug是移动开发者最头痛的一大问题.不同于Web应用程序开发, ...

  3. BZOJ 1032 [JSOI2007]祖码Zuma

    1032: [JSOI2007]祖码Zuma Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 637  Solved: 318[Submit][Stat ...

  4. (2015年郑州轻工业学院ACM校赛题) E 汇编原理

    此题属于比较麻烦的模拟题,比赛的时候是队友写的, 比赛结束之后自己也写了一遍,感觉对复杂模拟的掌控还是不行! 解析: 我感觉 ADD操作 和 MOV操作比较类似 所以就写在了一块,MUL操作单独写就行 ...

  5. C#之VS2010ASP.NET页面调用Web Service和winform程序调用Web Service

    一:用ASP.NET调用Web Service 打开VS2010,打开“文件-新建-网站”,选择“ASP.NET网站” 选好存储位置,语言后点击确定,进入默认页面.然后先添加Web引用,把WebSer ...

  6. delphi 托盘程序 转

    Delphi的托盘编程   .现在很多程序都用这个,比如傲游,迅雷等,主要代码如下: uses Windows, Messages, SysUtils, Variants, Classes, Grap ...

  7. 值得收藏的Javascript代码

    1  Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如 ...

  8. HDOJ(HDU) 1718 Rank(水题、、、)

    Problem Description Jackson wants to know his rank in the class. The professor has posted a list of ...

  9. C#实现数据结构——线性表(上)

    什么是线性表 数据结构中最常用也最简单的应该就是线性表,它是一种线性结构(废话,不是线性结构怎么会叫线性表?当然不是废话,古人公孙龙就说白马非马,现代生物学家也说鲸鱼不是鱼). 那什么是线性结构? 按 ...

  10. C++编写ATM(1)

    // ATM的初始.cpp : 定义控制台应用程序的入口点. // /************************************************* 运行环境: VS2008 作者 ...