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>
当然,您可以基于控制器和方法创建更复杂的导航菜单。