php的三聯菜單解決思路,php的三聯菜單解決思路錯誤

本文目錄一覽:

PHP如何實現多級菜單(多維數組的形式)

首先邏輯涉及到while內嵌套while是,要用兩個不同連接對象

類似

$conn1=mysql_connect(…);

$conn2=mysql_connect(…);

$sql1第一個循環語句

$sql2第二個循環語句

mysql_query($sql1,$conn1)

while($rows=mysql_fetch_array(…)){

mysql_query($sql2,$conn1);

while($rows=mysql_fetch_array(…)){

…….

}

}

關鍵是建立不同的連接對象如,$conn1和$conn2,不能用一種連接對象,讓數據庫查詢while裏面套while

這種可以while裏面嵌套while

其次你這樣設計多級菜單有問題

$sql = “select * from menu where parent_id=”.$this-id;

這邊的$this-id;是上級對象返回的結果

可是上級對象返回卻是數組 return $arr;

phpcms 三級地區聯動菜單怎麼調用?

在phpcms中,聯動菜單的管理位置位於「後台-擴展-聯動菜單」支持自定義添加,聯動菜單一般有使用用法:

一、在數據模型中創建自定義字段(可參考iphpcms的教程)時字段類型設置為「聯動菜單」,然後在「菜單id」選項處通過聯動菜單列表選擇你的地區聯動菜單,並可設定聯動菜單的返回值的方式。然後在內容添加編輯界面可出現此聯動菜單項,此方法常用。

二、在phpcms模板中直接調用聯動菜單,此方法不常用。具體方法是來到後台-擴展-聯動菜單列表,你會看到每一個聯動菜單都有一個調用代碼,將此代碼複製粘貼到你想放的模板位置即可。但根據經驗,這還不夠,因為雖然通過此代碼把聯動菜單掉出來了,但是因為缺乏此帶單顯示時的css、js文件,往往顯示不正常,所以需要保證你的模板里同時引入了statics/js/dialog.js、statics/js/linkage/js/pop.js、statics/css/dialog.css等文件。需要對phpcms有一定了解。

thinkphp 分三個表做出三級菜單 用foreach怎麼做!求大神~

按照你這種邏輯。。。只能再加一個foreach了。

在select()後增加一行

foreach($pro[$n][‘id’] as $key = $v){

查詢語句。。。。

}

沒誰了…

phpcms網站建設中,聯動菜單怎樣讀取?聯動菜單菜單調用方法

在phpcms中,聯動菜單的管理位置位於「後台-擴展-聯動菜單」,支持自定義添加。因為問題中沒有具體說明在哪裡調用,那我就從使用於開發的幾個角度來講聯動菜單的調用:

一、我們常用的是在自定義數據模型字段中:

創建的聯動菜單項將應用於後台內容(文章)添加界面。在「後台-內容-數據模型-字段管理-添加字段」中,字段類型設置為「聯動菜單」,然後在「菜單id」選項處通過聯動菜單列表選擇你要使用的菜單,例如地區聯動菜單,並可設定聯動菜單的返回值的方式。然後在內容添加編輯界面可出現此聯動菜單項了。

主要設置顏色如下:

編輯界面顯示效果如下:

當然,菜單顯示樣式(下拉式、彈窗式)可在「後台-擴展-聯動菜單-修改」中配置。

二、在phpcms模板中直接調用聯動菜單:

此方法不常用。具體方法是來到「後台-擴展-聯動菜單列表」,你會看到每一個聯動菜單都有一個調用代碼,將此代碼複製粘貼到你想放的模板位置即可。

但根據經驗,這還不夠,因為雖然通過此代碼把聯動菜單掉出來了,但是因為缺乏此菜單顯示時的css、js文件導致缺乏樣式與效果從而顯示不正常,所以需要保證你的模板里同時引入了一下幾個文件:

statics/js/dialog.js

statics/js/linkage/js/pop.js

statics/css/dialog.css

三、在php文件中或者在模板中使用萬能標籤直接讀取聯動菜單數據表中的數據:

此方法往往在我們進行二次開發中使用。聯動菜單數據存放在v9_linkage數據表中,可根據字段parentid等字段指定獲取不同層級數據。

因為開發相關會涉及到phpcms的相關類方法或函數相對來說比較複雜,這裡就不詳細講解了,具體可參考官方開發手冊以及iphpcms的視頻教程,這裡給出演示代碼以作了解:

php程序中調用代碼演示:

$linkage_db = pc_base::load_model(“linkage_model”); //引入模型

