当前位置:文档之家› PHPCMS V9 二次开发实例–留言本

PHPCMS V9 二次开发实例–留言本

下面我们将通讲解一个留言本实例,来帮助你更好的掌握PHPCMS V9的二次开发流程。

并在开发过程中体验PHPCMS V9。

在此我们只做基本功能的演示,更多的功能开发,期待你的继续挖掘。

4.1需求分析本实例用PHPCMS V9基础功能开发设计一个留言本管理系统,要求如下:后台:可管理、回复、删除留言信息可控制留言是否前台显示可对留言系统配置设置选项,例如是否起用验证码,默认是否显示、是否允许游客留言等配置。

模块配置信息可多站点存储。

可批量管理所有未回复留言后台管理演示效果如下图所示:前台:根据后台模块配置选项,控制是否显示在线留言填写表单。

在线提交留言,根据后台配置选项,是否显示验证码,是否需管理员审核显示。

留言列表页,需根据后台配置每页条数进行分页。

前台演示效果如下图所示:4.2数据库和数据表的设计这里使用Mysql数据库来存储信息。

首先构建一个留言信息表 guestbook ,它有12个字段,即消息编号(gid),站点ID(siteid),标题(title),内容(content),回复内容(reply),回复状态(reply_status),会员ID(uid),会员姓名(username),审核状态(passed) ,留言时间(inputtime),回复人(replyer),回复时间(replytime)。

下面是创建该表的SQL代码:CREATE TABLE `phpcms_guestbook` (`gid` smallint(5) NOT NULL auto_increment,`title` char(80) NOT NULL,`content` text NOT NULL,`reply` text NOT NULL,`userid` mediumint(8) unsigned NOT NULL default '0',`username` char(20) NOT NULL,`gender` tinyint(1) unsigned NOT NULL default '0',`head` tinyint(3) unsigned NOT NULL default '0',`email` char(40) NOT NULL,`qq` char(15) NOT NULL,`homepage` char(25) NOT NULL,`hidden` tinyint(1) unsigned NOT NULL default '0',`passed` tinyint(1) unsigned NOT NULL default '0',`ip` char(15) NOT NULL,`addtime` int(10) unsigned NOT NULL default '0',`replyer` char(20) NOT NULL,`replytime` int(10) unsigned NOT NULL default '0',PRIMARY KEY (`gid`),KEY `hidden` (`hidden`,`gid`));4.3创建模块目录PHPCMS v9框架中的模块,位于phpcms/modules目录中每一个目录称之为一个模块,如果要创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。

当前我们要开发一个叫做guestbook的留言本模块,那么首先在 phpcms/modules 目录下创建文件夹,并将其命名为guestbook。

如下图所示:guestbook 模块的标准结构通常是这样的,如下图所示:其中classes 为模块类库包functions 为模块函数库包templates 为模块模板包这里通常放置含有权限控制的控制器模板,也就是后台模板。

如果您的模块有单独的前台模版,你需要在phpcms/templates/default下创建一个您的模块同名目录来放置前台模板,“default”为你的风格包名称,我们默认适用default。

4.4创建数据模型类文件建好数据表,创建完模块文件夹以后,接下来进行留言本数据模型的创建。

数据库模型位于:phpcms/model/ 目录下。

数据模型文件的命名规则建议为数据表名称+'_model.class.php'如果在我们的创建的模块中我要使用一个数据表“test”,首先需要建立一个数据库模型文件,文件名称为'test_model.class.php',程序结构如下图:<?phpdefined('IN_PHPCMS') or exit('No permission resources.');pc_base::load_sys_class('model', '', 0);class test_model extends model {public function __construct() {$this->db_config = pc_base::load_config('database');$this->db_setting = 'default';$this->table_name = 'test';parent::__construct();}}?>在实例中,只需要把加粗字换成当前数据表名即可。

在本例中guestbook_model.class.php数据模型文件为留言本信息表数据模型,结构如下:<?phpdefined('IN_PHPCMS') or exit('No permission resources.');pc_base::load_sys_class('model', '', 0);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();}}说明:任何自定义模块的数据模型类,均继承于model.class.php 数据模型基类。

在此基类中PHPCMS 系统已经把最常用的数据库操作方法进行了封装。

二次开发者不必关于如何操作数据库,只需要根据需要用到的,已定义操作方法的要求,传递参数即可。

系统会自动对数据进行处理,并返回定义结果。

4.5开发模块控制器和函数在上面的创建模块中我们已经创建好了一个名为“guestbook”的留言本模块,接下来我们继续为这个模块添加两个控制器类。

PHPCMS V9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。

类名也就是文件名+.php,例如一个名为guestbook的控制器,那么他的命名为guestbook.php即可。

控制器类默认继承系统的函数库,可以直接使用。

需要注意的是:控制器类的类名称与控制器文件名必须相同。

本留言本模块有以下二个控制器下面将对二个控制做分别一个详细介绍。

4.5.1前台index.php控制器开发前台控制器主要涉及前台留言显示、在线留言的提交处理等功能函数,以下为全部源代码,接下来我们将对每个功能块,做个详细介绍,代码如下图所示:<?phpdefined('IN_PHPCMS') or exit('No permission resources.');class index {function __construct() {$this->guestbook_db = pc_base::load_model('guestbook_model');$this->_username = param::get_cookie('_username');$this->_userid = param::get_cookie('_userid');//定义站点ID常量,选择模版使用$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : $this->get_siteid();define("SITEID",$siteid);//读取配置,设置分页条数$setting = new_html_special_chars(getcache('guestbook', 'commons'));$this->set = $setting[SITEID];}public function init() {//读取配置,设置分页条数$setting = new_html_special_chars(getcache('guestbook', 'commons'));$set = $setting[SITEID];$pagesize = $setting[SITEID]['pagesize'];$where = array('passed'=>1,'siteid'=>SITEID);$page = isset($_GET['page']) && intval($_GET['page']) ? intval($_GET['page']) : 1;$infos = $this->guestbook_db->listinfo($where, 'gid DESC',$page, $pages = $pagesize);$infos = new_html_special_chars($infos);$pages = $this->guestbook_db->pages;pc_base::load_sys_class('form', '', 0);include template('guestbook', 'index');}/*** 在线留言*/public function ly() {if(isset($_POST['dosubmit'])){if(isset($_POST['code'])){$code = isset($_POST['code']) && trim($_POST['code']) ?trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER);if ($_SESSION['code'] != strtolower($code)) {showmessage(L('code_error'), HTTP_REFERER);}}$set = $this->set;$link_db = pc_base::load_model(guestbook_model);$_POST['ly']['addtime'] = SYS_TIME;$_POST['ly']['userid'] = $this->_userid;$_POST['ly']['username'] = $this->_username;$_POST['ly']['siteid'] = SITEID;$_POST['ly']['passed'] = $set['check_pass'];$link_db->insert($_POST['ly']);showmessage(L('add_success'), "?m=guestbook&c=index&siteid=$siteid");} else {echo $siteid.'adsf';exit;$setting = getcache('guestbook', 'commons');pc_base::load_sys_class('form', '', 0);$SEO = seo(SITEID, '', L('application_links'), '', '');include template('guestbook', 'ly');}}}?>接下来将对本控制程序的每一段代码后对其进行分析和解释。

相关主题