因爲咱們須要使用到的是模型來驗證一下,因此咱們先到 D:\phpStudy\WWW\shop\WEB\Admin\Model 下建立一個CateModel.class.phpphp
<?php namespace Admin\Model; use Think\Model; class CateModel extends Model { protected $_validate = array( array('catename','require','分類名稱不能爲空',1) ); }
而後來設置一下模版:數據庫
而後咱們來寫 Cate 控制器 的add方法:測試
public function add(){ $mod = D('cate'); if(IS_POST){ $data['catename'] = I('catename'); $data['pid'] = I('pid'); if($mod -> create($data)){ if($mod->add($data)){ $this -> success('添加欄目成功'); }else{ $this -> error('添加欄目失敗'); } }else{ $this -> error($mod -> getError()); } return; } $this -> display(); }
咱們添加幾條數據看看:ui
而後到數據庫看看:this
已經添加成功咯,可是畢竟是無限極分類,總不能永遠是父級欄目吧??spa
那麼咱們回到cata控制器下的add方法中,先從數據庫取出數據,而後分配到模版中:3d
public function add(){ $mod = D('cate'); if(IS_POST){ $data['catename'] = I('catename'); $data['pid'] = I('pid'); if($mod -> create($data)){ if($mod->add($data)){ $this -> success('添加欄目成功'); }else{ $this -> error('添加欄目失敗'); } }else{ $this -> error($mod -> getError()); } return; } $data = $mod -> select(); $this -> assign('data',$data); $this -> display(); }
而後到模版進行遍歷一下數據:code
而後到測試看看效果:blog
而後添加一個父級爲cate2的測試下,而後到數據庫看看:排序
雖然添加成功了,可是咱們的頂級欄目和子級欄目這樣是不容易被你們區分出來,因此咱們須要到D:\phpStudy\WWW\shop\WEB\Admin\Model 找到CateModel.class.php 對她進行修改下:
<?php namespace Admin\Model; use Think\Model; class CateModel extends Model { protected $_validate = array( array('catename','require','分類名稱不能爲空',1) ); //定義一個方法,獲取樹狀的分類信息 public function cateTree(){ $cats = $this->order('id desc')->select(); //經過tree裏面的方法進行排序 return $this->tree($cats); } public function tree($arr,$pid=0,$level=0){ //$level是本身定義出來的 static $tree = array(); foreach($arr as $v){ if($v['pid']==$pid){ //說明找到,保存 $v['level'] = $level; $tree[] = $v; //繼續找 $this -> tree($arr,$v['id'],$level+1); //這裏的cate_id表的id } } return $tree; } }
而後回到控制器下,在取數據的時候用cateTree的方法來進行取數據:
public function lists(){ $this -> display(); } public function add(){ $mod = D('cate'); if(IS_POST){ $data['catename'] = I('catename'); $data['pid'] = I('pid'); if($mod -> create($data)){ if($mod->add($data)){ $this -> success('添加欄目成功'); }else{ $this -> error('添加欄目失敗'); } }else{ $this -> error($mod -> getError()); } return; } $data = $mod -> cateTree(); $this -> assign('data',$data); $this -> display(); }
而後再模版頁修改下添加數據的方法便可:
<td> <select name="pid"> <option value="0">頂級分類</option> <volist name="data" id="vo"> <option value="{$vo.id}"> {$vo['level']|str_repeat="....",###} {$vo['catename']} </option> </volist> </select> </td>
而後我去測試下添加,效果以下所示:
YES,添加成功。。