admin 管理员组文章数量: 887021
2024年1月24日发(作者:c语言数字对应ascii码)
下面我们将通讲解一个留言本实例,来帮助你更好的掌握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/ 目录下。
数据模型文件的命名规则建议为数据表名称+'_'
如果在我们的创建的模块中我要使用一个数据表“test”,首先需要建立一个数据库模型文件,文件名称为'test_',程序结构如下图:
defined('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_数据模型文件为留言本信息表数据模型,结构如下:
defined('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();
}
说明:任何自定义模块的数据模型类,均继承于 数据模型基类。在此基类中PHPCMS 系统已经把最常用的数据库操作方法进行了封装。 二次开发者不必关于如何操作数据库,只需要根据需要用到的,已定义操作方法的要求,传递参数即可。系统会自动对数据进行处理,并返回定义结果。
4.5开发模块控制器和函数
在上面的创建模块中我们已经创建好了一个名为“guestbook”的留言本模块,接下来我们继续为这个模块添加两个控制器类。
PHPCMS V9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。类名也就是文件名+.php,例如一个名为guestbook的控制器,那么他的命名为即可。控制器类默认继承系统的函数库,可以直接使用。需要注意的是:控制器类的类名称与控制器文件名必须相同。
本留言本模块有以下二个控制器
控制器名称
默认调用控制函数
init()
init()
说明
前台页面控制器
后台管理控制器
下面将对二个控制做分别一个详细介绍。
4.5.1前台控制器开发
前台控制器主要涉及前台留言显示、在线留言的提交处理等功能函数,以下为全部源代码,接下来我们将对每个功能块,做个详细介绍,代码如下图所示:
defined('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');
}
}
}
>
接下来将对本控制程序的每一段代码后对其进行分析和解释。
defined('IN_PHPCMS') or exit('No permission resources.');
这段程序的作用是用来判断本段程序是否处于PHPCMS的运行范围内,如果不是,则页面提示No permission resources并终止,这在一定程度上避免了脚本包含调用错误引起的被入侵。其他文件中的相同代码段作用与此相同。
class index {
…… …..
}
接下来就是对控制器类的定义了,在前面也讲过控制器中类的定义,类名必须要
和本控制器名称相同,本控制器为,所以控制器类名也为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];
}
上面这段代码是本类的构造函数的定义。在此函数中$this->guestbook_db
= pc_base::load_model('guestbook_model'); 为加载留言本的数据模型。
$this->_username = param::get_cookie('_username');
$this->_userid = param::get_cookie('_userid');
这段代码为取得当前登录会员的会员名(username)和会员ID(userid),以便在下面留言提交处理程序中使用。用于记录存储留言者的信息。
//定义站点ID常量,选择模版使用
$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : $this->get_siteid();
define("SITEID",$siteid);
这段代码判断是否有站点ID(siteid)传递,如果存在则获取并转化为整型,没有获取到站点ID,则利用全局函数get_siteid();函数来获取siteid值。此函数定义于 文件中。最后把siteid值定义为一个常量,以便
接下来的程序使用。
//
读取配置,设置分页条数
$setting = new_html_special_chars(getcache('guestbook', 'commons'));
$this->set = $setting[SITEID];
接下来上面这段代码,通过getcache(‘guestbook’,’commons’)函数来读取留言本配置的缓存文件。因为此配置文件分多站点存储配置信息,以站点ID为下标存储的二维数组,所以利用当前站点的siteid,来获取当前站点的配置信息并赋值一个全局变量。在下面的函数中就可以直接调用当前站点留言本的配置信息。
public function init() {
//读取配置,设置分页条数
$pagesize = $this->set[‘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');
}
上面这段代码,是index控制器默认执行的功能函数.前面已经有过介绍,如果用户访问时没有指定事件名字,也就是URL参数中a的值,那么默认a将调用init()功能函数。
此段代码的功能为获取留言数据,并根据配置选项进行显示。
在此段代码中,首先从获取的当前配置文件中,设置前台分页的条数。
$pagesize = $this->set[‘pagesize’];
$this->set为__construct()构造函数中,已经定义获取的当前站点配置数组。如果你不太清楚此配置数组都有那些字段和值,可以打印出来查看一下。
接着定义了一个查询条件语句,并取得当前页数。
$where = array('passed'=>1,'siteid'=>SITEID);
$page = isset($_GET['page']) && intval($_GET['page']) ? intval($_GET['page']) : 1;
$where 条件语句以数组方式进行定义,PHPCMS V9会自动对其进行转化。当然也可以定义为普通条件语句。例如$where =’ siteid =1 ’。$where 条件为数组的格式如下:
$where = array('条件字段1'=>值,'条件字段2'=>值);
需要注意的是数组条件语句定义,只适用于字段定值查询。并不适用于字段区间范围值查询,如果where语句需要对查询字段值进行区间查询,则只能普通where 查询语句定义。看如下例子:
$where =" `message_time` >= '$start' AND `message_time` <= '$end' ";
获取当前页数就比较简单了,如果获取到当前页数,并且是常量。则直接获取,反之默认赋值为1。
$infos = $this->guestbook_db->listinfo($where,$order = 'gid DESC',$page, $pages =
$pagesize);
$infos = new_html_special_chars($infos);
上面这段代码,$this->guestbook_db为guestbook数据模型类的实例,guestbook数据模型类继承于model 数据模型基类,listinfo()为model 数据模型基类定义的公有方法,故继承的子类guestbook可直接调用此函数。 此函数的功能为查询多条数据并分页,详细的程序定义、参数传递请查阅model类中此函数的定义。
接着对返回的数据利用new_html_special_chars()函数,进行一下转换处理。
$pages = $this->guestbook_db->pages;
pc_base::load_sys_class('form', '', 0);
include template('guestbook', 'index');
此段代码加载系统form类,以便于在前台模块文件中生成验证码输入法时使用。最后include模块文件进行数据显示。
以上这一段章节,介绍了前台显示事件init()函数的定义。 里面介绍了如何定义where 查询语句、获取配置信息、以及如何调用数据模型基类函数listinfo()进行数据读取。中间涉及的一些相关函数的详细定义,以及参数的设置,请读者根据提示,进行查询相关类中的定义。
接下来这段代码是关于提交留言的处理事件函数:ly()的定义,其中涉及验证码的判断,提交数据如何存入数据库,下面将做个详细介绍:
首先先看一下完整代码,代码如下:
public function ly() {
if(isset($_POST['dosubmit'])){
if(isset($_POST['code'])){
$session_storage = 'session_'.pc_base::load_config('system','session_storage');
pc_base::load_sys_class($session_storage);
if(!isset($_SESSION)) {
session_start();
}
$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;
$_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'];
$this->guestbook_db->insert($_POST['ly']);
showmessage(L('add_success'), "?m=guestbook&c=index&siteid= ".SITEID);
} else {
echo ‘请通过正常的方式提交留言,谢谢’;
}
}
代码最开始,首先isset($_POST['dosubmit'])判断是否是提交,如果没有提交,而直接调用此事件,则返回” 请通过正常的方式提交留言,谢谢”的提
示语句。
接下来 isset($_POST[‘code’]),判断提交过来的变量是否存在code这个字段。如果存在,则说明前台起用了验证码,那么接下来就需要进行验证码的判断了,如果没有这个字段,则跳过此段,直接继续向下执行,不在对验证码进行判断处理。
下面介绍此段代码,代码如下:
if(isset($_POST['code'])){
$session_storage = 'session_'.pc_base::load_config('system','session_storage');
pc_base::load_sys_class($session_storage);
if(!isset($_SESSION)) {
session_start();
}
$code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) :
if ($_SESSION['code'] != strtolower($code)) {
showmessage(L('code_error'), HTTP_REFERER);
}
showmessage(L('input_code'), HTTP_REFERER);
}
因为V9验证码的数值是通过SESSION传递,故在这段代码中,首先加载配置文件,取出当前系统配置中SESSION的存储方式。然后根据SESSION的存储方式,来加载对应的系统类库。接下来判断如果SESSION不存在,则触发session_start()。
接下就是获取提交过来的验证码值,并与session中的验证码的值相对比,如果提交的验证码不存在,或者为空,则提示“请输入验证码”。如果验证码存在,但并不等于session里面code的值,“则提示验证码不正确!”。
$set = $this->set;
$_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'];
$this->guestbook_db->insert($_POST['ly']);
接下来上面这段代码为提交过来的数组添加一些新的元素,并赋值,SYS_TIME为当前系统时间,$this->_userid为当前登录用户的账号,$this->_username为用户名,SITEID常量为当前站点的ID,可能大家会想为什么要存储这个值呢,这是因为V9是一个支持站群的系统,一个模块可以应用到多个站点。所以提交过来的信息为了区分开来,那么就要存储一个siteid来记录。$set['check_pass']为当站点配置中是否审核的配置,在后台管理中,可以在where语句中通过对这个字段的定义来查询数据库,显示是否通过审核。
$this->guestbook_db->insert($_POST['ly']);
最后调用model数据模型基类中的insert()函数,把提交表单的数据存入数据库。此时$_POST[‘ly’]为数组,元素为字段名,键词为字段值。Insert()函数会自动进行处理,把对应数值存入guestbook对应数据表里,关于Insert()函数的定义,请查看文件的详细定义。
前台显示模版和前台控制器的定义是紧密相连的,介绍完前台控制器index的定义,接下我们介绍一下前台模块的情况,首先看一下,init()事件中调用的index模版,此前台模版的关键代码,代码如下:
{if $set['guestbook_status']}
我要留言
{/if}
上面这段代码,首先根据控制器里获取的当前站点配置信息是否开启留言设置,也就是$set['guestbook_status']的值 ,来判断是否显示提交表单。关于验证码了是如此处理,如果配置数组中$set['enablecheckcode']==1则显示验证码输入框,反之不显示验证这一项,这也就是后台配置,对前台显示的控制的一种表现。接下来这段代码就是对从数据库查询出来的留言数据进行显示,
if(is_array($infos)){
foreach($infos as $info){
>
{$info['title']}
{$info['content']}
{if $info['reply']}回复内容:
{$info['reply']}{/if}
}}
>
此代码中首先判断index控制器中,init()事件获取的$infos 变量是否为数组,如果是数组,则进行foreach()循环显示。$infos为根据查询条件而返回的留言信息。
小结:
本章节详细介绍了留言本前台控制器index的定义,其中涉及了V9的数据的存储与调用。条件查询语句的定义,缓存文件的读取,以及验证码的使用。读者可参考源码,根据需求添加更多的功能,例如增加留言提交时间间隔功能等功能,加深对PHPCMS V9控制器开发的理解。
4.5.2后台控制器开发
后台管理控制器含权限控制,只有特定管理员才有权限访问,所以这个控制器需要加载admin 模块下的admin类,并继承该类。 需要注意的是,因为添加的控制器继承了 admin 类,所以添加的控制器的方法名不能和父类具有相同方法名。否则会造成影响,具体请看admin 类中有哪些方法。
以下为该后台管理控制器 的相关定义:
首先,检查系统常量是否存,看是否是经过正规渠道,进入系统。如果系统常量不存在,则返回错误,存在则继续。
defined('IN_PHPCMS') or exit('No permission resources.');
接下来,实例化模块类 admin 类。
pc_base::
load_app_class('admin','admin',0);
创建控制器类 guestbook ,类名必须与文件名相同(这点在前面就已有介绍)继承于 admin 类 。
构造函数继承于admin 类构造函数,并加入guestbook 模块数据模型(在控制器类的函数会用到)。
class guestbook extends admin {
function __construct() {
parent::__construct();//继承父类构造函数
$this->M = new_html_special_chars(getcache('guestbook',
'commons'));//读取留言本配置缓存文件
$this->guestbook_db =
pc_base::load_model('guestbook_model');
}
在构造函数里,做了以下几个操作:
首先继承父级构造函数。
parent::__construct();
读取guestbook模块配置缓存,后面修改配置时会用到读取的数据。
$this
->M= new_html_special_chars(getcache('guestbook', 'commons'));
加载留言本数据模型。
$this
->guestbook_db = pc_base::load_model('guestbook_model');
至此已经完成对guestbook 控制器的最基本定义,接下来就可以在这个控制器类里根据需要进行模块函数的定义开发。
1. 默认执行函数 init () :
在前面的章节,我们介绍过当访问模块控制器,未指定控制器模块函数名,则默认执行init() 函数。
例如:
/?m=guestbook&c=guestbook
/?m=guestbook&c=guestbook&a=init
上面二个URL的访问效果是一样的。
Init () 模块函数功能要求:
默认读取所有留言信息,并结合指定的后台模版界面显示出来。如传递参数
reply = no 则只显示未回复留言。
界面如下:
Init () 函数定义:
public function init() {
if($_GET['reply']=='no'){//显示未回复
$where = array('reply'=>'','siteid'=>$this->get_siteid());
}else{//默认显示全部
$where = array('siteid'=>$this->get_siteid());
}
$page = isset($_GET['page']) && intval($_GET['page']) ? intval($_GET['page']) : 1;
$infos = $this->guestbook_db->listinfo($where,$order = 'gid DESC',$page,
$pages = '10');
$pages = $this->guestbook_db->pages;
include $this->admin_tpl('guestbook_list');
下面对这段代码,做个详细介绍:
$where = array('siteid'=>$this->get_siteid());
查询当前站点下所的留言(V9支持站群系统,可能存在多站点留言系统) //
上面代码是对查询条件的定义,在PHPCMS V9中查询条件可以数组的方式定义。亦可直接写成SQL语句。需要注意的一点是,数组方式只适用于 支持字段名等于字段值的方式。不支持字段值区间查询,如果需要区间查询时,可利用自定义SQL语句完成。
自定义SQL where 语句例子:
$where = "AND `message_time` >= '$start' AND `message_time` <= '$end' ";
接下来,传递查询条件,调用listinfo()函数,并获取返回数据。
$infos=$this->guestbook_db->listinfo($where,$order='gid ESC',$page, $pages = '10');
$this->guestbook_db 为控制器构造函数时加载的guestbook 数据模型。
listinfo() 函数为V9系统在加载 guestbook 数据模型时,继承于model
的函数。具体参数配置请查看 phpcms/libs/classes/ 里面相关函数。
$pages = $this->guestbook_db->pages;
include $this->admin_tpl('guestbook_list');
include $this->admin_tpl(‘guestbook_list’); // 加载后台管理模版
guestbook_。 此文件位于phpcms/modules/模块/templates/ 由此即可明白,其它后台管理模版亦位于此目录,前面章节有相关介绍。
后台模版 guestbook_
在上面刚刚做过介绍,在init()函数定义的最后,加载后台模版来进行查询数据的显示。变量$infos 为查询返回的二维数据数组,数组的详细内容,可通过print_r($infos);打印查看。
下面就看一下guestbook_ 模版文件是如何定义的:
defined('IN_ADMIN') or exit('No permission resources.');
$show_dialog = 1;
>
include $this->admin_tpl('header', 'admin');
首先,进行正常登录后台的验证,如非法包含,未定义后台常量,将返回错误提示。接下来包含公共后台头部文件。
下面一段代码,对返回的二维数组进行显示:
if(is_array($infos)){
foreach($infos as $info){
>
align="center" width="35">$info['gid']?>">
未回复';}else{echo '已回复
首先判断$infos是否是数组,为真了,则进行 foreach()循环显示。在相
';}?>
|
onClick="return confirm('
array('message' => new_addslashes($info['title'])))?>')">
应位置显示变量,如标题、留言时间等,具体请看代码。
这里输出系统分页。分页函数定义于系统全局函数 中。
模版的其它代码,诸如form表单定义、jquery插件使用,请读者自行查看,在此不在做介绍。
小结
本小节简单介绍了PHPCMS V9模块控制器默认操作函数init()的定义,其中涉及数据查询语句的定义、数据模型函数listinfo()的使用和介绍。初学者
可以详细查看一下对应文件内容定义,以便后期方便使用。
2. 留言回复 reply() 定义
根据传入的gid 值显示相应留言信息,并可填写回复内容提交。效果如下图:
依功能要求,reply() 函数定义如下:
public function reply() {
if(isset($_POST['dosubmit'])){
$gid = intval($_GET['gid']);
if($gid < 1) return false;
$_POST['reply']['replytime'] = SYS_TIME;
$_POST['reply']['reply_status'] = '1';
'edit');
$this->guestbook_db->update($_POST['reply'],array('gid'=>$gid));
showmessage(L('operation_success'),'?m=guestbook&c=guestbook&a=init','',
} else {
}
$gid = intval($_GET['gid']);
if($gid < 1) return false;
$show_validator = $show_scroll = $show_header = true;
$info = $this->guestbook_db->get_one(array('gid'=>$_GET['gid']));
if(!$info) showmessage(L(guestbook_exit'));
extract($info);
include $this->admin_tpl('guestbook_reply');
程序分提交回复和未提交二种情况。
未提交回复:
$gid = intval($_GET['gid']);
if($gid < 1) return false;
GET方法获取列表页传递过来的gid,并进行验证处理。
$info = $this->guestbook_db->get_one(array('gid'=>$_GET['gid']));
if(!$info) showmessage(L(guestbook_exit'));
利用数据模型类get_one()函数,查询当前gid留言。赋值给$info变量。如果没有查到,则返回留言信息不存在提示。Showmessage() 为系统全局函数,可直接调用。
extract($info);
include $this->admin_tpl('guestbook_reply');
最后将返回数组利用函数extract() 解开, 并加载后台模版guestbook_,进行数据显示。
提交回复:
首先还是要判断传递的变量合法性,就不再叙述。
$_POST['reply']['replytime'] = SYS_TIME;
$_POST['reply']['reply_status'] = '1';
$this->guestbook_db->update($_POST['reply'],array('gid'=>$gid));
$_POST['reply']['replytime'] = SYS_TIME; 为提交过来的变量增加一键名replytime,并赋值。SYS_TIME为系统常量,定义于phpcms/文件。
$this->guestbook_db->update($_POST['reply'],array('gid'=>$gid));
更新当前留言数据。$_POST[‘reply’]为
要更新的数据内容,参数可以为数组也可以为字符串,建议数组。为数组时数组key为字段值,数组值为数据取值。update() 更详细的定义请看下图:
/**
* 执行更新记录操作
* @param $data 要更新的数据内容,参数可以为数组也可以为字符串,建议数组。
*
*
*
为数组时数组key为字段值,数组值为数据取值
为字符串时[例:`name`='phpcms',`hits`=`hits`+1]。
为数组时[例: array('name'=>'phpcms','password'=>'123456')]
*
数组的另一种使用array('name'=>'+=1', 'base'=>'-=1');程序会自动解析为`name` = `name` + 1, `base` = `base` - 1
* @param $where
* @return boolean
更新数据时的条件,可为数组或字符串
*/
final public function update($data, $where = '') {
if (is_array($where)) $where = $this->sqls($where);
return $this->db->update($data, $this->table_name, $where);
}
此函数定义于 phpcms/libs/classes/ 文件。
回复模版 guestbook_
在reply() 函数里,已经将返回的$info数组中的每个元素,键名用于变量名,键值用于变量值进行了处理,所以在模版文件里,可直接使用相关变量。
echo $gid; ?>"
发表评论