thinkphp 关于遍历菜单的问题
在thinkphp中 遍历出数据库的数据显示到模板中,
数据库
CREATE TABLE `cn_menu` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '系统菜单id', `pid` int(10) unsigned DEFAULT NULL COMMENT '父级id', `name` varchar(200) DEFAULT NULL COMMENT '菜单名称', `url` varchar(200) DEFAULT NULL COMMENT '菜单URL', `params` varchar(200) DEFAULT NULL COMMENT 'URL参数', `sort` tinyint(4) DEFAULT '1' COMMENT '排序', `status` tinyint(1) DEFAULT '1' COMMENT '菜单状态(1=显示,2=隐藏,0=删除)', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='系统菜单表';
这是数据库的数据
这个是菜单显示图
这个是模板 代码 但是!这个模板的数据我不要死得,要根据数据库的数据遍历出来的
<div class="sidebar"> <input type="hidden" value="{:U('SystemFunc/index')}" id="urlAjax"> <ul class="nav" id="nav" > <li class="nav-li"> <a href="###" id="aaa">系统菜单 <span class="caret"></span></a> <ul class="menu"> <li class="menu-li"><a target="main" href="{:U('SystemFunc/listMenu')}">菜单列表</a></li> <!--<li class="menu-li active"><a target="main" href="{:U('SystemFunc/listMenu')}">菜单列表</a></li>--> <li class="menu-li "><a target="main" href="{:U('SystemFunc/addMenu')}">添加菜单</a></li> </ul> </li> <li class="nav-li"> <a href="###">系统角色 <span class="caret"></span></a> <ul class="menu"> <li class="menu-li"><a target="main" href="{:U('SystemFunc/listOral')}">系统角色</a></li> <li class="menu-li"><a target="main" href="{:U('SystemFunc/addOral')}">添加角色</a></li> </ul> </li> <li class="nav-li"> <a href="###">系统管理 <span class="caret"></span></a> <ul class="menu"> <li class="menu-li"><a target="main" href="##">管理员</a></li> <li class="menu-li"><a target="main" href="{:U('SystemFunc/addAdmin')}">添加管理员</a></li> </ul> </li> </ul> </div>
1、首先遍历出数据,数据不能是死的,要根据数据库的数据循环出来
2、鼠标点击一下,就隐藏他的下级, 比如:我点击系统菜单,那么 系统菜单下面的菜单列表和添加菜单都(隐藏)收起来!再点击一次菜单列表和添加菜单 显示出来
3、试过很多方法都不管用,新入门的菜鸟求指教,万分感激!!满分奉上
回复讨论(解决方案)
根据pid从数据库取值,至于鼠标点击一下,就隐藏他的下级,这属于前端了,js,或jquery实现
根据pid从数据库取值,至于鼠标点击一下,就隐藏他的下级,这属于前端了,js,或jquery实现
可是代码怎么实现用sql遍历出数据,然后用两个for循环嵌套,第一个for循环显示pid=0的
首先在后台中将pid==0的节点找出来组成数组arr_node,然后foreach该数组,将pid==id的子数组找出来存放在之前数组中,记key为son_node,即arrnode['son_node']=array(...)。
然后在前台遍历输出,
{$vo.name}
搞个 二维数组就可以啦
php无限极分类技术,自行百度。
推荐你去慕课网看看搜搜你会有很大的收获!!!
求给分!!!
我不能给你代码,但我可以给你指条路!
先建立个获取数据并将其转换成树型结构的递归函数,这个函数可以放到公众目录的函数文件中
function getTree($data,$pid){ if (!is_array($data) || empty($data) ) return false; $tree = array(); foreach ($data as $k => $v) { if ($v['pid'] == $pid) { //当相等时,说明此数组为上个数组的子目录 $v['pid'] = getTree($data,$v['id']);//将子数组的内容遍历后赋给上级数组的pid键,html页面上循环时用到此内容 $tree[] = $v; unset($data[$k]); //删除遍历过的数组数据 } } return $tree;}
在控制器里建个方法,调用数据,并传到函数里
public function showMenu(){ $m = M('cn_menu')->field(true)->select(); $d = getTree($m,0); $this->assign('menu',$d);}
HTML页面显示内容,
<div class="sidebar"> <input type="hidden" value="{:U('SystemFunc/index')}" id="urlAjax"> <ul class="nav" id="nav" > <volist name ="menu" id="vo"> <li class="nav-li"> <a href="###" id="aaa">{$vo.name} <span class="caret"></span></a> <ul class="menu"> <volist name="vo['pid']" name="vi"> <li class="menu-li"><a target="main" href="{:U('SystemFunc/listMenu')}">{$vi.name}</a></li> </volist> </ul> </li> </volist> </ul> </div>
整体原理就是,通过递归函数循环遍历多维数组,生成有对应关系的树型数组,代码全手写,有部分参考别人的,刚好我也在用这块的内容,给你看看

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











In PHP, password_hash and password_verify functions should be used to implement secure password hashing, and MD5 or SHA1 should not be used. 1) password_hash generates a hash containing salt values to enhance security. 2) Password_verify verify password and ensure security by comparing hash values. 3) MD5 and SHA1 are vulnerable and lack salt values, and are not suitable for modern password security.

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values and handle functions that may return null values.

PHP and Python have their own advantages and disadvantages, and the choice depends on project needs and personal preferences. 1.PHP is suitable for rapid development and maintenance of large-scale web applications. 2. Python dominates the field of data science and machine learning.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.
