我已经建立了一个JQuery Mobile网站,现在我正在使用Yii Framework创建一个CMS。
我有一个用于菜单创建的数据库表设置,该表设置链接到另一个页面内容表。
菜单表包含: ID,标题,父级,可折叠(可折叠是一个复选框,用于确定是否为该给定菜单项创建页面,因为我不希望可折叠项目可点击,如下面的jsFiddle所示)
jsfiddle.net/gn7q6 /
从上面的jsFiddle可以看到我希望菜单如何运作。
我只是不确定如何以这种方式创建动态菜单。
答案 0 :(得分: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;
}
?>
我还没有调试它,但想法是一样的。不仅仅是这个菜单,如果在子级别菜单上重复布局结构,许多其他菜单的逻辑几乎相同