0

私はメニューバーにこのdivを持っています、ここで私が欲しいのは:

<div class="menu_nav" style="float:left; margin-bottom: 0px; padding:0px; font-family:verdana; font-size:16px;width: 100%; background-color: rgb(37,198,255);">
        <ul>
          <li> 
            <div class="menu1a">
              <a class="menu3a" href="<?=$HOME_DIR?>/index.php">
                 <span class="menu2a">Home</span>
              </a>
            </div>
      </li>
      <li>
        <div class="menu1">
          <a class="menu3" href="<?=$PUBLIC_DIR?>/about.php">
             <span class="menu2">About</span>
          </a>
        </div>
      </li>
      <li>
        <div class="menu1">
          <a class="menu3" href="<?=$PUBLIC_DIR?>/myaccount.php">
             <span class="menu2">MyAccount</span>
          </a>
        </div>
      </li>         



          <li style="color:black;font-family:verdana;font-size:13px;float:right;padding-top:5px;">
               <?php
               if(isset($_SESSION['user']) && $_SESSION['user']!="")
                  {
                     echo "<div style='float:left;'>Hello, ".$_SESSION['name']."</div>  <div id='logout' style='float:left;margin-left:20px;' > 
                     Log Out</div>";
                   } 
               ?>
           </li>   
        </ul>
      </div>

URLにあるものに応じてメニューボタンのクラスを変更したい:

私は次のように試しました:

<?php
$url=$_SERVER['REQUEST_URI'];
echo "$url";
if($url=="/signed/public/about.php")
{

}
else if($url="/signed/public/myaccount.php"){

}
else
?>

しかし、それらのクラスを変更する方法がわかりません。つまり、about.phpページにいる場合は、aboutボタンを強調表示する必要があります。つまり、そのボタンは、クラスmenu1a、menu2a、menu3aを同様に取得する必要があります。 myaccount.phpでは、このボタンでこれらのクラスを取得する必要があります。それ以外の場合は、ホームボタンを強調表示する必要があります...

このできるだけ早くphpコードを書くように私を導いてください...事前に感謝します...。

4

3 に答える 3

3

まず、選択したアイテムのCSSを作成します。

.selected{background:orange;}

次に、強調表示を行うための単純なPHP関数を作成します。

function currentNav($url){
 if($_SERVER['REQUEST_URI']==$url){
  return 'selected';
 }
}

それぞれにその関数を配置します<li>

  <li>
    <div class="menu1">
      <a class="menu3" href="<?=$PUBLIC_DIR?>/myaccount.php">
         <span class="menu2 <?=currentNav('/signed/public/about.php')?>">MyAccount</span>
      </a>
    </div>
  </li> 

あなたはそれを変更することができます。しかし、あなたは要点を理解します。


更新:既存の方法を使用するには...

まず、URLの配列を作成します。

 <?php
 $urls=array(
   'home'    => '/signed/public/index.php',
   'about'   => '/signed/public/about.php',
   'account' => '/signed/public/myaccount.php'
 );

次に、現在のナビゲーション関数を作成します。

<?php
function cn($url){
 global $urls;
  return ($_SERVER['REQUEST_URI']==$urls[$url])?'a':'';
}
?>

そして、各リストに:

  <li>
    <div class="menu1<?=cn('about')?>">
      <a class="menu3<?=cn('about')?>" href="<?=$PUBLIC_DIR?>/myaccount.php">
         <span class="menu2<?=cn('about')?>">MyAccount</span>
      </a>
    </div>
  </li> 

したがって、リスト全体は次のようになります。

    <ul>
      <li> 
        <div class="menu1<?=cn('home')?>">
          <a class="menu3<?=cn('home')?>" href="<?=$HOME_DIR?>/index.php">
             <span class="menu2<?=cn('home')?>">Home</span>
          </a>
        </div>
  </li>
  <li>
    <div class="menu1<?=cn('about')?>">
      <a class="menu3<?=cn('about')?>" href="<?=$PUBLIC_DIR?>/about.php">
         <span class="menu2<?=cn('about')?>">About</span>
      </a>
    </div>
  </li>
  <li>
    <div class="menu1<?=cn('account')?>">
      <a class="menu3<?=cn('account')?>" href="<?=$PUBLIC_DIR?>/myaccount.php">
         <span class="menu2<?=cn('account')?>">MyAccount</span>
      </a>
    </div>
  </li> 
于 2012-07-21T08:35:56.597 に答える
0

Webサイトに含まれるすべてのページの配列を作成します。例:

$all_urls = array('home.php', 'about.php', 'contact.php');

次に、$url変数を使用して、in_array()関数を使用して配列$urlに存在するかどうかを確認できます。$all_urls

  <div <?php if(in_array($url, $all_urls)) { echo 'class="menu1a"'; } else {echo 'class="menu1"'; } ?>>
              <a <?php if(in_array($url, $all_urls)) { echo 'class="menu3a"'; } else {echo 'class="menu3"'; } ?> href="<?=$HOME_DIR?>/index.php">
                 <span <?php if(in_array($url, $all_urls)) { echo 'class="menu2a"'; } else {echo 'class="menu2"'; } ?>>Home</span>
              </a>
            </div> 
于 2012-07-21T08:35:29.170 に答える
0

このようなことを行う最良の方法は、PHP TAL(http://phptal.org/)のようなテンプレートエンジンを使用することです。

これで開始できますが、テストサーバーが手元にないため、エラーが発生する可能性があります。

PHP:

 class Menu
    { 
      public $name;
      public $isActive;
      public $url;
      __construct($name, $url){
        $this->name = $name;
        $this->url = $url;
        $this->isActive = $url == $_SERVER['REQUEST_URI'];
      }
    }

    $template = new PHPTAL('my_template_file.xhtml');
    $template->menuItems = array(
      new Menu('foo', '/foo.html'),
      new Menu('bar', '/bar.html')
    );
    if($user){
      $template->user = $user; 
    }
    echo $template->execute();

レンプレート:

<div class="menu_nav">
  <ul>
    <tal:block tal:repeat="menu menuItems">
    <li tal:condition="menu/isActive" class="menu active">
      <a tal:content="menu/name" tal:attribute="href menu/url"></a>
    </li>
    <li tal:condition="not: menu/isActive" class="menu">
      <a tal:content="menu/name" tal:attribute="href menu/url"></a>
    </li>
    </tal:block>
    <li tal:condition="exists: user"> Hello, ${user}</li>
  </ul>
</div>
于 2012-07-21T08:58:49.087 に答える