本文目录一览:
- 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" 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;
}
}
这是一个递归获取的分类,就这个函数应该可以满足你的需求