本文實例展示了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’);
第二步:action部分
aoli/Home/Lib/Action/CataAction.class.php文件如下:
<?php class CateAction extends Action{ function index(){ //實例化cate $cate=M('cate'); //獲取數據 //將path和id連接起來,組合成為bpath數組 $list=$cate->field("id,name,pid,path,concat(path,'-',id)?as?bpath")->order('bpath')->select(); ????foreach($list?as?$key=>$value){ ???????//在查詢獲取的數組里面增加一個'count'數組; ???????//統計bpath字段的字符串個數,并賦值給'count'數組。 ???????$list[$key]['count']=count(explode('-',$value['bpath'])); ????} ????//展示數據 ????$this->assign('alist',$list); ????$this->display();?? ??} ??//添加欄目 ??function?add(){ ????//實例化CateModel類 ????$cate=new?CateModel(); ????//如果從CateModel模型接受數據成功 ????if($vo=$cate->create()){ ??????//執行添加 ??????if($cate->add()){ ????????$this->success('添加欄目成功');?? ??????}else{ ????????$this->error('添加欄目失敗');?? ??????} ??????//dump($vo);?? ????}else{ ??????//返回錯誤信息 ??????$this->error($cate->getError());?? ????} ??} } ?>
?第三步:模型部分
aoli/Home/Lib/Model/CataModel.class.php文件如下:
<?php class CateModel extends Model{//對應數據庫中的表aoli_cate //在Model類定義 $_auto 屬性,可以完成數據自動處理功能,用來處理默認值、數據過濾以及其他系統寫入字段。$_auto屬性是由多個填充因子組成的數組。 protected $_auto=array( //示例 //對name字段在新增的時候回調getName方法 //array('name','getName',1,'callback'), //'path'填充字段 //'tclm'回調函數 // 3 新增數據和更新數據的時候都處理 // callback :回調方法 ,表示填充的內容是一個當前模型的方法 array('path','tclm',3,'callback'), ); //回調函數 function tclm(){ //如果pid存在,就轉成整形,不存在就賦值0,表示是根目錄 $pid=isset($_POST['pid'])?(int)$_POST['pid']:0; //可以查看pid //echo ($pid); //如果是根目錄,就是在select表單沒有選任何值提交的時候 if($pid==0){ // $data=0; }else{ //如果id和pid相等 $list=$this->where("id=$pid")->find(); ??????//把回調值$data賦值 ??????$data=$list['path'].'-'.$list['id'];//子類的path為父類的path加上父類的id ????} ????//回調值 ????return?$data;?? ??} } ?>
第四步:view視圖部分
<!--提交到本類的add方法-->
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END