Php CI活动导航项
在站点导航栏中,我有一些逻辑来确定用户当前查看的页面,并为该菜单项提供一个Php CI活动导航项,php,codeigniter,Php,Codeigniter,在站点导航栏中,我有一些逻辑来确定用户当前查看的页面,并为该菜单项提供一个.active类 我提出的代码确实有效,尽管感觉不是很优雅。你能想出一个更好的办法吗?如何将逻辑移出视图并移入控制器?我怎样才能停止重复我自己 控制器: <?php class Pages extends CI_Controller { public function view ($page = 'home') { if (!file_exists('application/views/
.active
类
我提出的代码确实有效,尽管感觉不是很优雅。你能想出一个更好的办法吗?如何将逻辑移出视图并移入控制器?我怎样才能停止重复我自己
控制器:
<?php
class Pages extends CI_Controller {
public function view ($page = 'home') {
if (!file_exists('application/views/pages/'.$page.'.php'))
show_404();
$data['active'] = $page;
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
}
?>
<ul class="nav">
<li class="<?php echo($active=='home')?'active':''; ?>"><a href="./">blog</a></li>
<li class="<?php echo($active=='about')?'active':''; ?>"><a href="about">about</a></li>
<li class="<?php echo($active=='projects')?'active':''; ?>"><a href="projects">projects</a></li>
<li class="<?php echo($active=='lab')?'active':''; ?>"><a href="lab">lab</a></li>
<li class="<?php echo($active=='contact')?'active':''; ?>"><a href="contact">contact</a></li>
</ul>
视图:
<?php
class Pages extends CI_Controller {
public function view ($page = 'home') {
if (!file_exists('application/views/pages/'.$page.'.php'))
show_404();
$data['active'] = $page;
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
}
?>
<ul class="nav">
<li class="<?php echo($active=='home')?'active':''; ?>"><a href="./">blog</a></li>
<li class="<?php echo($active=='about')?'active':''; ?>"><a href="about">about</a></li>
<li class="<?php echo($active=='projects')?'active':''; ?>"><a href="projects">projects</a></li>
<li class="<?php echo($active=='lab')?'active':''; ?>"><a href="lab">lab</a></li>
<li class="<?php echo($active=='contact')?'active':''; ?>"><a href="contact">contact</a></li>
</ul>
也许更优雅些
function is_active($item) {
return strpos(uri_string(), $item)!==FALSE ? 'active':'';
}
<li class="<?=is_active('blog')?>"><a href="./">blog</a></li>
功能处于活动状态($item){
返回strpos(uri_string(),$item)!==FALSE?'active':'';
}
你可以试试CSS。例如,如果您在“关于”页面上,其正文标签将是
。您的CSS:
#about .nav li.about, #contact .nav li.contact, /* etc */ { color: red; }
这意味着每个.nav li都有一个与其相关的类名(在本例中为“about”)。CSS文件中会有一些重复(虽然在属性声明之前只是用逗号分隔所有li类名的问题),但是视图会保持干净。这应该是打开的。我是否要创建一个关于CR的新问题?或者有人会提出这个问题吗?就个人而言,你得到的不是出价交易。可能还有更“优雅”的方法(在PHP中切换到特定变量?onload
Javascript?)。另一种方法是动态构建菜单列表,并在该列表中设置值。半打……我不会用JS来做这个。也许你是对的;毕竟它可能没那么难看。使用JS有它的优点和缺点。我建议的一件事是扔掉无用的三元组;只要
,如果更具描述性,就没有理由回显空白和。另外,您可以使用PHP模板函数,正如我用Handlebar演示的那样(这只是演示您可以使用专门构建的函数,不建议您为此使用Handlebar)。