【问题标题】:How to have current page selection using inludes navigation如何使用包含导航进行当前页面选择
【发布时间】:2011-02-18 22:00:00
【问题描述】:

我正在使用 php 包含来限制我的页面上的冗余,当从 header.php 文件调用我的导航时,如何让我的导航选择当前页面并为 HOME 按钮选择某种颜色。

如果我要说在 home.php 项目中添加一个“活动”类并添加一个样式以使其看起来不同,那么我的所有页面都会发生这种情况,这就是我在首先,我怎样才能在导航中拥有一个 header.php 文件,这还允许每个页面都能够在导航中显示您所在的当前页面?

这是 header.php 文件的导航部分

  <ul>
 <li><a href="index.php">About Us</a></li>
 <li><a href="portfolio.php">Portfolio</a></li>
 <li><a href="news.php">News</a></li>
 <li><a href="contact.php">Contact</a></li>
    </ul>

这是header.php文件所在的index.php文件

  <?php
   include("includes/header.php");
  ?>

 <div class="span-8" id="welcome">
  <p>Lorem ipsum</p>
 </div>

 <div class="span-16 last" id="slideshow">
  <img src="images/introImage1.png" alt="fountain">
  <img src="images/introImage2.png" alt="bench">
  <img src="images/introImage3.png" alt="bridge">
 </div>

 <?php
  include("includes/footer.php");
  ?>

【问题讨论】:

    标签: php select include


    【解决方案1】:

    试试这个:

    <ul>
    <?php 
    $pages = array('index.php' => 'About Us', 'portfolio.php' => 'Portfolio', 'news.php' => 'News', 'contact.php' => 'Contact');
    
    foreach($pages as $url => $title) {
       $li = '<li ';
       if($_SERVER[ 'PHP_SELF' ] == $url) {
           $li .= 'class="active"';
       }
       $li .= '><a href="' . $url . '">' . $title . '</a></li>';
       echo $li;
    }
    
    ?>
    </ul>
    

    【讨论】:

    • 这似乎是有道理的,但是当我查看它们时,从未将活动的类添加到任何页面中,我不确定可能出了什么问题,我正在复制并粘贴您的代码。跨度>
    【解决方案2】:

    另一种选择是针对body 标签设置一个属性,然后使用匹配的对来更改任意数量元素的样式。

    因此,在您的主(主页)页面上,您可能有:

    <body id="home">
    <a href="/" class="home">Home</a>
    <a href="/about.htm" class="about">About Us</a>
    

    然后,在你的 CSS 中有:

    body#home a.home , body#about a.about {
      color:#999;background-color:#000; }
    

    【讨论】:

    • 我不确定这将如何工作,因为我的正文与 header.php 文件一起,所以我不能有单独的正文 ID,它们都是相同的。
    • 在这种情况下,请尝试我针对此问题的其他建议解决方案。
    【解决方案3】:

    而且,另一种选择是在实际页面中包含一个 CSS 语句。

    <style type="text/css">
      a[href="<?php echo basename( $_SERVER['PHP_SELF'] ); ?>"] ,
      a[href="<?php echo $_SERVER['PHP_SELF']; ?>"] {
      /* Styles for Current Page Links */ }
    </style>
    

    当然,这取决于浏览器是否能够使用该 CSS 选择器。

    而且,如果您想完全确定文件的所有链接都被覆盖(包括完整的 URI),那么还包括以下选择器:

    a[href="http<?php
      echo ( $_SERVER['HTTPS'] ? 's' : '' ).'://'.
        $_SERVER['HTTP_HOST'].(
          ( $_SERVER['HTTPS'] && $_SERVER['SERVER_PORT']!=443 )
          || ( !$_SERVER['HTTPS'] && $_SERVER['SERVER_PORT']!=80 ) ?
          ':'.$_SERVER['SERVER_PORT'] : '' ).
        $_SERVER['PHP_SELF']; ?>"]
    

    更新:更正了要使用的 PHP 变量。

    【讨论】:

    • 这个选择器似乎对我不起作用 我为 href 获得的位置是这个 /scatliffRedo/index.php 我是否必须在前面加上网址或其他东西所以它的 www.somthing.com/scatliffRedo /index.php 让选择器工作
    • 啊,我的错。选择器引号内的任何内容都需要出现在您想要设置样式的链接中,以表明它们是正在查看的当前页面。因此,如果您的 CSS 包含 a[href*="about.php"],那么它将匹配任何在其 href 属性中包含 about.php 的链接。我不得不承认我以前没有使用过这种方法,但我确信(轻微)黑客它应该可以工作。我实际上会开始尝试自己找到一个防弹的解决方案。
    • 我已经更新了样式声明——它们现在应该可以正常工作了。
    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多