1

我已经建立了一个 JQuery Mobile 站点,现在我正在使用 Yii 框架创建一个 CMS。

我有一个用于菜单创建的数据库表设置,该表链接到页面内容的另一个表。

菜单表有:ID、Title、Parent、Collapsible(collapsible 是一个复选框,用于确定是否为给定菜单项创建页面,因为我不希望可折叠项可点击,正如您从 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 回答