1

JQuery Mobile サイトをセットアップし、Yii フレームワークを使用して CMS を作成しています。

ページコンテンツ用の別のテーブルにリンクされているメニュー作成用のデータベーステーブルをセットアップしました。

メニューテーブルには次のものがあります:ID、タイトル、親、折りたたみ可能(折りたたみ可能は、jsFiddleからわかるように折りたたみ可能なアイテムをクリック可能にしたくないため、その特定のメニューアイテムのページを作成するかどうかを決定するために使用されるチェックボックスです下)

jsfiddle.net/gn7q6/

上記の jsFiddle から、メニューをどのように機能させたいかがわかります。

この方法で動的メニューを作成する方法がわかりません。

4

1 に答える 1

0

MenuTable のモデル メニューをセットアップし、関係を定義したと仮定します。

public function relations()
{
    return array(
        'childMenuItems' => array(self::HAS_MANY, 'Menu', 'parent_id'),
    );
}

上位の親メニューの取得

// the parent menu would not have parent menu id (0, empty or IS NULL, my case was using comapare with 0 as default FK column value)
$topMenus = Menu::model()->findAllByAttributes(array('parent_id' => '0'));

メニューをレンダリングするには

<ul data-role="listview" data-inset="true">
<?php 
$render = "";
echo renderMenuItems(topMenus, &$render);
}?>
</ul>

再帰的な n サブメニューのレンダリングを処理する関数

<?php 
function renderMenuItems($parentItem, &$render){
        if(count($parentItem->childMenuItems) > 0){
            $render .= '<li class="custom-li">
                    <div data-role="collapsible" class="custom-collapsible2" data-iconpos="right">
                        <h3><?php echo $parentItem->title ?></h3>
                        <ul data-role="listview">';
                        foreach($parentItem->childMenuItems as $item){
                            $render .= renderMenuItems($parentItem,$render);
                        }

            $render .= '</ul>
                    </div>
                </li>';         
        }
        else{
            $render .= '<li><a href="<?php echo $menu->actionUrl ?>"><?php echo $menu->title ?></a></li>';
        }
        return $render;
    }
    ?>

まだデバッグしていませんが、考え方は同じです。このメニューだけでなく、サブレベル メニューにレイアウト構造の繰り返しがある場合、他の多くのメニューのロジックはほぼ同じになります。

于 2013-07-31T14:51:41.947 に答える