Codeigniter中可以使用哪种方法来实现活动菜单选项卡?
例如,我有一个用户菜单Profile Friends Messages Logout
当我在配置文件控制器中时,网址为domain.com/profile/some_function
例如,通过更改背景颜色,Profile
标签应处于活动状态。
我通常会在选项卡中添加php来检查相应的URL段,我会更改活动选项卡的样式。在Codeigniter中我应该实现帮助吗?我可以在标签中轻松使用哪些功能?
答案 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>
当然,您可以基于控制器和方法创建更复杂的导航菜单。