ThinkPHP无限级分类原理实现留言与回复功能实例


Posted in PHP onOctober 31, 2014

本文所述留言板程序使用了无限级分类的原理,可以实现无限级留言与回复。留言列表gclist保留了留言层次空格,使留言--回复层次分明。分享给大家供大家参考。具体分析如下:

功能上,本程序可以实现无限级留言与回复,即对留言回复,对回复的留言回复。当然你也可以作有限制的控制,使其只对留言回复,关键是在模板代码中去掉回复的留言中的“回复该留言”即可。欢迎去拍砖!

程序效果如下图所示:

ThinkPHP无限级分类原理实现留言与回复功能实例

完整源码点击此处本站下载。

数据表:

-- ----------------------------     

-- Table structure for `wb_guestbook`     

-- ----------------------------     

DROP TABLE IF EXISTS `wb_guestbook`;     

CREATE TABLE `eway_guestbook` (     

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,     

  `pid` int(10) NOT NULL,     

  `email` varchar(50) NOT NULL,     

  `path` varchar(100) NOT NULL,     

  `username` varchar(30) NOT NULL,     

  `updatetime` int(10) NOT NULL,     

  `ip` varchar(15) NOT NULL,     

  `url` varchar(200) NOT NULL,     

  `inputtime` int(10) NOT NULL,     

  `content` text NOT NULL,     

  `verify` varchar(32) NOT NULL,     

  `isreply` tinyint(1) NOT NULL,     

  `status` tinyint(1) NOT NULL,     

  PRIMARY KEY (`id`)     

) ENGINE=MyISAM AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;

代码:

<?php     

// +----------------------------------------------------------------------     

// | WBlog     

// +----------------------------------------------------------------------     

// | Copyright (c) 2008  http://www.w3note.com All rights reserved.     

// +----------------------------------------------------------------------     

// | Author: 网菠萝果     

// +----------------------------------------------------------------------     

// $Id$     

/**     

 +------------------------------------------------------------------------------     

 * @class 留言板控制器GuestbookAction.class.php     

 +------------------------------------------------------------------------------     

 */

class GuestbookAction extends CommonAction {     

    public function index(){     

        $garr= D('Guestbook')->gclist("id,username,inputtime,pid,url,content,path,concat(path,'-',id) as bpath");     

                  

        $this->assign('Gklist', $garr['list']);     

        $this->assign('page',$garr['page']);     

        $this->display();     

    }     

// +----------------------------------------------------------------------     

// | 添加留言     

// +----------------------------------------------------------------------     

                  

    public function add(){     

        $this->adddata('Guestbook');     

                          

        }     

// +----------------------------------------------------------------------     

// | 网址跳转。如在表单url添加网址的话,点击会跳转到相关网站     

// +----------------------------------------------------------------------     

          

    public function tourl(){     

      $this->gettourl('Guestbook');     

      }      

}     

?>     

<?php     

// +----------------------------------------------------------------------     

// | WBlog     

// +----------------------------------------------------------------------     

// | Copyright (c) 2008   http://www.w3note.com All rights reserved.     

// | Author: 网菠萝果     

// +----------------------------------------------------------------------     

// $Id$     

/**     

 +------------------------------------------------------------------------------     

 * @function 留言板模型 类GuestbookModel.class.php    

 +------------------------------------------------------------------------------     

 */

          

class GuestbookModel extends RelationModel{     

// +----------------------------------------------------------------------     

// | $_validate表单自动验证     

// +----------------------------------------------------------------------     

          

     protected $_validate  = array(     

                array('email','require','请填写您的邮箱!'),     

                array('email','email','邮箱格式错误!'),      

                          

               );     

// +----------------------------------------------------------------------     

// | $_auto表单自动填充     

// +----------------------------------------------------------------------     

                   

        protected $_auto=array(     

                 array('status','1'),       

                 array('inputtime','time',1,'function'),     

                 array('content','content',1,'callback'),     

                 array('url','geturl',1,'callback'),                     

                 array ('inputtime','time',1,'function'),     

                 array('path','path',3,'callback'),      

                 array('username','getusername',3,'callback'),                          

                   );        

// +----------------------------------------------------------------------     

// | getusername()过滤用户名     

// +----------------------------------------------------------------------             

