1

我的网站在页面顶部有导航,包含在我的所有页面中。看起来像:

<!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 类,该类将突出显示导航选项卡。除了抛出这个丑陋的片段之外,还有没有更雄辩的方法来做到这一点:

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

2 回答 2

1

这似乎相当标准,但您可以使用三元运算符更简洁地做到这一点:

<li class="<?php echo ($selected == 'home') ? 'select' : ''; ?>">

但我认为这主要是风格问题。更好的是在 html 之外处理这些位。然后将 4 个变量传递给 header.php,然后像这样编写列表:

<li class="<?php echo $home_class; ?>"> . . .
<li class="<?php echo $about_class; ?>"> . . .

等等

通过这种方式,您可以将所有逻辑排除在 html 之外。在这种情况下,最大的收获可能是您可以将逻辑转换为如下所示的函数:

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'); ?>"> ...
于 2012-07-19T15:29:00.747 回答
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>';
于 2012-07-19T15:23:38.753 回答