Zend Framework实现具有基本功能的留言本(附demo源码下载)


Posted in PHP onMarch 22, 2016

本文实例讲述了Zend Framework实现具有基本功能的留言本。分享给大家供大家参考,具体如下:

一个留言本...具有的基本功能就是.1.发表留言. 2.回复留言.3.管理留言(修改,删除等操作).

我这里只是写了基本的操作,比如加留言验证码.页面的美化什么的我都
没有做.我只是给大家一个思想..很多东西要靠我们自己去学了.

另一个就是我的留言用了AJAX.就是你一发表.数据就会在页面显示..不过大家要了解Jquery的AJAX的用法..我相信大部分人都会这个JS类库吧.

要是不懂也没关系..你们可以改成不是AJAX的..只要把发表留言的FROM的提交动作转换成我们控制里的一个动作..相信这个不是问题.好了..开始工作:

我们的目录结构和以前一样,大致不变..下面要有改动的..大家也不要急..我会教大家如何做:

第一:先建立好我们的模板页面(View)..

按照上篇教程的目录.application/views/scripts目录下有一些模板页.如(index.phtml,edit.phtml).我们删除它们..现在加一个message文件夹.

在message里加上(edit.phtml,index.phtml,message.phtml)三个模板文件.完成后.我们在application/views/scripts/目录下加上(header.phtml,footer.phtml)二个模板文件.

因为这二个文件以后会重用来..所以把他们直接放到application/views/scripts/下..好了模板建立好了.现在就是加入一个HTML.JS.IMAGE了.我把他们这些都放在网站根目录public文件夹下.大家可以对应我的源码来看一下..要是有点乱..请大家根据源码来看这教程..(^_^不好意思,我只能这样表达.我也不知道如何写才能让你们更了解.请大家体谅啊!)

第二:接下来,我们写我们的数据层程序(Model).

1.我们在原来的表中加上下面几个字段:pid(标志是否是回复,0为留言.为为0的是为回复) ,author(留言者),headimg(留言者头像),email(留言者电子邮件), ip(留言者IP地址),
show(留言是否显示.这个要在生台管理能用.这教程这里没有用到.), addtime(留言时间), updatetime(留言修改时间).字段类型的设置请大家看源码SQL文件.

2.我们在application/models/目录下有一个Message.php.我们先写好我们留言本的Model .主要是对留言本数据层的操作.我增加了下面几个方法:
getAllMessage(取到所有的留言) , getAllReMessage(取到所有的回复留言数据) , getMessageByID(根据ID取留言数据), updateMessageByID(修改留言), delMessageByID(删除留言)

具体程序如下(程序上面也有注解):

class Message extends Zend_Db_Table
{
 protected $_name ="message";
 protected $_primary = 'id';
 /* * 取到所有的留言 */
 public function getAllMessage(){
 $messageArray=$this->fetchAll("message.pid=0",
      "message.id DESC")->toArray();
 return $messageArray;
 }
 /* * 取到所有的回复留言数据 */
 public function getAllReMessage(){
 $ReArray=$this->fetchAll("message.pid!=0",
      "message.id DESC")->toArray();
 return $ReArray;
 }
 /* * 根据ID取留言数据 */
 public function getMessageByID($id){
 $messageone=$this->fetchAll('id='.$id)->toArray();
 return $messageone;
 }
 /* * 修改留言 */
 public function updateMessageByID($array,$id){
 $db = $this->getAdapter();
 $where=$db->quoteInto('id = ?', $id);
 $this->update($array, $where);
 }
 /* * 删除留言 */
 public function delMessageByID($id){
 $where = 'id = ' . $id;
   $this->delete($where);
   return true;
 }
}

第三:完成上面二项.最后就我们的控制层了(Controller).打开application/controllers/IndexController.php这个控制器..把原来的不要的东西给删除了.我在上面加上了下面