      public function getusername(){     

          if (isset ($_POST['username'])) {     

            if(trim($_POST['username'])=='网菠萝果'){     

                return $data= ' ̄□ ̄';         

            }elseif(strlen($_POST['username']) >10){                  

                return $data= msubstr($_POST['username'],0,5);     

            }else{     

                return $data= $_POST['username'];     

            }     

        }        

        }      

// +----------------------------------------------------------------------     

// | path()返回子类的path,父类的path的值为0     

// +----------------------------------------------------------------------       

     public function path(){     

           $pid=isset($_POST['pid'])?(int)$_POST['pid']:0;     

           $id=$_POST['id'];     

            if($pid==0){                     

                return 0;     

            }     

                      

            $fat=$this->where(array('id' => $pid))->find();     

            $data=$fat['path'].'-'.$fat['id'];               

            return $data;     

        }     

// +----------------------------------------------------------------------     

// | content()过滤留言内容     

// +----------------------------------------------------------------------             

    public function content() {     

        if (isset ($_POST['content']) && !empty ($_POST['content'])) {     

             $data =deleteHtmlTags($_POST['content']);     

             $data =safeHtml($data);     

            if (strlen($data) > 1000) {     

                $data = msubstr($data, 0, 500);     

            }     

            return $data;     

          }     

           }     

 // +----------------------------------------------------------------------     

// | content()过滤URL     

// +----------------------------------------------------------------------                 

    public function geturl(){     

        if (isset ($_POST['url'])) {     

        $data = deleteHtmlTags($_POST['url']);     

        $data = safeHtml($data);     

            return $data=$data?$data:"";     

        }     

    }        

// +----------------------------------------------------------------------     

// |gclist($field,$where='',$pagesize=30)留言列表     

// +----------------------------------------------------------------------     

// |$field,字段     

// +----------------------------------------------------------------------     

// |$where查询条件,默认为空     

// +----------------------------------------------------------------------     

// |$pagesize分页记录,默认为30      

// +----------------------------------------------------------------------     

// |使用方法,看上面的控制器调用     

// +----------------------------------------------------------------------     

          

     public function gclist($field,$where='',$pagesize=30) {     

        import("ORG.Util.Page");     

         $count = $this->field('id')->where($where)->count();     

         $P = new Page($count, $pagesize);     

                   

        $list=$this->field($field)->where($where)->order('bpath,id')->limit($P->firstRow . ',' . $P->listRows)->select();     

          

        foreach ($list as $k => $v) {     

            $list[$k]['count'] = count(explode('-', $v['bpath']));     

            $list[$k]['tousername']=$this->where(array('id'=> $v['pid']))->getField('username');     

            $str = '';     

            if ($v['pid'] <> 0) {     

                for ($i = 0; $i < $list[$k]['count'] * 2; $i++) {     

                    $str .= ' ';     

                }     

                $str .= ' ';     

            }     

            $list[$k]['space'] = $str;     

        }     

        $P->setConfig('header', '篇');     

        $P->setConfig('prev', "«");     

        $P->setConfig('next', '»');     

        $P->setConfig('first', '|«');     

        $P->setConfig('last', '»|');     

        $page = $P->show();     

        $arr=array('page'=>$page,'list'=>$list);     

        return $arr;     

    }     

}     

?>

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

PHP 相关文章推荐
php的正则处理函数总结分析
Jun 20 PHP
基于php验证码函数的使用示例
May 03 PHP
php查找字符串出现次数的方法
Dec 01 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
php curl模拟post请求和提交多维数组的示例代码
Nov 19 PHP
基于PHP实现短信验证码接口(容联运通讯)
Sep 06 PHP
Yii2汉字转拼音类的实例代码
Apr 18 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
php实现登录页面的简单实例
Sep 29 PHP
Laravel登录失败次数限制的实现方法
Aug 26 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 PHP
ThinkPHP控制器间实现相互调用的方法
Oct 31 #PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 #PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 #PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 #PHP
php使用fopen创建utf8编码文件的方法
Oct 31 #PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 #PHP
PHP页面实现定时跳转的方法
Oct 31 #PHP
You might like
smtp邮件发送一例
2006/10/09 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
PHP mail()函数使用及配置方法
2014/01/14 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
python爬取网页转换为PDF文件
2018/06/07 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
在python中pandas的series合并方法
2018/11/12 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
mysql有关权限的表都有哪几个
2015/04/22 面试题
关于中国梦的演讲稿
2014/04/23 职场文书
初中班主任评语
2014/04/24 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
计划生育目标责任书
2015/05/09 职场文书
今日说法观后感
2015/06/08 职场文书
Redis集群的关闭与重启操作
2021/07/07 Redis