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跨域cookie共享使用方法
Feb 20 PHP
使用PHP Socket 编程模拟Http post和get请求
Nov 25 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
smarty的section嵌套循环用法示例
May 28 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
PHP实现字母数字混合验证码功能
Jul 11 PHP
PHP unset函数原理及使用方法解析
Aug 14 PHP
微信小程序和php的登录实现
Apr 01 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 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
python类定义的讲解
2013/11/01 Python
python小技巧之批量抓取美女图片
2014/06/06 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
社区中秋节活动方案
2014/01/29 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
毕业设计工作总结
2015/08/14 职场文书
学习委员竞选稿
2015/11/20 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server