【问题标题】:PHP set active link on page using includesPHP使用包含在页面上设置活动链接
【发布时间】:2012-01-18 13:25:55
【问题描述】:

于是我搜了SO一个小时试图找到答案,也尝试了各种方法,including this

我正在尝试包含我的页面以及导航。但是在正确的页面上,我需要列表项具有active 的类。导航在 header.php 中,目前看起来像这样:

<nav>
    <ul>
      <li class="active"> <a href="/">Home</a> </li>
      <li> <a href="#">Apps</a> </li>
      <li> <a href="#">Forums</a> </li>
    </ul>
  </nav>

首先,我不知道 JS(jQuery) 是否会更好,或者 PHP 是否会更好。如果它有效,两者都无关紧要。

另外,我对 PHP 有点陌生,正在努力学习。

最简单(希望)使用的方法是什么?所以我不必为了给导航而更改很多代码class="active"

【问题讨论】:

  • 您如何获取值以在该页面上设置活动类,您是否使用查询字符串变量来获取页面 ID。 exmaple.com?page_id=Apps 之类的东西
  • 我在 PHP 方面还没有那么先进.....它实际上只是 PHP 的静态页面。

标签: php javascript jquery include navigation


【解决方案1】:

假设您有一个 $page 变量(其中包含您当前所在页面的名称):

  <nav>
    <ul>
      <li class="<?php echo ($page == "home" ? "active" : "")?>"> <a href="/">Home</a> </li>
      <li class="<?php echo ($page == "apps" ? "active" : "")?>"> <a href="#">Apps</a> </li>
      <li class="<?php echo ($page == "forums" ? "active" : "")?>"> <a href="#">Forums</a> </li>
    </ul>
  </nav>

【讨论】:

  • 您能解释一下 $page 变量的外观吗?变量会在 inc 文件上还是在我要包含导航的页面上?对 PHP 来说真的很陌生。
  • 如果您将&lt;?php $page = "home"; ?&gt; 放在包含的主页上,则主页将被设置为活动。也不要忘记设置 CSS。
【解决方案2】:

这是一个简单的方法,您不需要添加任何其他变量

<li class="<?php echo ($_SERVER['PHP_SELF'] == "/index.php" ? "active" : "");?>">
<a href="index.php">Start</a>
</li>
<li class="<?php echo ($_SERVER['PHP_SELF'] == "/about.php" ? "active" : "");?>">
<a href="about.php">About</a>
</li>
<li class="<?php echo ($_SERVER['PHP_SELF'] == "/practices.php" ? "active" : "");?>">
<a href="practices.php">Practices</a>
</li>

【讨论】:

    【解决方案3】:

    $_SERVER 之前添加basename 函数。我希望它会起作用。

    echo (basename($_SERVER['PHP_SELF']) == 'yourPageName' ?'active' : " ");
    

    【讨论】:

    • 完美答案,谢谢
    【解决方案4】:

    在页眉处使用:

    <?php $loc = this.location; ?>
    

    然后在每个链接处添加:

    <?php(this.href == $loc) ? echo 'class="active"' : '' ?>
    

    【讨论】:

      【解决方案5】:

      在index.php页面定义变量$page="index.php",其他页面根据页面名称修改变量值

      <li class="<?php echo ($page == "index.php" ? "active" : "")?>">
          <a href="index.php">Home</a>
      </li>
      <li class="<?php echo ($page == "about.php" ? "active" : "")?>">
          <a href="about.php">About</a>
      </li>
      <li class="<?php echo ($page == "service.php" ? "active" : "")?>">
          <a href="service.php">Services</a>
      </li>
      <li class="<?php echo ($page == "contact.php" ? "active" : "")?>">
          <a href="contact.php">Contact</a>
      </li>
      

      【讨论】:

        【解决方案6】:
        $page_url = $_SERVER['QUERY_STRING'];
        
        $s = explode("&",$page_url);
        //print $s[0];
        $page = $s[0];
        
        function createTopNav($page)
        {
            $pages = array(
                array(
                    'name'=>'Feeder',
                    'link'=>'page=feeder'
                ),
                array(
                    'name'=>'Services',
                    'link'=>'page=services'
                ),
                array(
                    'name'=>'Development',
                    'link'=>'page=development'
                ),
                array(
                    'name'=>'Design',
                    'link'=>'page=design'
                ),
        
            );
            $res = "";
            foreach($pages as $key=>$val)
            {
                if($val['link']==$page)
                {
                    $res.= "<a class=\"active\" href=\"?"
                    .$val['link'].
                    "\">"
                    .$val['name'].
                    "</a>";
                }
                else
                {
                    $res.= "<a class=\"\" href=\"?"
                    .$val['link'].
                    "\" >"
                    .$val['name'].
                    "</a>";
            }
            }
            $res.="";
            return $res;
        }
        
        echo createTopNav($page);
        

        【讨论】:

        • 最好能加点解释,或者作为cmets。
        【解决方案7】:

        如果您使用查询字符串exmaple.com?page_id=Apps 来传递页面ID,而不是使用php,您可以 接近这个东西

        $page_id = $_REQUEST['page_id'];

         <ul>
                  <li class="<?php echo ($page_id == "Home" ? "active" : "");?>">
         <a href="/">Home</a>
                  </li>
                  <li class="<?php echo ($page_id == "Apps" ? "active" : "");?>">
         <a href="#">Apps</a>
                  </li>
                  <li class="<?php echo ($page_id == "Forums" ? "active" : ""); ?>">
         <a href="#">Forums</a>
                  </li>
                </ul>
        

        【讨论】:

        • 这太容易破解了:-P
        • @neal 我不知道他是如何获得当前页面名称的,这只是一个想法。
        【解决方案8】:

        如果您不想使用 jQuery 或 PHP - 可以下一步:

        1. 为“your-include-nav.php”中的每个 &lt;li&gt; 元素提供 ID 或不同的 CLASS。
        2. 在每个页面的 &lt;head&gt; 部分中使用 CSS 定义“活动”样式。

        【讨论】:

          【解决方案9】:

          添加基本名称功能。然后它会工作,我希望。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-06-13
            • 2021-05-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-04
            • 1970-01-01
            相关资源
            最近更新 更多