免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1556 | 回复: 0
打印 上一主题 下一主题

3.初级篇:Zend Framework 如何写一个基本功能的留言本? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-01 03:50 |只看该作者 |倒序浏览
      真不好意思,!

因为这周公司发生了一些事情..差点想换个工作环境

..所以呢..没有什么心情去写这个教程..
在周(星期四)因为PHPCHINA的约稿,说要把我的教程放到PHPCHINA电子杂志上去!.还说帮我寄了件(PHPChina T-Shirt)衣服..呵呵..我想自己也没为开源社区做什么..我也答应下来了..就抽个时间来写完第三篇教程..合起来写好这三篇做为第一个阶段给他们...也是自己学习的机会.
好了..现在我们来开始第三篇教程的编写吧!
要是朋友们看过我们的第一篇教程(教程地址:
http://www.oophp.cn/article/article/id/156/
),第二篇教程(教程地址:
http://www.oophp.cn/article/article/id/160/
)的话.相信你们看过我的这
第三篇以后也不会太陌生..只不过是前面二个的小综合.所以请不要怕..呵呵..
一个留言本...具有的基本功能就是.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');
        }
}
最后.

请大家注意一下HTML.JS.IMAGE这三个的文件..源码里面都有..请大家好好的看一下..留言本的效果和我的

OOPHP开源博客(
www.oophp.cn
)上是基本一样的效果.只是没有验证码以及分页功能..后面一篇我会有教程.
总结:到这里就完成了一个留言本的编写.当然很简单的功能..还是那句话.我只是把我会的写给大家..只是一个思想..我也只会这些..所以写的好与不好..请大家自己进行权衡
     如果有问题,大家可以在我的OOPHP开源博客(
www.oophp.cn
)上与我交流

...
    最后老样子


..
源码下载


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16928/showart_1673524.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP