简介:

在phpcms中,各个功能是以模块为单位定义的(对应modules目录),如果需要新增功能最好的办法就是开发一个模块,然后复制到phpcms目录下,然后进入后台安装即可。

官方说明

phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块。即url访问中的m
示例:
http://www.yourname.com/index.php?m=content
那么您访问的就是phpcms/modules/content 这个模块。
如果创建一个,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。

 

 

开发步骤:

1.建立目录结构:

我们要开发的东东(也就是模块)就在/phpcms/modules/下面

如果没有什么特别的,在开发一个模块之前先要按照目录结构建立好相关目录并且设计好数据库表结构。下面拿开源部落开发的一个留言板模块guestbook讲解一下

下面是guestbook模块下的目录结构:

guestbook
  --classes //这个是mytest模块会用到的类
    --guestbook_tag.class.php//可能是用来生成前台模板引擎标签的,目前暂不讨论   --functions//guestbook模块用到的函数
    --global.func.php//目前里面没有东西   --install//安装此模块需要的一些配置文件和建立数据表mysql语句什么的在这里     --language//多语言的时候会用到
      --zh-cn//语言包文件夹
        --guestbook.lang.php//多语言文件
    --config.inc.php//这个配置文件是用来描述整个模块的一些信息     --extention.inc.php//这个是创建目录结构 .这个文件也用来控制权限     --model.php//模块使用了哪些数据模型.(可以理解为使用了哪些表.)     --module.sql//这个向数据库里面modules插入模块的记录     --guestbook.sql//这个文件在安装的时候会被执行,把建立数据库表的sql放进来   --templates //guestbook模块用到的后台模板文件   --uninstall //卸载模块时候用到的配置和文件 guestbook.php //这个是guestbook模块的后台控制器文件` index.php//这个是前台的控制器

 

2.建立数据模型

建立完一个这样的结构后 我们还需要在/phpcms/model/下面建立我们的数据模型

例如 guestbook_model.class.php (这个使用了很典型的工厂模式)

具体每个文件里面写了些什么.我们一个一个来看 .首先来看我们在model文件夹下面建立guestbook_model.class.php文件.

代码如下:
<?php
defined(\'IN_PHPCMS\') or exit(\'No permission resources.\');
pc_base::load_sys_class(\'model\', \'\', 0);//加载model类
class guestbook_model extends model {
    function __construct() {
        $this->db_config = pc_base::load_config(\'database\');//加载数据库配置文件
        $this->db_setting = \'default\';//默认的数据库配置.//多个库的话可以在这里选库
        $this->table_name = \'guestbook\';//表名称,不用加表前缀
        parent::__construct();
    } 
}
?>

第一行的作用是确定是不是在phpcms的运行框架内.

第二行加载系统的model类,后面的参数0的意思是并不实例化.

最后一行调用了父类的构造方法.可以在phpcms/libs/classes/model.class.php中找到

而这个model类里面定义了很多对数据的操作方法,最基本的增删改查。以后我再详细说说model基本的一些方法。

 

3.编写modules中的文件

接着来看看modules/install 里面的东东

第一个language文件夹是用来支持多语言菜单的。

该留言板模块只有一个zh-cn文件夹,里面的guestbook.lang.php大体内容类似下面的:

<?php
$LANG[\'guestbook\']                         =    \'留言板\';
$LANG[\'guestbook_name\']                 =     \'用户名称\';
$LANG[\'tel\']                             =     \'联系电话\';
$LANG[\'email\']                             =     \'用户email\';
$LANG[\'title\']                         =     \'留言标题\'; 
$LANG[\'lytime\']                         =     \'留言时间\'; 
$LANG[\'typeid\']                         =     \'所属分类\';
$LANG[\'status\']                         =     \'状 态\';
$LANG[\'type_id\']                         =     \'分类ID\';

 

该lang文件应该会在安装的时候会复制到./phpcms/languages/zh-cn中一份

然后是config.inc.php,这个里面写的是一些关于模块安装时候的信息。

文件里面是这个结构的:

<?php 
  defined(\'IN_PHPCMS\') or exit(\'Access Denied\');
  defined(\'INSTALL\') or exit(\'Access Denied\');
  $module = \'guestbook\';
  $modulename = \'留言板\';
  $introduce = \'留言板模块\';
  $author = \'Jason\';
  $authorsite = \'http://cnblogs.com/savokiss\';
  $authoremail = \'jaynaruto@qq.com\';
?>

 当然以前的信息是开源部落的,我稍微改了一下。

 

再然后是extention.inc.php这个文件是用来创建后台管理菜单的目录结构的,也是用来控制权限的

代码如下:
<?php
defined(\'IN_PHPCMS\') or exit(\'Access Denied\');
defined(\'INSTALL\') or exit(\'Access Denied\');
$parentid = $menu_db->insert(array(\'name\'=>\'guestbook\', \'parentid\'=>29, \'m\'=>\'guestbook\', \'c\'=>\'guestbook\', \'a\'=>\'init\', \'data\'=>\'\', \'listorder\'=>0, \'display\'=>\'1\'), true);
$menu_db->insert(array(\'name\'=>\'add_guestbook\', \'parentid\'=>$parentid, \'m\'=>\'guestbook\', \'c\'=>\'guestbook\', \'a\'=>\'add\', \'data\'=>\'\', \'listorder\'=>0, \'display\'=>\'0\'));
$menu_db->insert(array(\'name\'=>\'edit_guestbook\', \'parentid\'=>$parentid, \'m\'=>\'guestbook\', \'c\'=>\'guestbook\', \'a\'=>\'edit\', \'data\'=>\'\', \'listorder\'=>0, \'display\'=>\'0\'));
$menu_db->insert(array(\'name\'=>\'delete_guestbook\', \'parentid\'=>$parentid, \'m\'=>\'guestbook\', \'c\'=>\'guestbook\', \'a\'=>\'delete\', \'data\'=>\'\', \'listorder\'=>0, \'display\'=>\'0\'));
$menu_db->insert(array(\'name\'=>\'guestbook_setting\', \'parentid\'=>$parentid, \'m\'=>\'guestbook\', \'c\'=>\'guestbook\', \'a\'=>\'setting\', \'data\'=>\'\', \'listorder\'=>0, \'display\'=>\'1\'));
$menu_db->insert(array(\'name\'=>\'add_type\', \'parentid\'=>$parentid, \'m\'=>\'guestbook\', \'c\'=>\'guestbook\', \'a\'=>\'add_type\', \'data\'=>\'\', \'listorder\'=>0, \'display\'=>\'1\'));
$menu_db->insert(array(\'name\'=>\'list_type\', \'parentid\'=>$parentid, \'m\'=>\'guestbook\', \'c\'=>\'guestbook\', \'a\'=>\'list_type\', \'data\'=>\'\', \'listorder\'=>0, \'display\'=>\'1\'));
$menu_db->insert(array(\'name\'=>\'check_register\', \'parentid\'=>$parentid, \'m\'=>\'guestbook\', \'c\'=>\'guestbook\', \'a\'=>\'check_register\', \'data\'=>\'\', \'listorder\'=>0, \'display\'=>\'1\'));


$language = array(\'guestbook\'=>\'留言板\', \'edit_guestbook\'=>\'编辑留言板\', \'delete_guestbook\'=>\'删除留言板\', \'guestbook_setting\'=>\'模块配置\', \'add_type\'=>\'添加类别\', \'list_type\'=>\'分类管理\', \'check_register\'=>\'审核申请\');
?>

文件最后那个language数组,是用来插入系统的language\zh-cn\system_menu.lang.php里面的

 

然后是model.php 这个就是你使用了哪些数据模型 可以理解为使用了哪些表

代码如下:
<?php  
  defined(\'IN_PHPCMS\') or exit(\'Access Denied\');
  defined(\'INSTALL\') or exit(\'Access Denied\');
  return array(\'guestbook\');
?>

 

然后是module.sql 这个是用来向系统的module表里面插入数据用的,相当于注册模块

代码如下:
INSERT INTO `phpcms_module` VALUES (\'guestbook\', \'留言板\', \'\', \'0\', \'1.0\', \'\', \'array (\n  1 => \n  array (\n    \\'is_post\\' => \\'1\\',\n    \\'enablecheckcode\\' => \\'0\\',\n  ),\n)\', \'0\', \'0\', \'2011-02-22\', \'2010-02-22\');

 

然后是guestbook.sql 建立你数据库表的语句应该写在这个文件里面

代码如下:
DROP TABLE IF EXISTS `phpcms_guestbook`;
CREATE TABLE `phpcms_guestbook` (
  `guestid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `siteid` smallint(5) unsigned DEFAULT \'0\',
  `typeid` smallint(5) unsigned NOT NULL DEFAULT \'0\',
  `name` varchar(50) NOT NULL DEFAULT \'\',
  `tel` varchar(50) NOT NULL DEFAULT \'\',
  `email` varchar(100) NOT NULL DEFAULT \'\',
  `title` varchar(100) NOT NULL DEFAULT \'\',
  `introduce` text NOT NULL,
  `username` varchar(30) NOT NULL DEFAULT \'\',
  `listorder` smallint(5) unsigned NOT NULL DEFAULT \'0\',
  `elite` tinyint(1) unsigned NOT NULL DEFAULT \'0\',
  `passed` tinyint(1) unsigned NOT NULL DEFAULT \'0\',
  `addtime` int(10) unsigned NOT NULL DEFAULT \'0\',
  PRIMARY KEY (`guestid`),
  KEY `typeid` (`typeid`,`passed`,`listorder`,`guestid`)
) TYPE=MyISAM;

接着就是你所使用的后台模板 应该放在templates里面 命名的规则应该是guestbook_***.tpl.php

我的模板比较多就不贴代码了

 

最后是控制器,index.phpguestbook.php,其中index.php是前台控制器,guestbook.php是后台控制器

控制器里面是针对你每个url传递过来的action也就是a=?的动作.默认动作是init

 

留言板模块下载地址百度网盘

 

本文大部分内容参考自:http://www.3lian.com/edu/2013/04-27/67466.html

版权声明:本文为savokiss原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/savokiss/p/4046487.html