メッセージと返信関数を実装するための ThinkPHP 無限分類原理の例、thinkphp の例
この記事で説明する掲示板プログラムは、無制限の分類の原理を使用しており、無制限のメッセージと返信を実現できます。メッセージ リスト gclist は、メッセージと応答を明確に階層化するためにメッセージ階層スペースを保持します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
機能的には、このプログラムは無制限のレベルのメッセージと返信、つまりメッセージに返信したり、メッセージに返信したりすることを実現できます。もちろん、メッセージにのみ返信できるように制限することもできます。ポイントは、テンプレート コードの返信メッセージにある「このメッセージに返信する」を削除することです。パイヂュアンへようこそ!
プログラムの効果は下の図に示すとおりです:
ここをクリックして完全なソースコードをダウンロードしてください。
データシート:
コードをコピーします コードは次のとおりです:
--------------------------------- -
-- `wb_guestbook` のテーブル構造
---------------------------------
`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、
`ユーザー名` 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` テキストが NULL ではありません、
`verify` varchar(32) NOT NULL、
`isreply` tinyint(1) NOT NULL、
`ステータス` tinyint(1) NOT NULL、
主キー (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;
コード:
コードをコピーします コードは次のとおりです:
// +---------------------------------------------- -----------------------
// | Wブログ
// +---------------------------------------------- -----------------------
// |著作権 (c) 2008 http://www.w3note.com 無断複写・転載を禁じます。
// +---------------------------------------------- -----------------------
// |著者: 网菠萝果
// +---------------------------------------------- -----------------------
// $Id$
/**
+------------------------------------------------ --------------------------------
* @class メッセージ ボード コントローラー GuestbookAction.class.php
+------------------------------------------------ --------------------------------
*/
class GuestbookAction extends CommonAction {
パブリック関数インデックス(){
$garr= D('ゲストブック')->gclist("id,username,inputtime,pid,url,content,path,concat(path,'-',id) as bpath");
$this->assign('Gklist', $garr['list']);
$this->assign('ページ',$garr['ページ']);
$this->display();
}
// +---------------------------------------------- -----------------------
// | 追加留言
// +---------------------------------------------- -----------------------
パブリック関数 add(){
$this->adddata('ゲストブック');
}
// +---------------------------------------------- -----------------------
// | 表の URL にネットワーク サイトを追加すると、ポイントは関連するネットワーク ステーションにジャンプする可能性があります
// +---------------------------------------------- -----------------------
パブリック関数 tourl(){
$this->gettourl('ゲストブック');
}
}
?>
// +---------------------------------------------- -----------------------
// | Wブログ
// +---------------------------------------------- -----------------------
// | Copyright (c) 2008 http://www.w3note.com 無断複写・転載を禁じます。
// |著者: 网菠萝果
// +---------------------------------------------- -----------------------
// $Id$
/**
+------------------------------------------------ --------------------------------
* @function メッセージ ボード モデル クラス GuestbookModel.class.php
+------------------------------------------------ --------------------------------
*/
クラス GuestbookModel は RelationModel を拡張します{
// +---------------------------------------------- -----------------------
// | $_validate表单自動验证
// +---------------------------------------------- -----------------------
protected $_validate = array(
array ('email','require', 'メールアドレスを入力してください!'),
array('email','email','メールの形式が間違っています!'),
);
// +---------------------------------------------- --- ----------------------------------
// | $_auto フォームの自動入力
// +---------------------------------------------- --- ----------------------------------
protected $_auto=array(
array('ステータス','1'),
array('inputtime','time',1,'function'),
array('content','content',1,'callback'),
array('url','geturl',1,'callback'),
配列 ('inputtime','time',1,'function')、
array('path','path',3,'callback'),
array( 'username'、 'getusername'、3、 'callback')、array( 'username'、 'getusername'、3、 'callback')、
);
// +---------------------------------------------- --- ----------------------------------
// | getusername() はユーザー名をフィルターします
// +---------------------------------------------- --- -----------------------
パブリック関数 getusername(){
If (isset ($_POST['ユーザー名'])) {
if(trim($_POST['username'])=='ネットパイナップルフルーツ'){
return $data= ' ̄□ ̄';
} elseif(strlen($ _ post ['username'])> 10){
return $data= msubstr($_POST['username'],0,5);
return $data= $_POST['ユーザー名'];
// +---------------------------------------------- --- ----------------------------------
// | path() はサブクラスのパスを返し、親クラスのパスの値は 0 です
// +---------------------------------------------- --- ----------------------------------
パブリック関数 path(){
$pid=isset($_POST['pid'])?(int)$_POST['pid']:0;
$id=$_POST['id'];
if($pid==0){
0を返します。
}
$fat=$this->where(array('id' =>$pid))->find();
$data=$fat['パス'].'-'.$fat['id'];
$data を返します。
}
// +---------------------------------------------- -----------------------
// | content()过滤留言内容
// +---------------------------------------------- -----------------------
パブリック関数 content() {
if (isset ($_POST['content']) && !empty ($_POST['content'])) {
$data =deleteHtmlTags($_POST['content']);
$data =safeHtml($data);
if (strlen($data) > 1000) {
$data = msubstr($data, 0, 500);
}
$data を返します。
}
}
// +---------------------------------------------- -----------------------
// | content()过滤URL
// +---------------------------------------------- -----------------------
パブリック関数 geturl(){
if (isset ($_POST['url'])) {
$data = deleteHtmlTags($_POST['url']);
$data =safeHtml($data);
$data=$data?$data:"" を返します。
}
}
// +---------------------------------------------- -----------------------
// |gclist($field,$where='',$pagesize=30)留言列表
// +---------------------------------------------- -----------------------
// |$field,字段
// +---------------------------------------------- -----------------------
// |$where 条件、默认は空
// +---------------------------------------------- -----------------------
// |$pagesize分页记录、默认は30
// +---------------------------------------------- -----------------------
// |使用方法、上のコントロールを参照してください
// +---------------------------------------------- -----------------------
パブリック関数 gclist($field,$where='',$pagesize=30) {
import("ORG.Util.Page");
$count = $this->field('id')->where($where)->count();
$P = 新しいページ($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
$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);
$arr を返します。
}
}
?>
ここで説明されている大企業の ThinkPHP フレームワーク プログラムの設計が役立つことを望んでいます。
人が作成したデータベース テーブルを取得したら、1 つの ID を再取得してから、毎回その ID をテーブルに再書き込みしてください。
回复关联表:
回复コンテンツid 回复コンテンツid
这样就可实现無制限回复了!
php+mysql三级分类、李文凯thinkphp無制限级分类