【问题标题】:CodeIgniter menu with subitems from a single DB tableCodeIgniter 菜单包含来自单个 DB 表的子项
【发布时间】:2014-07-08 22:58:16
【问题描述】:

刚刚进入整个 MVC 开发风格。

使用 CI,我想我初步了解了控制器、模型和视图。但是,我遇到了一个以“我自己”的编码方式对我来说很容易的问题。

我有一个单独的数据库表来驱动动态菜单。设计是:

样本数据为:

无论如何,在我的脑海中,逻辑是:

  1. 选择 * 其中 active=1,然后
  2. 如果行的 parent_id==0 检查检索到的数据集中的行 当前行的parent_id==id
  3. 如果找不到,则生成<li class="no_subs"></li>元素
  4. 如果找到,生成<li class="subs">元素,打开新的<ul>
  5. 为所有匹配的项目生成<li></li>,关闭<ul>,关闭 “潜艇”<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>

到目前为止,我所能做的就是生成顶级菜单。 任何想法如何解决这个问题?

谢谢,

【问题讨论】:

  • 我会亲自将查询数据传递到某种菜单类中,并使用公共方法来测试菜单项是否具有Children()。这比您想象的要容易,但是我没有时间写出一堆类和示例,抱歉:/

标签: php database codeigniter dynamic menu


【解决方案1】:

您可以加入同一张桌子两次以实现您的目标

  1. 抓取parent_id == 0active == 1 所在的数据,这样您将获得唯一的菜单标题。
  2. 将数据与id == parent_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>';
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2011-05-19
    • 2019-09-14
    • 2014-04-13
    • 2023-03-21
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多