【问题标题】:Active menu tabs with codeigniter带有 codeigniter 的活动菜单选项卡
【发布时间】:2025-12-23 01:10:06
【问题描述】:

Codeigniter中可以使用哪种方法来实现活动菜单选项卡?

例如我有一个用户菜单Profile Friends Messages Logout

当我在配置文件控制器中时,URL 是 domain.com/profile/some_function Profile 选项卡应该通过更改背景颜色来激活。

我通常会将 php 添加到选项卡以检查其对应的 URL 段,并且我会更改活动选项卡的样式。在 Codeigniter 中我应该实现一个助手吗?我可以在标签中轻松使用哪些功能?

【问题讨论】:

    标签: php css codeigniter


    【解决方案1】:

    我有同样的问题。这是我的解决方案:

    在每个控制器中,在函数中添加一个参数

    $data['activeTab'] == "profile";
    $this->load->view('viewname',$data); (Profile controller)
    
    $data['activeTab'] == "friends";
    $this->load->view('viewname',$data); (Friends controller)
    
    $data['activeTab'] == "messages";
    $this->load->view('viewname',$data); (Messages controller)
    

    在导航栏所在的视图中,添加如下代码:

    <ul id="menu">
                        <li class="<?php echo ($activeTab == "profile") ? "active" : ""; ?>"><a href="<?php echo base_url(); ?>profile">PROFILE</a></li>
                        <li class="<?php echo ($activeTab == "friends") ? "active" : ""; ?>"><a href="<?php echo base_url(); ?>friends">FRIENDS</a></li>
                        <li class="<?php echo ($activeTab == "messages") ? "active" : ""; ?>"><a href="<?php echo base_url(); ?>messages">MESSAGES</a></li>
        </ul>
    

    这应该可以解决问题。 如果问题仍然存在,请告诉我。

    谢谢

    【讨论】:

      【解决方案2】:

      有一个简单的例子如何创建基于控制器的活动菜单。

         $ci =& get_instance();
      
         // get the current controller
         $controller = $ci->router->fetch_class(); 
      
         // you can generate this array dynamically
         $resources = array(0 => array("controller" => "home", "title" => "Home"),
                            1 => array("controller" => "products", "title" => "Products"),
                            2 => array("controller" => "services", "title" => "Services"),
               );
         <ul>
         <?php foreach($resources as $resource): ?>
         <?php $class = ( $controller == strtolower($resource["controller"]) ? 'active' : 'inactive' ); ?>
            <li><a href="<?php echo site_url($resource["controller"]) ?>" class="<?php echo $class; ?>"><?php echo $resource["title"] ?></a></li>
         <?php endforeach; ?>
         </ul>
      

      当然,您可以基于控制器和方法创建更复杂的导航菜单。

      【讨论】:

        【解决方案3】:

        正如您在上一段中所说,我将只检查相应的 URI 段并基于此更改选项卡的样式。

        假设您使用foreach 语句从数据库生成菜单:

        <ul>
        <?php foreach($menu_items as $menu_item):?>   
            <li<?php if($this->uri->segment(2) == url_title($menu_item->name, dash, TRUE)):?> class="active"><?php else:?>><?php endif;?><a href="<?=$menu_item->url;?>"><?=$menu_item->name;?></a></li>
        <?php endforeach;?>
        </ul>
        

        我将url_title() 放入其中的原因是为了将名称设为小写,就像 URI 段一样,并注意菜单名称和/或 URI 段中可能存在的任何空格。这将需要启用 URL 帮助程序。如果它们不匹配,则将使用 &lt;li&gt; 元素的默认 CSS。

        【讨论】:

          【解决方案4】:

          标签样式不是 PHP 而是 CSS 问题。查找 hover 以了解颜色变化。它们通常使用ul 完成,但并非总是如此。你可以学到很多here

          至于列表生成,帮助器可能是一个好主意。您可能希望相同的代码可用于多个不同的控件/方法和视图,因此有一个通用的 get_menu();或 create_menu();在帮助文件中将是完美的。您可能希望将其添加到您的 MY_html_helper.php。

          (以后的读者请阅读cmets)

          【讨论】:

          • 我不同意。我说明的选项卡样式与 PHP 相关联。 (请注意此页面顶部的questions 选项卡是橙色的。我认为通过questions url 段已将youarehere 类添加到li 项中。这就是我所指的。)菜单功能是个好主意。
          • 啊。好的。我没有按照您的意图阅读您的问题。你说的很对,很抱歉。
          • 大声笑。我在您发布后编辑了我的问题以进行澄清
          最近更新 更多