$data = $linkage_db-select(array(‘parentid’=0)); //讀取指定條件的數據

模板中萬能標籤寫法演示:

{pc:get sql=”select * from phpcms_linkage where parentid=0 and keyid=1″ num=”99″}

{loop $data $v}

li省份:{$v[name]}/li

{/loop}

{/pc}

本方法中獲取的是原始的數據表數據,沒有簽名方法中的相關html代碼css樣式等修飾,自己根據需求進行相應處理渲染即可。

PS:  1. 以上方法前兩個偏向於系統應用,後者偏向於開發,希望對你有所幫助吧。如果仍有疑惑可以追問。2.考慮的你說的「聯動菜單」有指「導航條聯動下拉效果」的嫌疑,這裡附註一段調用演示代碼:

{pc:content action=”category” catid=”0″ num=”25″ siteid=”$siteid” order=”listorder ASC”}

lidiva href=”{siteurl($siteid)}/”span網站首頁/span/a/div/li

{loop $data $k $v}

 lidiv

   a href=”{$v[url]}”span{$v[catname]}/span/a

   ul class=”sub_mune_ul” style=”display: none; “

   {pc:content action=”category” catid=”$k” num=”10″ siteid=”$siteid” order=”listorder ASC”}

   {loop $data $r} lia href=”{$r[url]}”{$r[catname]}/a/li {/loop}

   {/pc}

   /ul/div/li

{/loop}

{/pc}

thinkphp框架怎麼做一個三級菜單

thinkphp框架onethink後台支持三級菜單

onethink後台支持三級菜單,CMS管理後台1.0版本本身不支持三級菜單,稍加改動,即可支持無限級分類

/**

* 獲取控制器菜單數組,二級菜單元素位於一級菜單的’_child’元素中

* @author 朱亞傑 xcoolcc@gmail.com

*/

