當前位置:
首頁 > 知識 > thinkphp實現無限級分類

thinkphp實現無限級分類

普通的方法(採用for和foreach)

//顯示
foreach($data as $k=>$v){
//str_repeat函數用於把字元串重複指定的次數
$data[$k]["title"]=str_repeat("---",$v["type"]-1).$v["title"];
}

無限級分類的設計思路:

為了能夠使得欄目的管理更加動態化,在這裡可以設置添加欄目,添加的資料庫中設計一個名為pid的欄位,便於新添加的欄目可以找到他的父欄目。如果是頂級的欄目,則pid為0。再提取數據顯示的時候,後台資料庫中設置有type欄位,用於標識該欄目的等級,在數據顯示的時候用str_repeat函數在前面加上『-----』,來區分他們的等級。

這個時候的排序顯得非常的重要,並且此方法沒辦法很好的把父級和子級聯繫在一起,不建議使用

排序

添加的時候為了更加方便的直觀的顯示哪個欄目下有什麼子欄目,可以選擇在裡面設置一個sorts排序欄位,用於排序。在前端,為了能夠方便排序。需要表單提交全部的排序的內容。前端的話只需要在表單input的name屬性里加入一個數組名

<input type="hidden" name="id" value="{$arr.id}"/>
<input type="text" value="{$arr.sorts}" stylex="width: 40px;height: 40px;text-align: center" name="sorts"/>

然後後台進行接受,同樣用for和foreach進行循環操作和遍歷

//把新的獲得的排序的信息儲存到資料庫中
$arr=$_POST;
for($i=0;$i<count($arr["id"]);$i++){
$sort=$model->find($arr["id"][$i]);
$sort["sorts"]=$arr["sorts"][$i];
$model->save($sort);
}
//然後根據新的排序信息進行排序
$data=$model->order("sorts")->select;
foreach($data as $k=>$v){
$data[$k]["title"]=str_repeat("---",$v["type"]-1).$v["title"];
}

用遞歸的方法實現無限級分類

public function getCate($field="*"){
//用field查詢固定欄位的數據,若是沒有輸入實參,則默認查詢全部
//獲取到資料庫中相關欄目的數據
$data=$this->field($field)->order("sorts asc")->select;
//調用遞歸函數
return $this->getTree($data);
}

//根據父級欄目的id去查詢子欄目的信息
//遞歸函數,傳入全部的欄目信息,用pid來標識欄目所對應的父級的欄目id,level來表示欄目的等級
public function getTree($data,$pid=0,$level=0){
//此處應該定義static 如果沒有用static,則無法輸出全部的欄目信息
static $tree=array;
foreach($data as $key=>$v){
if($v["pid"]==$pid){
$v["level"]=$level;
//str_repeat函數用於把字元串重複指定的次數,用於區別欄目的等級
$v["title"]=str_repeat("----",$level).$v["title"];
$tree=$v;
$this->getTree($data,$v["id"],$level+1);
}
}
}

在用遞歸函數進行無限級分類的時候建議寫在model函數里,這樣在控制器中只需要調用模型中的方法即可。再模型中要想調用資料庫的查詢操作,不用加表明,只需要在模型中使用$this即可。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

spring boot 項目筆記2一自定義配置文件的讀取
Linux常用命令——顯示文件列表
es6系列教程-函數的默認參數詳解
AVR開發 Arduino方法(一)埠子系統

TAG:達人科技 |

您可能感興趣

Python商務辦公——python+pandas高效實現Excel文件合併與分析
python使用pexpect實現ftp的操作
Pytorch實現Logistic回歸二分類
用Python 實現的大規模線性回歸、分類和排名庫——lightning
Python + Memcached: 在分散式應用程序中實現高效緩存
最全面跨組件數據Apache Atlas實現跨組件沿襲Apache Hadoop
Python+Memcached:在分散式應用程序中實現高效緩存
Python + Memcached:在分散式應用程序中實現高效緩存
教程 | 如何通過Scikit-Learn實現多類別文本分類?
Github 代碼實踐:Pytorch 實現的語義分割器
Github代碼實踐:Pytorch實現的語義分割器
使用Strophe.js基於xmpp服務實現即時通訊
Keepalived+Nginx實現負載均衡高可用
用Pytorch 實現的 Capsule Network
Url Scheme實現APP間通信、分享
Linux下Nginx+多Tomcat負載均衡實現詳解
用TensorFlow Estimator實現文本分類
LVS/DR+keepalived負載均衡實現
實現高速點擊的 Android Monkey 自動化工具 fastmonkey-代號 Maxim
AspectJ 框架 spring 實現 AOP?