0

ここにあるすべての質問に目を通しましたが、この質問に対する答えが見つかりません。

それは簡単な答えだと確信しています。

PHPファイルであり、各ページに含まれているナビゲーションメニューがあります。

次を使用してクラスを追加しactiveます(実際にはクラスを現在と呼んでいます)。

<a class="menu-nav <?php if (basename($_SERVER["REQUEST_URI"]) == '/past-events/index.php') echo "current";?>" href="http://website.com.au/past-events">PAST EVENTS</a>

他のすべてのページはルート ディレクトリにあるため、これは正常に機能します (実際には、私が使用している他のページでは使用していますbasename($_SERVER["SCRIPT_NAME"] ) が、上記のページでは、'past-events' ディレクトリにあるため、機能していません。

私が試してみました:

<a class="menu-nav <?php if (basename($_SERVER["REQUEST_URI"]) == '/past-events/') echo "current";?>" href="http://website.com.au/past-events">PAST EVENTS</a>

しかし、役に立たない。

コードは「includes」というフォルダーにあるnav.phpというファイルにあり、phpインクルードを使用してそれを必要とする各ファイルに取り込まれることに言及する必要があります

ここで私が間違っていることを誰かが見ることができますか?

乾杯、アル

4

5 に答える 5

1

explode()の代わりに使用できますbasename()

分解関数のドキュメント: http://nl3.php.net/manual/en/function.explode.php

例:

// Remove the two consecutive slashes and everything preceding them.
$uri = preg_replace(/.*(\/\/)/, '', $SERVER["REQUEST_URI"]);

// Explode each part of the uri in its own array position.
$uri_parts = $explode('/', $uri);

// The count of how many parts you got back.
$uri_parts_count = count($uri_parts);

// The index before the last one is the containing folder.
$uri_folder = $uri_parts[$uri_parts_count-1];

// The last index is the file that was requested.
$uri_file = $uri_parts[$uri_parts_count];

別のオプションは、使用している PHP バージョンに応じて__DIR__orを使用することです。dirname(__FILE__)これら 2 つの方法のいずれかで、PHP によって実行されるファイルが存在するフォルダー名が返されます。

実装は上記と似ていますが、唯一の違いは、どの URI が要求されたかではなく、アクセスされたファイルを把握しようとしていることです (より良い方法でより安全です)。

これで少しはすっきりしたと思います。

于 2014-01-10T13:29:41.040 に答える
0

私を助けようとするあなたの時間と努力に感謝します。

私は最終的に追加しました:

<?php print $_SERVER["REQUEST_URI"]; ?>

ページ /past-events/index.php に移動すると、「/past-events/」が出力されていることがわかりました

だから私がする必要があったのは、 basename() を取り除くことだけで、うまくいきました:

<a class="menu-nav <?php if ($_SERVER["REQUEST_URI"] == "/past-events/") echo "current";?>" href="http://website.com/past-events">PAST EVENTS</a>

これはもちろん、このディレクトリ内のすべてのファイルが class="current" になることを意味しますが、これは私の設計にぴったりです。

繰り返しますが、私を助けてくれてありがとう。乾杯、アル。

于 2014-01-10T14:31:24.080 に答える
0

より一般的なアプローチを採用することをお勧めします。uri を取得してから使用してみてくださいexplode

あなたのURLwww.abc.com/blah1/blah2/page.php

それで$_SERVER["REQUEST_URI"] = "www.abc.com/blah1/blah2/page.php"

ですので、(よくご理解の上)

explodeに基づいて uriを作成できる/ため、すべての URL 部分を一般的な形式で比較できます。

$my_url = $_SERVER["REQUEST_URI"];
$url_pieces = explode("/", $my_url);
$len = count($url_pieces);


echo $url_pieces[0]; // it has `www.abc.com`
echo $url_pieces[1]; // it has `blah1`
.
.
.
echo $url_pieces[$len-1]; /* this has page name */

を比較したい場合は、最後の部分を使用して比較してください!!!

したがって、index.php の場合、次のように記述できます。

if($url_pieces[$len-1] == "index.php") echo "current"

過去のイベントフォルダ内のその他すべて

if($url_pieces[$len-1] != "index.php" && $url_pieces[$len-2] == "past-events" ) echo "current"

編集

完全な URL を取得するには、以下のコードを使用できます (タグを削除したり、http/https プロトコルを気にしたりする必要はありません)。

$url = "http" . (($_SERVER['SERVER_PORT']==443) ? "s://" : "://") . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
于 2014-01-10T13:30:37.220 に答える
0

したがって、基本的には関数を変数にして、実際のナビゲーション バーなどで使用するだけです。これを header.php ファイルの先頭に含めるか、includes から呼び出します

$activePageClean = basename($_SERVER['PHP_SELF'], ".php");
$activePage = htmlspecialchars($activePageClean);

次に、ナビゲーション メニューで次のように移動します。

<div class="collapse navbar-collapse justify-content-end" id="navbarSupportedContent">
    <ul class="navbar-nav justify-content-end">
      <li class="nav-item <?= ($activePage == 'index') ? 'active':''; ?>">
        <a class="nav-link" href="/">Home</a>
      </li>

など、より多くのリスト項目があります。PHP 7+ で完全に動作します。次に、必要に応じて、セッションまたは選択したものに基づいて、より多くのナビゲーション アイテムをレンダリングできます。しかし、あなたはその考えを理解します。$activePage == '?' を置き換えるだけです。チェックしたいものに & 結果が true の場合は、アクティブなクラスまたは選択したクラス名を追加します

<?php if (isset($_SESSION['id'])) {
    echo ' <li class="nav-item '?><?= ($activePage == 'add-contact') ? 'active':''; ?><?php echo '">
    <a class="nav-link" href="/add-contact.php">Add Contacts</a>
  </li>
  <li class="nav-item '?><?= ($activePage == 'create-csv') ? 'active':''; ?><?php echo '">
  <a class="nav-link" href="/create-csv.php">Create CSV</a>
  </li>
  <li class="nav-item '?><?= ($activePage == 'search-database') ? 'active':''; ?><?php echo '">
  <a class="nav-link" href="/search-database.php">Search Database</a>
  </li> ';
   }
  ?>
于 2019-05-13T03:54:56.897 に答える