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入门学习笔记之一
Oct 12 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
详解Yii2 rules 的验证规则
Dec 02 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php + ajax 实现的写入数据库操作简单示例
May 16 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 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中的cookie
2006/11/26 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
js实现轮播图特效
2020/05/28 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
卫校中专生个人自我评价
2013/09/19 职场文书
计算机应用专业毕业生求职信
2013/10/24 职场文书
刑事上诉状范文
2015/05/22 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
实例详解Python的进程,线程和协程
2022/03/13 Python
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers