进入整个MVC开发风格。
使用CI我认为我对控制器,模型和视图有了初步的认识。但是,我遇到了一个问题,这个问题对我来说很容易,而且我自己的问题很严重。编码方式。
我有一个DB表来驱动动态菜单。设计是:
样本数据为:
无论如何,我脑子里的逻辑是:
<li class="no_subs"></li>
元素<li class="subs">
元素,打开新的<ul>
<li></li>
,关闭<ul>
,关闭
&#34;潜艇&#34; <li>
因此,基于上面的示例数据,生成的html将是:
<li class="no_subs">Home</li>
<li class="no_subs">News</li>
<li class="subs">Training
<ul>
<li>Materials</li>
<li>Tests</li>
</ul>
</li>
<li class="subs">Other
<ul>
<li>Usefull links</li>
</ul>
</li>
到目前为止,我所能做的就是生成顶级菜单。 任何想法如何解决这个问题?
谢谢,
答案 0 :(得分:0)
您可以两次加入同一张桌子以实现目标
parent_id == 0
和active == 1
的位置,这样您就可以获得唯一的菜单标题。id == parent_id
所在的同一表格加入数据。所以你会得到这张表。id |名字| parent_id |活跃的|链接| as_id | as_name | as_parent_id | as_active | as_link
**这两个步骤可以在单个SQL查询中完成。
然后我认为这段代码可以帮助你...
$sub_menu_started = false;
for ($i=0; $i < count($result); $i++) {
if (empty($result[$i]['as_name'])) {
echo '<li class="no_subs">'.$result[$i]['name'].'</li>';
}
else {
if(!$sub_menu_started) {
echo '<li class="subs">'.$result[$i]['name'];
echo '<ul><li>'.$result[$i]['as_name'].'</li>';
$sub_menu_started = true;
}
else {
if ($result[$i]['id'] == $result[$i-1]['id']) {
echo '<li>'.$result[$i]['as_name'].'</li>';
if($result[$i]['id'] != $result[$i+1]['id']) {
echo '</ul></li>';
$sub_menu_started = false;
}
}
}
}
}
if ($sub_menu_started) {
echo '</ul></li>';
}