首頁 >後端開發 >php教程 >thinkphp無限極分類實作方法

thinkphp無限極分類實作方法

大家讲道理
大家讲道理原創
2017-02-21 10:09:044902瀏覽

本文講解了thinkphp框架下實現無限級分類的方法,無限級分類一般應用在網站的分類菜單中,是很常用的數據結構和功能,在thinkphp中實現這種方法也是很容易的一件事,接下來我們就來學習下如何來使用。

無限分類原理是增加一個字段(如Sid)作區分,頂級分類Sid為0,二級分類Sid為上一級分類的ID,一次類推。輸出的時候一般使用遞迴即可。

我們先來新建一張資料表,表結構如下:

thinkphp無限極分類實作方法

控制器: CateAction .class.php

<?php
 class CateAction extends Action{
 function index(){
 $cate=M(&#39;Cate&#39;);
 $list=$cate->field("id,name,pid,path,concat(path,&#39;-&#39;,id) as bpath")->order(&#39;bpath&#39;)->select();
 foreach($list as $key=>$value){
 $list[$key][&#39;count&#39;]=count(explode(&#39;-&#39;,$value[&#39;bpath&#39;]));
 }
 $this->assign(&#39;alist&#39;,$list);
 $this->display();
 }//添加栏目
 function add(){
 $cate=new CateModel();if($vo=$cate->create()){
 if($cate->add()){
 $this->success(&#39;添加栏目成功&#39;);
 }else{
 $this->error(&#39;添加栏目失败&#39;);
 }
 }else{
 $this->error($cate->getError());
 }
 }}
 ?>

模型:CateModel.class.php

<?php
 class CateModel extends Model{//对应数据库中的表xp_cate
 protected $_auto=array(
 array(&#39;path&#39;,&#39;tclm&#39;,3,&#39;callback&#39;),
 );function tclm(){
 $pid=isset($_POST[&#39;pid&#39;])?(int)$_POST[&#39;pid&#39;]:0;
 echo ($pid);
 if($pid==0){
 $data=0;
 }else{
 $list=$this->where("id=$pid")->find();
 $data=$list[&#39;path&#39;].&#39;-&#39;.$list[&#39;id&#39;];//子类的path为父类的path加上父类的id
 }
 return $data;
 }
 }
 ?>

模板:index.html

<form action="!-URL-!/add" method="post">
 请选择父级栏目:<select name="pid" size="20">
 <option value="0">根栏目</option>
 <volist name="alist" id="vo">
 <option value="{$vo[&#39;id&#39;]}">
   {:str_repeat(" ",$vo[&#39;count&#39;]-2)}
 {$vo[&#39;name&#39;]}
 </option>
 </volist>
 </select><br />
 新的栏目名称:<input type="text" name="name" /><br />
 <input type="submit" value="添加栏目" />
 </form>

顯示結果如下:

thinkphp無限極分類實作方法


註:

本文所實現的無限級分類使用了ThinkPhP框架。也就是採用的MVC架構,其中控制器,模版和模型層寫的很清楚,對於會使用TP的來說理解很容易,如果有對TP框架不理解的同學,可以先了解下框架的使用方法,在回頭看我們的寫法。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn