【问题标题】:How to change an include file depending on the page如何根据页面更改包含文件
【发布时间】:2013-08-21 16:55:56
【问题描述】:

我正在创建一个网站,我在所有页面中都包含 header.php,它只是页面顶部的徽标和导航栏,下面是导航菜单的代码。

<nav id="navmenu">
<ul>
<li><a href="index.php" class="active">Home</a></li>
<li><a href="about.php">About</a></li>
<li><a href="portfolio.php">Portfolio</a></li>
<li><a href="contact.php">Contact</a></li>
</ul>
</nav>

我怎样才能使 class="active" 根据用户所在的页面而变化?

【问题讨论】:

  • class active 对此有什么作用,您只是想让链接变成不同的颜色以显示人们在页面上吗?如果是这样,只需将 a:active 设置为 css 中所需的颜色?
  • 谢谢大家,使用 PHP_SELF 让它工作,之前没有意识到这一点

标签: php html php-include


【解决方案1】:

利用 $_SERVER['PHP_SELF']

<li><a href="index.php" <?php if ($_SERVER['PHP_SELF'] == "/index.php") echo "class='active'" ?>>Home</a></li>

<li><a href="about.php" <?php if ($_SERVER['PHP_SELF'] == "/about.php") echo "class='active'" ?>>About</a></li>

【讨论】:

    【解决方案2】:

    你可以使用这个:$_SERVER['PHP_SELF']

    它会告诉你当前所在页面的名称。

    然后,在你的头文件中,使用如下内容:

    <a href="contact.php" <?php if($_SERVER['PHP_SELF'] == "/contact.php") echo 'class="active"'; ?>>Contact</a>
    

    【讨论】:

      【解决方案3】:

      您可以使用服务器变量 PHP_SELF,即。 $_SERVER['PHP_SELF'] 给出文件名 ie./index.php 附加您的站点名称 ie。 www.example.com

      <nav id="navmenu">
      <ul>
      <li><a href="index.php" <?php if ($_SERVER['PHP_SELF'] == "/index.php") echo "class='active'" ?>>Home</a></li>
      <li><a href="about.php" <?php if ($_SERVER['PHP_SELF'] == "/about.php") echo "class='active'" ?>>About</a></li>
      <li><a href="portfolio.php" <?php if ($_SERVER['PHP_SELF'] == "/portfolio.php") echo "class='active'" ?>>Portfolio</a></li>
      <li><a href="contact.php" <?php if ($_SERVER['PHP_SELF'] == "/contact.php") echo "class='active'" ?>>Contact</a></li>
      </ul>
      </nav>
      

      希望它有所帮助:)

      【讨论】:

        【解决方案4】:

        可能有不止一种方法可以做这样的事情。最直接的可能是把头文件改成这样:

        <?php
            if (!defined('HOME_LINK_CLASS')) {
                define('HOME_LINK_CLASS', 'active');
            }
        ?><nav id="navmenu">
        <ul>
        <li><a href="index.php" class="<?php echo HOME_LINK_CLASS;?>">Home</a></li>
        <li><a href="about.php">About</a></li>
        <li><a href="portfolio.php">Portfolio</a></li>
        <li><a href="contact.php">Contact</a></li>
        </ul>
        </nav>
        

        现在,如果您希望类在特定页面上(比如说)“非活动”,您可以在该页面上的 include 命令之前添加此行:

        define('HOME_LINK_CLASS', 'inactive');
        

        【讨论】:

          【解决方案5】:

          http://webcheatsheet.com/PHP/get_current_page_url.php

          使用类似的东西来检查当前页面的 URL。然后使用 if 语句来要求某些文件

          【讨论】:

            【解决方案6】:

            您可以使用PHP_SELF 来获取文件的名称,如下所示:

            <?php
            $page = $_SERVER["PHP_SELF"];
            switch($page){
                case "/index.php": $class = "index";break;
                case "/home.php": $class = "home";break;
                case "/info.php": $class = "info";break;
                default: $class = "active";break;
            }
            ?>
            
            <nav id="navmenu">
                <ul>
                    <li><a href="index.php" class="<?php echo $class; ?>">Home</a></li>
                    <li><a href="about.php">About</a></li>
                    <li><a href="portfolio.php">Portfolio</a></li>
                    <li><a href="contact.php">Contact</a></li>
                </ul>
            </nav>
            

            【讨论】:

              【解决方案7】:

              您可以使用$_SERVER['PHP_SELF'] 检索当前脚本名称,然后使用三元语句将active 属性添加到该链接。

              <?php $p = strtolower(basename($_SERVER['PHP_SELF'])); ?>
              
              <nav id="navmenu">
              <ul>
              <li><a href="<?php echo ($p=="home.php" ? "active" : "")?>">Home</a></li>
              <li><a href="<?php echo ($p=="about.php" ? "active" : "")?>">About</a></li>
              <li><a href="<?php echo ($p=="portfolio.php" ? "active" : "")?>">Portfolio</a></li>
              <li><a href="<?php echo ($p=="contact.php" ? "active" : "")?>">Contact</a></li>
              </ul>
              </nav>
              

              【讨论】:

                【解决方案8】:

                如果您的页面地址 (document.location) 与菜单上的 href 一样,则您不需要活动项目的类,只需使用伪 CSS 类 :active

                否则,您需要检查$_SERVER 超全局PHP_SELF 并将类添加到所需的菜单项。类似于下面的代码:

                //code snipped not tested
                <li><a href="index.php" class="<?php echo preg_match("/index.php$/", $_SERVER["PHP_SELF"]) ? ("active") : (""); ?>">Home</a></li>
                

                【讨论】:

                  【解决方案9】:

                  执行此操作的简单方法是创建一个页面数组,然后循环遍历该数组以创建菜单项,并检查每个循环是否是活动文件。使用这种方法添加或删除页面也很容易,只需更改菜单数组中的项目,而且代码更小,在页面数量多的情况下更易于阅读:

                  // get active file, $_SERVER['SCRIPT_NAME'] is less spoofable than $_SERVER['PHP_SELF']
                  $active = basename( $_SERVER['SCRIPT_NAME'] );
                  
                  // create array of pages
                  $main_nav = array( 
                      'index.php' => 'Home', 
                      'about.php' => 'About', 
                      'portfolio.php' => 'Portfolio', 
                      'contact.php'=>'Contact'
                      );
                  
                  // create menu 
                  //   notice the usage of PHP shorthand:
                  //   ( $active == $file ? 'class="active"' : '' ) is the same as:
                  //
                  //   if ( $active == $file ) 'class="active"';
                  //   else '';
                  //
                  echo '<nav id="navmenu"><ul>'.PHP_EOL;
                  foreach ($main_nav as $file => $title) {
                      echo '<li><a href="' . $file . '" ' . ( $active == $file ? 'class="active"' : '' ) . '>' . $title . '</a></li>'.PHP_EOL;
                  }
                  echo '</ul></nav>';
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-05-11
                    • 1970-01-01
                    • 2021-01-16
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多