ホームページ > バックエンド開発 > PHPチュートリアル > thinkphp のメニュートラバーサルの問題について

thinkphp のメニュートラバーサルの問題について

WBOY
リリース: 2016-06-23 13:25:48
オリジナル
1122 人が閲覧しました

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 に属しますが、どのようにコードを実装するのでしょうか。データを走査し、2 つの for ループを使用してネストします。最初の A for ループには pid=0

追記: アイデアがあれば、文句を言わないでください。何か間違っている!

まずバックグラウンドで pid==0 を持つノードを見つけて配列 arr_node を形成し、次に配列を foreach し、pid==id を持つサブ配列を見つけて前の配列に格納し、キーをson_node として記録します。つまり、arrnode['son_node ']=array(...) です。

次に、フォアグラウンドで出力をスキャンします。

.id}">{$vo.name} name = "vo.son_node" item = "son" )}"&g t;{$son.name}


二次元配列を作成するだけです

Baidu によるセルフガイドの PHP Infinitus 分類テクノロジ。
MOOC.com にアクセスして Soso をチェックすることをお勧めします。 ! !
ポイントをください! ! !
コードは教えられませんが、方法は教えます。

まず、データを取得してツリー構造に変換する再帰関数を作成します。この関数は、パブリック ディレクトリの関数ファイルに配置できます

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>
ログイン後にコピー


全体的な原理は、再帰関数を通じて多次元配列をループし、対応するツリー配列を生成することです。コードはすべて手書きであり、その一部は以下を参照しています。たまたま私もこのコンテンツを使用しているので、お見せしましょう

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート