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

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

WBOY
WBOYオリジナル
2016-06-23 13:25:481123ブラウズ

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=080d05a437f105744f705ba6f06f48cb1 が表示されます。システム メニュー f092556db850dedfd562431d5552770054bdf357c58b8a65c66d7c19c8e4d1145db79b134e9f6b82c0b36e0489ee08ed 2 番目の for ループでは pid=1,2,3,...803745ba1045765bf0a527d90b41d02d が表示されます。 2f8a736b9e029a3be05f18b9daba14fdメニュー リスト5db79b134e9f6b82c0b36e0489ee08edbed06894275b65c1ab86501b08a632eb 追記: アイデアがあれば、文句を言わないでください。何か間違っている!

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

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

039ebd9ad89b4d750a28520993c09ce4 .id}">{$vo.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>


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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。