带代码点火器的活动菜单选项卡


Active menu tabs with codeigniter

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

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

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

我通常会在选项卡中添加php来检查它们对应的URL段,然后我会更改活动选项卡的样式。在Codeigniter中,我应该实现一个助手吗?我可以在选项卡中轻松使用什么功能?

正如您在上一段中所说,我只需要检查相应的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帮助程序。如果它们不匹配,将使用<li>元素的默认CSS。

我遇到了同样的问题。这是我的解决方案:

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

$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>

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

感谢

选项卡样式不是PHP问题,而是CSS问题。查找hover以了解颜色变化。它们通常是用ul完成的,但并不总是如此。你可以在这里学到很多。

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

(未来的读者,请阅读评论)

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

   $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>

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