0

このことを考慮:

    $menuItems = array (
        "page1" => "1.php",
        "page2" => "2.php",
        "page3" => "3.php",
        "page4" => "4.php",
        "page5" => "5.php",
     );

そして今、私はこのようなメニューを作成します:

    <ul class="menu">
        <?php 
           foreach($menuItems as $name => $url) {
           echo "<li><a href='$url' class='$class'>$name</a></li>";
           } 
        ?>
    </ul>

よく働く。しかし、現在のページにクラス .current を追加する必要があります。

現在のページを取得するには、次のようにします。

      <?php 
         function curPageName() {
            return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
         }
         $curpage = curPageName();
      ?>

また、うまく機能します。

だから問題は、現在のページに $curpage を割り当てる方法だと思いますか? :)

ありがとうございました。アレックス

4

6 に答える 6

1

簡単に、ループ内で if をチェック$url == $curpageし、適切に追加します。

例:

<?php

    $menuItems    = array(
        "page1" => "1.php",
        "page2" => "2.php",
        "page3" => "3.php",
        "page4" => "4.php",
        "page5" => "5.php",
    );
    $current_item = "2.php"; //Assume we got this from the function
?>
<ul class="menu">
    <?php
    foreach ($menuItems as $name => $url) {
        echo "<li><a href='$url'";
        if ($url == $current_item) {
            echo " class='current'";
        }
        echo ">$name</a></li>\n";
    }
    ?>
</ul>
于 2012-07-28T19:17:31.207 に答える
1
    <ul class="menu">
    <?php 
       foreach($menuItems as $name => $url) {

       if ($url === $curpage){
          $class.=' .current';
       }

       echo "<li><a href='$url' class='$class'>$name</a></li>";

       } 
    ?>
    </ul>
于 2012-07-28T19:28:51.670 に答える
0

だから私はあなたの助けを借りてそれを機能させました!みんなありがとう。アデルに特に感謝します-あなたはそこで間違いを犯しましたが、私はそれを次のように修正しました:

    foreach($menuItems as $name => $url) {
          $class = 'default';
          if (curPageName() == $url) {
             $class.=' \. current';
          } 
         echo "<li><a href='$url' class='$class'>$name</a></li>";
         } 

素晴らしい!再度、感謝します!

于 2012-07-28T19:43:49.583 に答える
0

三項構文を使用して問題を解決できます。これは次の構文で構成されています。

(if condition ? true : false)

curPageNameしたがって、foreachループのurl内側と比較して、この方法を回答に使用できます。

$url == curPageName() ? 'current' : 'notCurrent'

今、あなたはあなたに有利にこれを使う必要があります。

printfの構文が好きです。したがって、コードはよりクリーンになります。これを試して:

<?php
/**
 * curPageName()  is defined in question
 * my_links() is a shortcut to array defined in question
 */
$template = "<li%s><a href="%s">%s</a></li>";
$links    = my_links();
$current  = curPageName();
print '<ul class="menu">';
foreach ($likns as $name => $url) {
  $class = $current == $url ? ' class="current"' : '';
  printf($template, $class, $url, $name);
}
print '</ul>';

の各%s項目は$template、順次変数によって変更されます。したがって、テンプレートを変更する必要がある場合、コードはクリーンで、メンテナンスを行うのが最も簡単です。

または、別の最も簡単なテンプレート方法が必要な場合は、phpテンプレート構文を使用します。:foreachステートメントの後の使用と。の使用に注意してくださいendforeach<?=$var?>よりも理解しやすいechoの短いコードを使用していることがわかり<?php echo $var ?>ます。

<?php
/**
 * curPageName()  is defined in question
 * my_links() is a shortcut to array defined in question
 */
$links   = my_links();
$current = curPageName();
?>
<ul class="menu">
  <?php foreach ($links as $name => $url): ?>
    <li<?=($current == $url ? ' class="current"' : '')?>>
        <a href="<?=$url?>"><?=$name?></a>
    </li>
  <?php endforeach ?>
</ul>
于 2012-07-28T20:48:48.477 に答える
0
<?php
  $menuItems = array(
               'page1' => '1.php',
               'page2' => '2.php',
               'page3' => '3.php',
               'page4' => '4.php',
               'page5' => '5.php',
  );
  $current_page = curPageName();
?>
<ul class="menu">
  <?php
    foreach ($menuItems as $name => $url) {
  ?>
    <li><a href="<?php=$url?>"
    <?php 
      if ($url == $current_page) {
    ?>
    class="current"
    <?php 
      } 
    ?>
    ><?php=$name?></a></li>
  <?php 
    }
  ?>
</ul>

各反復で curPageName () を使用するのはなぜですか?

于 2012-07-28T20:19:00.510 に答える
0
<ul class="menu">
    <?php 
       foreach($menuItems as $name => $url) {
       $class = 'default';
       if (curPageName() == $name) {
          $class.='.current';
       } 
       echo "<li><a href='$url' class='$class'>$name</a></li>";
       } 
    ?>
</ul>
于 2012-07-28T19:32:31.073 に答える