final public function getMenus($controller=CONTROLLER_NAME){

// $menus = session(‘ADMIN_MENU_LIST’.$controller);

$flag=false;//是否開啟menu三級菜單

if(empty($menus)){

// 獲取主菜單

$where[‘pid’] = 0;

$where[‘hide’] = 0;

if(!C(‘DEVELOP_MODE’)){ // 是否開發者模式

$where[‘is_dev’] = 0;

}

$menus[‘main’] = M(‘Menu’)-where($where)-order(‘sort asc’)-select();

$menus[‘child’] = array(); //設置子節點

//高亮主菜單

$current = M(‘Menu’)-where(“url like ‘%{$controller}/”.ACTION_NAME.”%'”)-field(‘id’)-find();

if($current){

$nav = D(‘Menu’)-getPath($current[‘id’]);

$nav_first_title = $nav[0][‘title’];

foreach ($menus[‘main’] as $key = $item) {

if (!is_array($item) || empty($item[‘title’]) || empty($item[‘url’]) ) {

$this-error(‘控制器基類$menus屬性元素配置有誤’);

}

if( stripos($item[‘url’],MODULE_NAME)!==0 ){

$item[‘url’] = MODULE_NAME.’/’.$item[‘url’];

}

// 判斷主菜單權限

if ( !IS_ROOT !$this-checkRule($item[‘url’],AuthRuleModel::RULE_MAIN,null) ) {

unset($menus[‘main’][$key]);

continue;//繼續循環

}

// 獲取當前主菜單的子菜單項

if($item[‘title’] == $nav_first_title){

$menus[‘main’][$key][‘class’]=’current’;

//生成child樹

$groups = M(‘Menu’)-where(“pid = {$item[‘id’]}”)-distinct(true)-field(“`group`”)-select();

if($groups){

$groups = array_column($groups, ‘group’);

}else{

$groups = array();

}

//獲取二級分類的合法url

$where = array();

$where[‘pid’] = $item[‘id’];

$where[‘hide’] = 0;

if(!C(‘DEVELOP_MODE’)){ // 是否開發者模式

$where[‘is_dev’] = 0;

}

$second_urls = M(‘Menu’)-where($where)-getField(‘id,url’);

$third_urlss=array();

if(!empty($second_urls) $flag){

foreach($second_urls as $key=$v){

$wheres = array();

$wheres[‘pid’] = $key;

$wheres[‘hide’] = 0;

if(!C(‘DEVELOP_MODE’)){ // 是否開發者模式

$wheres[‘is_dev’] = 0;

}

$third_urls[] = M(‘Menu’)-where($wheres)-getField(‘id,url’);

foreach($third_urls as $vv){

foreach($vv as $key=$vs){

$third_urlss[$key]=$vs;

}

}

}

}

if(!IS_ROOT){

// 檢測菜單權限

$to_check_urls = array();

foreach ($second_urls as $key=$to_check_url) {

if( stripos($to_check_url,MODULE_NAME)!==0 ){

$rule = MODULE_NAME.’/’.$to_check_url;

}else{

$rule = $to_check_url;

}

if($this-checkRule($rule, AuthRuleModel::RULE_URL,null))

$to_check_urls[] = $to_check_url;

}

if(!empty($third_urlss) $flag){

foreach ($third_urlss as $key=$to_check_urlss) {

if( stripos($to_check_urlss,MODULE_NAME)!==0 ){

$rules = MODULE_NAME.’/’.$to_check_urlss;

}else{

$rules = $to_check_urlss;

}

if($this-checkRule($rules, AuthRuleModel::RULE_URL,null))

echo $rules.”br/”;

$to_check_urlsss[] = $to_check_urlss;

}

}

}

// 按照分組生成子菜單樹

foreach ($groups as $g) {

$map = array(‘group’=$g);

if(isset($to_check_urls)){

if(empty($to_check_urls)){

// 沒有任何權限

continue;

}else{

$map[‘url’] = array(‘in’, $to_check_urls);

}

}

$map[‘pid’] = $item[‘id’];

$map[‘hide’] = 0;

if(!C(‘DEVELOP_MODE’)){ // 是否開發者模式

$map[‘is_dev’] = 0;

}

$menuList = M(‘Menu’)-where($map)-field(‘id,pid,title,url,tip’)-order(‘sort asc’)-select();

$menus[‘child’][$g] = list_to_tree($menuList, ‘id’, ‘pid’, ‘operater’, $item[‘id’]);

//支持三級菜單

if(!empty($menus[‘child’][$g]) $flag){

foreach($menuList as $key=$v){

$maps[‘pid’] = $v[‘id’];

$menuLists = M(‘Menu’)-where($maps)-field(‘id,pid,title,url,tip’)-order(‘sort asc’)-select();

$menus[‘child’][$g][$key][‘ttt’] = list_to_tree($menuLists, ‘id’, ‘pid’, ‘operater’, $v[‘id’]);

}

}

}

if($menus[‘child’] === array()){

//$this-error(‘主菜單下缺少子菜單,請去系統=》後台菜單管理里添加’);

}

}

}

}

// session(‘ADMIN_MENU_LIST’.$controller,$menus);

}

return $menus;

}

然後Public/base.html

!– 邊欄 —

div class=”sidebar”

!– 子導航 —

block name=”sidebar”

div class=”sidebar-collapse” id=”sidebar-collapse”

i class=”fa fa-angle-double-left”/i

/div

div id=”subnav” class=”subnav”

notempty name=”_extra_menu”

{// 動態擴展菜單 //}

{:extra_menu($_extra_menu,$__MENU__)}

/notempty

volist name=”__MENU__.child” id=”sub_menu”

!– 子導航 —

notempty name=”sub_menu”

notempty name=”key”h3i class=”icon icon-unfold”/i{$key}/h3/notempty

ul class=”side-sub-menu”

volist name=”sub_menu” id=”menu”

li

a class=”item” href=”{$menu.url|U}”{$menu.title}/a

/li

/volist

notempty name=”menu.ttt”

volist name=”menu.ttt” id=”menus”

li

a class=”item” href=”{$menus.url|U}”{$menus.title}/a

/li

/volist

/notempty

/ul

/notempty

!– /子導航 —

/volist

/div

/block

!– /子導航 —

/div

PHP 多級菜單問題

function menu_sort ($table,$parent_id=0,$t=-1)

{

static $_menu = array();

$t++;

$sql = “SELECT * FROM `{$table}` WHERE `parent_id`='{$parent_id}’ ORDER BY `sort_order` DESC,`id` “;

$query = $GLOBALS[‘db’]-getAll($sql);

if($query)

{

foreach ($query as $key = $val )

{

if($val[‘parent_id’]!=0)

{

$val[‘sort_name’] = str_repeat(‘ ‘,$t*3).’┝’.$val[‘sort_name’];

}

$_menu[] = $val;

menu_sort($table,$val[‘id’],$t);

}

return $_menu;

}

}

這是一個遞歸獲取的分類,就這個函數應該可以滿足你的需求

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/301366.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-30 16:08
下一篇 2024-12-30 16:09

相關推薦

發表回復

登錄後才能評論