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 excel类 phpExcel使用方法介绍
Aug 21 PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
浅析php学习的路线图
Jul 10 PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 PHP
php上传文件,创建递归目录的实例代码
Oct 18 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
常用PHP框架功能对照表
Oct 23 PHP
PHP实现对数组分页处理实例详解
Feb 07 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
解决laravel(5.5)访问public报错的问题
Oct 12 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
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
python实现定时发送qq消息
2019/01/18 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
利用Python实现kNN算法的代码
2019/08/16 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
财会自我鉴定范文
2013/12/27 职场文书
小学生安全演讲稿
2014/04/25 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
春秋淹城导游词
2015/02/11 职场文书
公司费用报销管理制度
2015/08/04 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书