0

私はこれを回避する方法を考えようとして頭を悩ませてきました。サイトのすべてのドキュメントで呼び出されるヘッダー ファイルがあり、設定値が与えられたアンカーを各ドキュメントから動的に選択する必要があります。次のように:

function headur($page) {echo'...
    <ul>
      <li><a'.$h.' href="/">Home</a>
      <li><a'.$s.' href="/services">Services</a>
      <li><a'.$p.' href="/portfolio">Portfolio</a>
      <li><a'.$a.' href="/about">About</a>
      <li><a'.$c.' href="/contact">Contact</a>
    </ul>...
  ;}

次に、私のドキュメントで呼び出しheadur($a);、その引数値から--$aそれをセレクターとして使用して、一致する内部文字列に特定の値を与えます- class="selected"つまり、この特定の関数呼び出しは、次のようなhtmlを出力します:

    <ul>
      <li><a href="/">Home</a>
      <li><a href="/services">Services</a>
      <li><a href="/portfolio">Portfolio</a>
      <li><a class="selected" href="/about">About</a>
      <li><a href="/contact">Contact</a>
    </ul>

全体的なポイントは、関数を呼び出すドキュメントから動的に選択されるということです。すべてを一致させるために古い if ステートメントを手動で作成する必要はありません。つまりif ($page == $a) {$a = ' class="selected"';}、私がやってきたことです。私はそれ.addClass();が外部ファイルで行うことと同等のphpだと思います。

前もって感謝します。

4

4 に答える 4

1

クラス定義を配列に保存し、インデックスで検索するだけです。配列に数値キーを使用するのが最も簡単ですが、コードを読み返す際にはあまり説明的ではありません。数字キーを使用するには、次のようにします。

$pages = array("", "services", "portfolio", "about", "contact");
$where = array_search($a, $pages); // $a is the param passed to the function
$pages[$where] .= "\" class=\"selected\"";

私はあなたのページを順番に作成したので、$h は $pages[0] に置き換えられ、$s は $pages[1] に置き換えられます。配列内のテキストキーを使用して簡単にするコードを書いてほしい場合は、それもできますが、個人的には、余分なコードがなくてもうまくいくと思います.

于 2012-11-21T00:23:33.290 に答える
0

さて、あなたはこのようなことをすることができます:

<ul>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/' ? 'selected' : '' ?>" href="/">Home</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/services' ? 'selected' : '' ?>" href="/services">Services</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/portfolio' ? 'selected' : '' ?>" href="/portfolio">Portfolio</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/about' ? 'selected' : '' ?>"href="/about">About</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/contact' ? 'selected' : '' ?>" href="/contact">Contact</a>
</ul>
于 2012-11-21T00:20:54.313 に答える
0

配列を作成し、配列を反復処理することは非常に一般的です。

$linkMenu = array(
    '/' => 'Home',
    '/services' => 'Services',
    '/portfolio' => 'Portfolio',
    '/about' => 'About',
    '/contact' => 'Contact',
);

function linkList($links, $page=null) {
    echo '<ul>';
    foreach($links as $url=>$name) {
        $selected = ($url == $page) ? " class='selected' " : '';
        echo "<li><a $selected href='$url'>$name</a></li>\n";
    }
    echo '</ul>';
}

これで、ホームページのリンク メニューを次のように作成できます。

linkList($linkMenu, '/');
于 2012-11-21T00:26:07.693 に答える
0

解決策として、テンプレートを DOMDocument に読み込み、リンクを現在の URL と一致するアクティブとして設定することが考えられます。

$dom = new DOMDocument();
$dom->loadXML('<ul><li><a href="/yourLink">Your Link</a></li></ul>');

$xpath = new DOMXPath($dom);
$url = $_SERVER['REQUEST_URI'];

foreach ($xpath->query(sprintf('//a[@href="%s"]', $uri)) as $current) {
    $current->setAttribute('class', 'selected');
} 

echo $dom->saveXML();

コードはテストされていません。しかし、それはあなたにアイデアを与えるはずです...この方法では、PHPコードをまったく使用せずにテンプレートファイルを作成できます...

于 2012-11-21T00:26:41.633 に答える