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之Smarty入门
Jan 04 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
PHP源代码数组统计count分析
Aug 02 PHP
php 邮件发送问题解决
Mar 22 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
php生成shtml类用法实例
Dec 09 PHP
Smarty使用自定义资源的方法
Aug 08 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
常用PHP数组排序函数归纳
Aug 08 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
PHP convert_uudecode()函数讲解
Feb 14 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
javascript实现的listview效果
2007/04/28 Javascript
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
深入探究Django中的Session与Cookie
2017/07/30 Python
Python 错误和异常代码详解
2018/01/29 Python
详解Python做一个名片管理系统
2019/03/14 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
python代码实现猜拳小游戏
2020/11/30 Python
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
学校元旦晚会方案
2014/02/19 职场文书
《荷花》教学反思
2014/04/16 职场文书
餐饮投资计划书
2014/04/25 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
二婚主持词
2015/06/30 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Pygame Time时间控制的具体使用详解
2021/11/17 Python