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
<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 回答
0

所以我在你的帮助下成功了!多谢你们。特别感谢 Adel - 虽然你有一个错误,但我修复它是这样的:

    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
<?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

您可以使用三元语法来解决您的问题。它包含在以下语法中:

(if condition ? true : false)

因此,我们可以在您的答案中使用这种方式curPageNameurlforeach 循环内部进行比较。

$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. 您可以看到我使用的 echo 短代码<?=$var?><?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 回答