我的网站的导航位于页面顶部,包含在我的所有页面中。看起来像:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>My Title</title>
</head>
<body>
<?
$selected = 'home';
include('include/header.php');
?>
header.php
文件基本上显示了每个页面上标准的顶部导航。上面是header.php
文件继承的变量,用于“告诉”用户所在的头文件,以便可以选择相应的导航选项卡。
我的header.php
文件类似于:
<div id="main_navigation">
<ul id="nav">
<li><a href="#">HOME</a></li>
<li><a href="#">ABOUT US</a></li>
<li><a href="#">PURCHASE</a></li>
<li><a href="#">SOMETHING ELSE</a></li>
</ul>
</div>
我想要做的是将HTML添加到<li>
标记以显示将突出显示导航标签的css类。除了投掷这个丑陋的snippit之外,还有更有说服力的方法吗?
<div id="main_navigation">
<ul id="nav">
<li <? if($selected == 'home'){ print "class = \"select"\"; ?> ><a href="#">HOME</a></li>
<li <? if($selected == 'about'){ print "class = \"select"\"; ?> ><a href="#">ABOUT US</a></li>
<li <? if($selected == 'purchase'){ print "class = \"select"\"; ?> ><a href="#">PURCHASE</a></li>
<li <? if($selected == 'something'){ print "class = \"select"\"; ?> ><a href="#">SOMETHING ELSE</a></li>
</ul>
</div>
答案 0 :(得分:1)
这似乎是相当标准的,但你可以使用三元运算符更加简洁地做到这一点:
<li class="<?php echo ($selected == 'home') ? 'select' : ''; ?>">
但我认为这主要是风格问题。更好的方法是在html之外处理这些位。然后将4个变量传递给header.php,然后像这样编写列表:
<li class="<?php echo $home_class; ?>"> . . .
<li class="<?php echo $about_class; ?>"> . . .
等
通过这种方式,你可以保留所有逻辑。在这种情况下,最大的收获可能是您可以将逻辑转换为类似于以下的函数:
function get_menu_item_class($menu_item) {
if (/* whatever logic to determine if it's selected based on passed parameter */) {
return 'select';
}
return '';
}
然后你可以很容易地填充变量:
$home_class = get_menu_item_class('home');
$about_class = get_menu_item_class('about');
等
或者可能完全放弃变量并直接调用函数:
<li class="<?php echo get_menu_item_class('home'); ?>"> ...
答案 1 :(得分:0)
使用循环和数组:
$nav = array( '#' => 'HOME');
echo '<ul id="nav">';
foreach( $nav as $href => $text) {
$class = ($selected == 'home') ? ' class="select"' : '';
echo '<li' . $class . '><a href="' . $href . '">' . $text . '</a></li>';
}
echo '</ul>';
如果所有href
值确实都是#
,那么您可以在数组的定义中省略它们:
$nav = array( 'HOME', 'ABOUT US');
然后,省略将其包含在循环中:
echo '<li' . $class . '><a href="#">' . $text . '</a></li>';