0

.currentサイトのURLと対応するページに基づいてアンカーリンクにクラスを追加するjQueryの方法があります(つまり、「概要」ページを表示している場合.currentは、ナビゲーションメニューのアンカーリンクにクラスが追加されます「about.php」に転送されます)。それは間違いなく仕事をします、そしてそれはとても簡単です、しかし私はPHPWordpressがするのと同じようにこれを達成する方法が欲しかったです。私が最終的に得たのは、型にはまらないもので、簡単に変更できないものです(以下のコード)

私の質問は:これを行う簡単な方法はありますか?私のコードでは、$nav[#]各アンカーリンクに変数を割り当てる必要があることがわかります。これは最も便利なことではありません...

HTML:

  <ul class="nav">
    <li><a href="index.php" class="<?php echo $nav1; ?>">home</a></li>
    <li><a href="publications.php" class="<?php echo $nav2; ?>">publications</a></li>
    <li><a href="research.php" class="<?php echo $nav3; ?>">research</a></li>
    <li><a href="cv.php" class="<?php echo $nav4; ?>">cv</a></li>
    <li><a href="contact.php" class="<?php echo $nav5; ?>">contact</a></li>
  </ul>

PHP:

<?php

function getUrl() {
  $url  = @( $_SERVER["HTTPS"] != 'on' ) ? 'http://'.$_SERVER["SERVER_NAME"] :  'https://'.$_SERVER["SERVER_NAME"];
  $url .= ( $_SERVER["SERVER_PORT"] !== 80 ) ? ":".$_SERVER["SERVER_PORT"] : "";
  $url .= $_SERVER["REQUEST_URI"];
  return $url;
}

$myurl = getUrl() ; // As was suggested, I could also just set $myurl = $_SERVER['PHP_SELF'] and avoid the complicated function call

$split_url = explode("/" , $myurl) ;

$page = end($split_url) ; 

$nav1 = $nav2 = $nav3 = $nav4 = $nav5 = ' ' ; 

if ( $page == "publications.php" )
    $nav2 = 'current' ; 

else if ( $page == "research.php")
    $nav3 = 'current' ; 

else if ( $page == "cv.php" )
    $nav4 = 'current' ; 

else if ( $page == 'contact.php') 
    $nav5 = 'current' ; 

?>
4

2 に答える 2

1

を見てください$_SERVER['PHP_SELF']。現在提供されているファイルのファイル名が表示されます。

ページがに一致する場合に現在のクラスを追加する関数は次のとおり$_SERVER['PHP_SELF']です。

<?php

function add_current_class($page_name) {
  if( $page_name == $_SERVER['PHP_SELF'] ) {
    return ' current';
  }
}

使用法は次のようになります。

<ul class="nav">
   <li><a href="index.php" class="<?php echo add_current_class('index.php'); ?>">home</a></li>
   <li><a href="publications.php" class="<?php echo add_current_class('publications.php'); ?>">publications</a></li>
   <li><a href="research.php" class="<?php echo add_current_class('research.php'); ?>">research</a></li>
   <li><a href="cv.php" class="<?php echo add_current_class('cv.php'); ?>">cv</a></li>
   <li><a href="contact.php" class="<?php echo add_current_class('contact.php'); ?>">contact</a></li>
 </ul>

あなたが本当にそれを特別にしたいのなら、あなたはこのようなことをすることができます。

<?php 

function display_navigation() {
  $pages = array(
    'index.php' => 'home',
    'publications.php' => 'publications',
    'research.php' => 'research',
    'cv.php' => 'cv',
    'contact.php' => 'contact'
  );

  $link = '<li><a class="%s" href="%s">%s</a></li>';

  echo '<ul class="nav">';
  foreach( $pages as $page => $text ) {
    printf($link, add_current_class($page), $page, $text);
  }
  echo '</ul>';
}
于 2012-07-18T03:08:09.110 に答える
1

これが私がお勧めするバージョンです:

<?php
    $selectedClass = "current";
    $nav1 = $nav2 = $nav3 = $nav4 = $nav5 = ' ' ; 
?>

<ul class="nav">
   <li><a href="index.php" class="<?=$nav1?> <?=(($_SERVER['PHP_SELF'] == "index.php") ? $selectedClass : '')?>">home</a></li>
   <li><a href="publications.php" class="<?=$nav2?> <?=(($_SERVER['PHP_SELF'] == "publications.php") ? $selectedClass : '')?>">publications</a></li>
   <li><a href="research.php" class="<?=$nav3?> <?=(($_SERVER['PHP_SELF'] == "research.php") ? $selectedClass : '')?>">research</a></li>
   <li><a href="cv.php" class="<?=$nav4?> <?=(($_SERVER['PHP_SELF'] == "cv.php") ? $selectedClass : '')?>">cv</a></li>
   <li><a href="contact.php" class="<?=$nav5?> <?=(($_SERVER['PHP_SELF'] == "contact.php") ? $selectedClass : '')?>">contact</a></li>
 </ul>

この方法は、Baylor Raeの答えとは対照的に、いくつかのことを達成します。

  • 条件文が含まれているので、htmlを直接読むことで、ここで何が起こっているのかが明確になります。
  • 変数を変更するだけで、「選択した」クラスを非常に簡単に定義および変更できます。
  • 各リンクは、「選択された」クラスがあるかどうかに関係なく、独自の特定のクラス($ nav1、$ nav2など)を持つことができます。
于 2012-07-18T03:38:56.080 に答える