一个message方法(也叫动作Action).不过其它的Action都有改动..请大家参与源码来进行分析.这里我只贴也我新加入的messageAction这个方法(代码上都有注解.请自行查看.谢谢):

public function messageAction()
{
 if($this->_request->isPost()){
 Zend_Loader::loadClass('Zend_Filter_StripTags');
 $filter=new Zend_Filter_StripTags();
 $username=$filter->filter($this->_request->getPost('username'));
 $email=$filter->filter($this->_request->getPost('email'));
 $content=$filter->filter($this->_request->getPost('content'));
 $title=$filter->filter($this->_request->getPost('title'));
 $messageid=$filter->filter($this->_request->getPost('messageid'));
 $headimg=$filter->filter($this->_request->getPost('headimg'));
 $message=new Message();
 $db=$message->getAdapter();
 if($username!=''&&$email!=''&&$messageid!=''&&$content!=''){
 require_once 'Zend/Validate/EmailAddress.php';
 $validator = new Zend_Validate_EmailAddress();
 if ($validator->isValid($email)) {
 //取IP地址..这里只是简单取IP
 $IP=$_SERVER ["REMOTE_ADDR"];
 $data=array(
 'title'=>$title,
 'author'=>$username,
  'pid'=>$messageid,
 'headimg'=>$headimg,
 'email'=>$email,
 'show'=>'1',
 'content'=>$content,
  'ip'=>$IP,
 'addtime'=>time(),
 'updatetime'=>time()
 );
 $message->insert($data);
 $db->lastInsertId();
 unset($data);
  //取到所有留言getAllMessage,getAllReMessage
  //二个方法在Model(Message.php)里定义的
  $this->view->messages=$message->getAllMessage();
 //取到所有回复数据
 $this->view->arrReviews=$message->getAllReMessage();
 $this->view->flag='0';
 $this->view->message='您的留言发表成功!';
 echo $this->view->render('message/message.phtml');
 } else {
 $this->view->flag='5';
 $this->view->message='对不起!您填写有电子邮箱地址有误!';
 echo $this->view->render('message/message.phtml');
 }
  }elseif($username==''){
  $this->view->flag='1';
 $this->view->message='对不起!您的大名不能为空!';
  echo $this->view->render('message/message.phtml');
 }elseif($messageid==''){
  $this->view->flag='2';
 $this->view->message='对不起!回复留言编号不能为空!';
  echo $this->view->render('message/message.phtml');
 }elseif($content==''){
  $this->view->flag='3';
 $this->view->message='对不起!您填写的留言内容不能为空!';
  echo $this->view->render('message/message.phtml');
  }
  }else{
  echo $this->view->render('message/index.phtml');
  }
}

只是没有验证码以及分页功能..后面一篇会有教程进一步讲解.

总结:到这里就完成了一个留言本的编写.当然很简单的功能..还是那句话.我只是把我会的写给大家..只是一个思想..我也只会这些..所以写的好与不好..请大家自己进行权衡

完整实例代码点击此处本站下载。

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP 相关文章推荐
打造计数器DIY三步曲(中)
Oct 09 PHP
header()函数使用说明
Nov 23 PHP
如何在PHP程序中防止盗链
Apr 09 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
php实现点击可刷新验证码
Nov 07 PHP
分享PHP守护进程类
Dec 30 PHP
CI配置多数据库访问的方法
Mar 28 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
php post换行的方法
Feb 03 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 #PHP
Zend Framework分页类用法详解
Mar 22 #PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 #PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 #PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 #PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
Mar 21 #PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 #PHP
You might like
对盗链说再见...
2006/10/09 PHP
PHP 模板高级篇总结
2006/12/21 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
python3实现短网址和数字相互转换的方法
2015/04/28 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
施工资料员的岗位职责
2013/12/22 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
计划生育个人总结
2015/03/02 职场文书
西游降魔篇观后感
2015/06/15 职场文书
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA