带有codeigniter的活动菜单选项卡

时间:2011-06-28 18:47:06

标签: php css codeigniter

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

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

当我在配置文件控制器中时,网址为domain.com/profile/some_function例如,通过更改背景颜色,Profile标签应处于活动状态。

我通常会在选项卡中添加php来检查相应的URL段,我会更改活动选项卡的样式。在Codeigniter中我应该实现帮助吗?我可以在标签中轻松使用哪些功能?

4 个答案:

答案 0 :(得分:4)

正如您在上一段中所述,我只会检查相应的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。

答案 1 :(得分:3)

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

在每个控制器中,在函数

中添加一个参数
$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 :(得分:1)

选项卡样式不是PHP而是CSS问题。查找hover颜色更改。它们通常使用ul来完成,但并非总是如此。你可以学到很多东西here

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

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

答案 3 :(得分:1)

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

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

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