ThinkPHP無限分類的使用

本文實例展示了thinkphp自動填充實現無限級分類的方法,是thinkphp常用功能之一,非常具有實用價值。現將完整實例分享給大家,供大家參考。

ThinkPHP無限分類的使用

thinkphp無限分類的使用

具體實現步驟如下(本文采用TP框架的3.1.3版本):

(推薦教程:thinkphp教程

第一步:表aoli_cate如下圖所示

立即學習PHP免費學習筆記(深入)”;

CREATE?TABLE?`fenlei`?( ??`id`?int(10)?unsigned?NOT?NULL?AUTO_INCREMENT?COMMENT?'主鍵', ??`name`?varchar(255)?DEFAULT?NULL?COMMENT?'父id', ??`pid`?int(255)?NOT?NULL?COMMENT?'名字', ??`path`?varchar(20)?DEFAULT?NULL,//path字段是給數據排序用 ??PRIMARY?KEY?(`id`) )?ENGINE=MyISAM?AUTO_INCREMENT=15?DEFAULT?CHARSET=utf8; insert?into?fenlei(id,name,pid,path)?values (1,’新聞’,0,’0’), (2,’中國新聞’,1,’0-1’),//path?最后一個數據是排序用的 (3,’美國新聞’,1,’0-1’), (4,’北京新聞’,2,’0-1-2’), (5,’華盛頓新聞’,3,’0-1-3’), (6,’日本新聞’,1,’0-1’);

ThinkPHP無限分類的使用

第二步:action部分

aoli/Home/Lib/Action/CataAction.class.php文件如下:

<?php class CateAction extends Action{   function index(){     //實例化cate     $cate=M(&#39;cate&#39;);     //獲取數據     //將path和id連接起來,組合成為bpath數組     $list=$cate->field("id,name,pid,path,concat(path,'-',id)?as?bpath")-&gt;order('bpath')-&gt;select(); ????foreach($list?as?$key=&gt;$value){ ???????//在查詢獲取的數組里面增加一個'count'數組; ???????//統計bpath字段的字符串個數,并賦值給'count'數組。 ???????$list[$key]['count']=count(explode('-',$value['bpath'])); ????} ????//展示數據 ????$this-&gt;assign('alist',$list); ????$this-&gt;display();?? ??} ??//添加欄目 ??function?add(){ ????//實例化CateModel類 ????$cate=new?CateModel(); ????//如果從CateModel模型接受數據成功 ????if($vo=$cate-&gt;create()){ ??????//執行添加 ??????if($cate-&gt;add()){ ????????$this-&gt;success('添加欄目成功');?? ??????}else{ ????????$this-&gt;error('添加欄目失敗');?? ??????} ??????//dump($vo);?? ????}else{ ??????//返回錯誤信息 ??????$this-&gt;error($cate-&gt;getError());?? ????} ??} } ?&gt;

?第三步:模型部分

aoli/Home/Lib/Model/CataModel.class.php文件如下:

<?php class CateModel extends Model{//對應數據庫中的表aoli_cate   //在Model類定義 $_auto 屬性,可以完成數據自動處理功能,用來處理默認值、數據過濾以及其他系統寫入字段。$_auto屬性是由多個填充因子組成的數組。   protected $_auto=array(     //示例        //對name字段在新增的時候回調getName方法     //array(&#39;name&#39;,&#39;getName&#39;,1,&#39;callback&#39;),     //&#39;path&#39;填充字段     //&#39;tclm&#39;回調函數     // 3 新增數據和更新數據的時候都處理     // callback :回調方法 ,表示填充的內容是一個當前模型的方法     array(&#39;path&#39;,&#39;tclm&#39;,3,&#39;callback&#39;),     );     //回調函數   function tclm(){     //如果pid存在,就轉成整形,不存在就賦值0,表示是根目錄     $pid=isset($_POST[&#39;pid&#39;])?(int)$_POST[&#39;pid&#39;]:0;     //可以查看pid     //echo ($pid);     //如果是根目錄,就是在select表單沒有選任何值提交的時候     if($pid==0){       //       $data=0;     }else{       //如果id和pid相等       $list=$this->where("id=$pid")-&gt;find(); ??????//把回調值$data賦值 ??????$data=$list['path'].'-'.$list['id'];//子類的path為父類的path加上父類的id ????} ????//回調值 ????return?$data;?? ??} } ?&gt;

第四步:view視圖部分

<!--提交到本類的add方法--> 
//size=”20″可以將select?框變大 ?請選擇父級欄目:
?新的欄目名稱:
?

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享