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>

私がやりたいのは、<li>タグにHTMLを追加して、ナビゲーションタブを強調表示する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 に答える