国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

thinkphp5實現(xiàn)無限級分類

2024-05-05 00:06:48
字體:
供稿:網(wǎng)友

tp5對分類數(shù)據(jù)表的信息讀取與展示,我們即可以控制器完成,也可以在對應(yīng)的模型中完成。本案例,我們在模型中完全成。況且,對數(shù)據(jù)表的增,刪改查操作,本來就是模型的本職工作。

首先聲明一下,我們采用遞歸的方式來實現(xiàn)無限分類。但無限分類的實現(xiàn),不是只是遞歸一種方式,還有一種是全路徑方式,也可以實現(xiàn),不過,這種方式通常用在全路徑導(dǎo)航菜單中。所以,這里我們還是用最常見的遞歸函數(shù)來實現(xiàn):無限分類。

首先我們先創(chuàng)建一個靜態(tài)方法:getCate,為什么要靜態(tài)方式,因為靜態(tài)方法執(zhí)行效率高,不需要實例化,而且,分類查詢是使用非常頻繁的操作,很多查詢都要依賴分類查詢的結(jié)果。

當前的getCate方法,有三個參數(shù):

第一個是$pid,是父類的id,默認為0,表示從頂級開始查起。

第二個參數(shù)是返回的查詢結(jié)果,我們放在一個數(shù)組中返回,注意,這個變量是引入方式傳入的。

在遞歸函數(shù)中,返回結(jié)果有三種方式:

第一種就是大家比較熟悉的,使用全局變量$_GLOBALS[],這個方法有副作用,我們不用它;

第二種方式也不錯,是在函數(shù)中用static關(guān)鍵字,聲明一個靜態(tài)變量,它可以將每一次的遞歸執(zhí)行結(jié)果進行累計,最后再返回,非常好理解,但占用資源過多,執(zhí)行效率低;

第三種,就是采用引用參數(shù)的方式,來返回結(jié)果,這也是目前主流的技術(shù)。盡管理解起來有難度,但執(zhí)行效率是最高的,我們要玩,就玩大的,所以這里,我們就直接采用引用,來返回查詢結(jié)果。

第三個參數(shù),可以沒有,它是用來設(shè)置一下分類之間的層次顯示的,可以讓結(jié)果看上去更直觀清晰。

<?php namespace app/admin/model; use think/Collection;use think/Model; class Category extends Model{ //創(chuàng)建一個靜態(tài)方法getCate,來獲取分類信息  /**  * @param int $pid: 當前分類的父id  * @param array $result:引用返回值  * @param int $blank:設(shè)置分類之間的顯示提示  */ public static function getCate($pid=0, &$result=[], $blank=0) {  //1.分類表查詢:$pid  $res = self::all(['pid'=>$pid]);   //2.自定義分類名稱前面的提示信息  $blank += 2;   //3.遍歷分類表  foreach ($res as $key => $value) {    //3-1自定義分類名稱的顯示格式   $cate_name = '|--'.$value->cate_name;   $value->cate_name = str_repeat(' ',$blank).$cate_name;    //3-2將查詢到的當前記錄保存到結(jié)果$result中   $result[] = $value;    //3-3關(guān)鍵:將當前記錄的id,做為下一級分類的父id,$pid,繼續(xù)遞歸調(diào)用本方法   self::getCate($value->id, $result, $blank);  }   //4.返回查詢結(jié)果,調(diào)用結(jié)果集類make方法打包當前結(jié)果,轉(zhuǎn)為二維數(shù)組返回  return Collection::make($result)->toArray(); }}

控制器中調(diào)用代碼:

public function edit(Request $request){ //1.獲取一下分類id $cate_id = $request -> param('id');  //2.查詢要更新的數(shù)據(jù) $cate_now = CategoryModel::get($cate_id);  //3.遞歸查詢所有的分類信息 $cate_level = CategoryModel::getCate();  //4.模板賦值 $this -> view -> assign('cate_now', $cate_now); $this -> view -> assign('cate_level', $cate_level);   //5.渲染模板 return $this -> view -> fetch('category_edit');}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 玉树县| 和林格尔县| 古蔺县| 巴塘县| 巍山| 葫芦岛市| 临泉县| 垣曲县| 卓资县| 青河县| 五台县| 井陉县| 衡东县| 五家渠市| 梨树县| 芒康县| 法库县| 新宁县| 边坝县| 临澧县| 汝南县| 石渠县| 高州市| 富宁县| 奇台县| 富平县| 筠连县| 丰城市| 广平县| 南漳县| 元朗区| 赤水市| 班玛县| 托克托县| 淮阳县| 万盛区| 忻城县| 宜宾县| 红安县| 抚顺县| 靖西县|