濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > thinkphp5實(shí)現(xiàn)無(wú)限級(jí)分類

thinkphp5實(shí)現(xiàn)無(wú)限級(jí)分類

熱門標(biāo)簽:上海公司外呼系統(tǒng)線路 十堰ai電話機(jī)器人效果怎么樣 芒果電銷機(jī)器人 銀川ai電話機(jī)器人 臨沂智能電銷機(jī)器人軟件 電梯外呼線路板維修視頻 安陽(yáng)自動(dòng)外呼系統(tǒng)價(jià)格是多少 地圖標(biāo)注風(fēng)向標(biāo) 浙江外呼電話系統(tǒng)軟件

tp5對(duì)分類數(shù)據(jù)表的信息讀取與展示,我們即可以控制器完成,也可以在對(duì)應(yīng)的模型中完成。本案例,我們?cè)谀P椭型耆伞r且,對(duì)數(shù)據(jù)表的增,刪改查操作,本來(lái)就是模型的本職工作。

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

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

當(dāng)前的getCate方法,有三個(gè)參數(shù):

第一個(gè)是$pid,是父類的id,默認(rèn)為0,表示從頂級(jí)開始查起。

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

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

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

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

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

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

?php
 
namespace app\admin\model;
 
use think\Collection;
use think\Model;
 
class Category extends Model
{
 //創(chuàng)建一個(gè)靜態(tài)方法getCate,來(lái)獲取分類信息
 
 /**
  * @param int $pid: 當(dāng)前分類的父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('nbsp;',$blank).$cate_name;
 
   //3-2將查詢到的當(dāng)前記錄保存到結(jié)果$result中
   $result[] = $value;
 
   //3-3關(guān)鍵:將當(dāng)前記錄的id,做為下一級(jí)分類的父id,$pid,繼續(xù)遞歸調(diào)用本方法
   self::getCate($value->id, $result, $blank);
  }
 
  //4.返回查詢結(jié)果,調(diào)用結(jié)果集類make方法打包當(dāng)前結(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');
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 使用ThinkPHP的自動(dòng)完成實(shí)現(xiàn)無(wú)限級(jí)分類實(shí)例詳解
  • Thinkphp無(wú)限級(jí)分類代碼
  • ThinkPHP無(wú)限級(jí)分類原理實(shí)現(xiàn)留言與回復(fù)功能實(shí)例
  • ThinkPHP自動(dòng)填充實(shí)現(xiàn)無(wú)限級(jí)分類的方法
  • thinkphp框架無(wú)限級(jí)欄目的排序功能實(shí)現(xiàn)方法示例
  • thinkPHP實(shí)現(xiàn)遞歸循環(huán)欄目并按照樹形結(jié)構(gòu)無(wú)限極輸出的方法
  • thinkphp實(shí)現(xiàn)無(wú)限分類(使用遞歸)
  • ThinkPHP實(shí)現(xiàn)遞歸無(wú)級(jí)分類——代碼少
  • Thinkphp框架使用list_to_tree 實(shí)現(xiàn)無(wú)限級(jí)分類列出所有節(jié)點(diǎn)示例

標(biāo)簽:吐魯番 遵義 遂寧 常州 荊門 武威 寧夏 徐州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《thinkphp5實(shí)現(xiàn)無(wú)限級(jí)分類》,本文關(guān)鍵詞  thinkphp5,實(shí)現(xiàn),無(wú)限,級(jí),分類,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《thinkphp5實(shí)現(xiàn)無(wú)限級(jí)分類》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于thinkphp5實(shí)現(xiàn)無(wú)限級(jí)分類的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    六盘水市| 翁源县| 白水县| 吉安市| 武汉市| 勐海县| 赣州市| 舒兰市| 桑日县| 黄石市| 霍林郭勒市| 确山县| 双江| 屏山县| 且末县| 乳山市| 个旧市| 灯塔市| 遂溪县| 岗巴县| 谢通门县| 邵阳县| 隆安县| 大宁县| 乌海市| 哈尔滨市| 开原市| 巩义市| 河南省| 达拉特旗| 调兵山市| 哈尔滨市| 日照市| 宜章县| 平原县| 张北县| 潮州市| 阿巴嘎旗| 菏泽市| 衡山县| 黑龙江省|