热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php的三联菜单解决思路,php的三联菜单解决思路错误

本文目录一览:1、PHP如何实现多级菜单(多维数组的形式)

本文目录一览:


  • 1、PHP如何实现多级菜单(多维数组的形式)


  • 2、phpcms 三级地区联动菜单怎么调用?


  • 3、thinkphp 分三个表做出三级菜单 用foreach怎么做!求大神~


  • 4、phpcms网站建设中,联动菜单怎样读取?联动菜单菜单调用方法


  • 5、thinkphp框架怎么做一个三级菜单


  • 6、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" 

   {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;

}

}

这是一个递归获取的分类,就这个函数应该可以满足你的需求


推荐阅读
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 解决Unreal Engine中UMG按钮长时间按住自动释放的问题
    本文探讨了在Unreal Engine中使用UMG按钮时,长时间按住按钮会导致自动释放的问题,并提供了详细的解决方案。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 利用PHP循环高效处理多条帖子表单数据 ... [详细]
  • 更新vuex的数据为什么用mutation?
    更新vuex的数据为什么用mutation?,Go语言社区,Golang程序员人脉社 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
author-avatar
mobiledu2502862117
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有