如何在php中设置当前页面“活动”

时间:2013-04-12 05:30:10

标签: php css

嗨我在每个页面上的网站上都有一个菜单,我想把它放在它自己的menu.php文件中,但我不知道如何设置 class =“active” for无论我在哪个页面。 这是我的代码:请帮帮我

menu.php:

<li class=" has-sub">
    <a class="" href="javascript:;"><i class=" icon-time"></i> Zeiten<span class="arrow"></span></a>
    <ul class="sub">
       <li><a class="" href="offnungszeiten.php">Öffnungszeiten</a></li>
       <li><a class="" href="sauna.php">Sauna</a></li>
       <li><a class="" href="frauensauna.php">Frauensauna</a></li>
       <li class=""><a class="" href="custom.php">Beauty Lounge</a></li>
       <li><a class="" href="feiertage.php">Feiertage</a></li>
    </ul>
</li>

17 个答案:

答案 0 :(得分:14)

此方法使用php获取当前页面,该页面将传递一个活动的单词并将其放在class参数中以将页面设置为活动状态。

<?php
function active($currect_page){
  $url_array =  explode('/', $_SERVER['REQUEST_URI']) ;
  $url = end($url_array);  
  if($currect_page == $url){
      echo 'active'; //class name in css 
  } 
}
?>
<ul>
    <li><a class="<?php active('page1.php');?>" href="http://localhost/page1.php">page1</a></li>
    <li><a class="<?php active('page2.php');?>" href="http://localhost/page2.php">page2</a></li>
    <li><a class="<?php active('page3.php');?>" href="http://localhost/page3.php">page3</a></li>
    <li><a class="<?php active('page4.php');?>" href="http://localhost/page4.php">page4</a></li>
</ul>

答案 1 :(得分:11)

在每个php文件中创建一个变量,如:

$activePage = "sauna"; (different for each page)

然后检查你的html页面中的那个变量

<?php if ($activePage =="sauna") {?>
 class="active" <?php } ?>

答案 2 :(得分:11)

如果您在脚本中构建一个页面数组并将其与当前活动页面一起传递给视图文件会更容易:

//index.php or controller

$pages = array();
$pages["offnungszeiten.php"] = "Öffnungszeiten";
$pages["sauna.php"] = "Sauna";
$pages["frauensauna.php"] = "Frauensauna";
$pages["custom.php"] = "Beauty Lounge";
$pages["feiertage.php"] = "Feiertage";

$activePage = "offnungszeiten.php";


//menu.php
<?php foreach($pages as $url=>$title):?>
  <li>
       <a <?php if($url === $activePage):?>class="active"<?php endif;?> href="<?php echo $url;?>">
         <?php echo $title;?>
      </a>
  </li>

<?php endforeach;?>

使用像Smarty这样的模板引擎,你的menu.php会更好看:

//menu.php
{foreach $pages as $url=>$title}
   <li>
       <a {if $url === $activePage}class="active"{/if} href="{$url}">
         {$title}
      </a>
   </li>
{/foreach}

答案 3 :(得分:5)

将以下所有代码放在menu.php中,一切都将得到处理。

// function to get the current page name
function PageName() {
  return substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
}

$current_page = PageName();

使用以上内容获取当前页面名称,然后将其放入菜单

<li><a class="<?php echo $current_page == 'offnungszeiten.php' ? 'active':NULL ?>" href="offnungszeiten.php">Öffnungszeiten</a></li>
<li><a class="<?php echo $current_page == 'sauna.php' ? 'active':NULL ?>" href="sauna.php">Sauna</a></li>
<li><a class="<?php echo $current_page == 'frauensauna.php' ? 'active':NULL ?>" href="frauensauna.php">Frauensauna</a></li>
<li><a class="<?php echo $current_page == 'custom.php' ? 'active':NULL ?>" href="custom.php">Beauty Lounge</a></li>
<li><a class="<?php echo $current_page == 'feiertage.php' ? 'active':NULL ?>" href="feiertage.php">Feiertage</a></li>

其中active是将突出显示菜单项

的类的名称

答案 4 :(得分:1)

你可以做两件事。

首先,您可以使用$_SERVER['PHP_SELF']$_SERVER['REQUEST_URI']或任何其他$_SERVER global变量来读取您请求的php文件的当前文件名,您可以使用这些变量来阅读当前页面并进行比较使用链接的网址,类似这样的

  <a href="offnungszeiten.php" <?php if($_SERVER['PHP_SELF']=='offnungszeiten.php'){ ?>class="activatepage" <?php } ?> >
       Öffnungszeiten
    </a>

第二个是创建一个可以全局读取的变量,它将存储当前页面的当前名称,如下所示

<?php
$cur_page ="offnungszeiten"
?>

<a href="offnungszeiten.php" <?php if($cur_page=='offnungszeiten'){ ?>class="activatepage" <?php } ?> >
 Öffnungszeiten
</a>

答案 5 :(得分:1)

我用这种方式用php完成了它,

function createTopNav($active)
{
    $pages = array(
        array(
            'name'=>'Home',
            'link'=>'index'
        ),
        array(
            'name'=>'Smartphone',
            'link'=>'smartphone'
        ),
        array(
            'name'=>'Tablet',
            'link'=>'tablet'
        ),
        array(
            'name'=>'About Us',
            'link'=>'about'
        ),
        array(
            'name'=>'Contact Us',
            'link'=>'contact'
        )
    );
    $res = "<ul>";
    $activePage = "";
    foreach($pages as $key=>$val)
    {
        if($val['link']==$active)
        {
            $res.= "<li><a href='".$val['link']."'  class='active'  >".$val['name']."</a></li>";
        }
        else
        {
            $res.= "<li><a href='".$val['link']."'>".$val['name']."</a></li>";          
        }
    }
    $res.="</ul>";
    return $res;
}

然后调用此函数

echo createTopNav("about");

,输出就像这样

<ul>
   <li><a href="index">Home</a></li>
   <li><a href="smartphone">Smartphone</a></li>
   <li><a href="tablet">Tablet</a></li>
   <li><a href="about" class="active">About Us</a></li>
   <li><a href="contact">Contact Us</a></li>
</ul>

答案 6 :(得分:1)

我通过每次加载任何页面时运行下面的代码使用jQuery / javascript解决了这个问题:

 $(document).ready(function () {    
    //Get CurrentUrl variable by combining origin with pathname, this ensures that any url appendings (e.g. ?RecordId=100) are removed from the URL
    var CurrentUrl = window.location.origin+window.location.pathname;
    //Check which menu item is 'active' and adjust apply 'active' class so the item gets highlighted in the menu
    //Loop over each <a> element of the NavMenu container
    $('#NavMenu a').each(function(Key,Value)
        {
            //Check if the current url
            if(Value['href'] === CurrentUrl)
            {
                //We have a match, add the 'active' class to the parent item (li element).
                $(Value).parent().addClass('active');
            }
        });
 });

此实施假设您的菜单中包含&#39; NavMenu&#39; ID,并使用http://hostname/scriptname.php href属性,如:

 <ul id="NavMenu">
   <li><a href="http://localhost/index.php">Home</a></li>
   <li><a href="http://localhost/smartphone.php">Smartphone</a></li>
   <li><a href="http://localhost/tablet.php">Tablet</a></li>
   <li><a href="http://localhost/about.php" class="active">About Us</a></li>
   <li><a href="http://localhost/contact.php">Contact Us</a></li>
</ul>

阅读javascript评论,看看发生了什么。如果您更喜欢使用不同的href布局(如原始示例中所示),则必须稍微使用CurrentUrl变量,以使其使用与href属性相同的布局。

对我而言,这是最简单的解决方案,因为我有一个包含大菜单和许多页面的现有网站,并且希望避免修改所有页面。这允许我在头文件(已经是一个中心文件)中输入一段javascript代码,这解决了所有现有页面的问题。

答案 7 :(得分:0)

我的Web应用程序菜单存在类似问题。 我也有一些子菜单,这些子菜单不会显示为顶级菜单按钮。

我的解决方法如下:

a)部分php文件,带有菜单html和位于顶部的php小功能,可根据菜单按钮检查GET变量。 我要检查两个GET变量:页面和(如有必要)menu_button。

b)添加任何带有带有指向菜单页面或子菜单页面的href链接的新php页面。

变量“ menu_button”是可选的,可用于链接到子菜单php文件。

当然应该考虑有关GET变量的安全性。

从我的角度来看,此解决方案比必须在某个地方维护一组页面或链接要花费更少的精力。 您只需使用一个get变量“ menu_button”,即可在其中传递顶级菜单按钮,该按钮应在以您的php文件为目标的任何链接中进行直观标记。

代码示例:

部分menu.php(必须包含在每个php文件中):

<?php
  function active($page_link){
    $menu_button = $_GET("menu_button") ?: $_GET("page");  // sets the menu button either to the given top level menu or it defaults to the page itself
    if($menu_button === $page_link) return "active";
  }
?>

<div>
<a href="?page=one" class="<?= active('one') ?>"Link one</a>
<a href="?page=two" class="<?= active('two') ?>">Link two</a>
</div>

任何具有指向子菜单文件链接的php文件:

<div>
 <a href="?page=one">Link one</a>
 <a href="?page=three&menu_button=two">Link to sub menu page "three" of menu "two"</a>
</div>

为我工作。希望其他人可以使用它。

答案 8 :(得分:0)

假设您有一个包含以下项目的导航栏:

<ul>
   <li id="menu-item-home"><a href="index.php">HOME</a></li>
   <li id="menu-item-services"><a href="/services.php">SERVICES</a></li>
   <li id="menu-item-about-us"><a href="/about-us.php">ABOUT US</a></li>
   <li id="menu-item-contact"><a href="/contact.php">CONTACT</a></li>      
</ul>

然后,在每个页面中声明一个javascript变量,如下所示:

<script>
    <?php echo("var active = 'menu-item-home';"); ?>
</script>

为变量“ active”分配了每个页面的相应项目。

现在,您可以使用此变量突出显示活动菜单项,如下所示。

$(window).ready(function(){$("#" + active).addClass("active");});

答案 9 :(得分:0)

添加以下内容:<?= ($activePage == 'home') ? 'active':''; ?>到我的链接中,它可以正常工作,我只能使子菜单的子菜单无法激活父菜单。

答案 10 :(得分:0)

迟到总比没有好-老实说,我喜欢保持简单,尤其是当有大量脚本和PHP正在运行时。

我将此代码放在每个页面的顶部以标识该页面:

<?php
  $current_page = 'home';
  include 'header.php';
?>

然后您的菜单/导航(我的是引导程序4)如下所示:

<ul class="navbar-nav mx-auto">
  <li class="nav-item <?php if ($current_page=="home") {echo "active"; }?>">
      <a class="nav-link" href="<?php echo SITEURL;?>/">Home</a>
  </li>
  <li class="nav-item <?php if ($current_page=="about") {echo "active"; }?>">
      <a href="<?php echo SITEURL;?>/about" class="nav-link ">About</a>
  </li>
  <li class="nav-item <?php if ($current_page=="store") {echo "active"; }?>">
      <a href="<?php echo SITEURL;?>/store" class="nav-link">Store</a>
  </li>
  <li class="nav-item <?php if ($current_page=="news") {echo "active"; }?>">
        <a href="<?php echo SITEURL;?>/news" class="nav-link">News</a>
  </li>
  <li class="nav-item <?php if ($current_page=="contact") {echo "active"; }?>">
      <a href="<?php echo SITEURL;?>/content/contact-us" class="nav-link ">Contact</a>
  </li>
</ul>

我并不是说这是最佳方法,但是它对我有用,并且易于实现。

答案 11 :(得分:0)

我有一些简单的例子,见下文:

<?php
function active($currect_page) {
    $url = $_SERVER['REQUEST_URI'];

    if($currect_page == $url){
        echo 'active';
    }
}
?>

<ul class="navbar-nav mr-auto">
  <li class="nav-item <?php active('/');?>">
    <a class="nav-link" href="/">Home</a>
  </li>
  <li class="nav-item <?php active('/other');?>">
    <a class="nav-link" href="/other">Other page</a>
  </li>
</ul>

答案 12 :(得分:0)

这对我有用:

    function active_page($script){

    $actual = basename($_SERVER['PHP_SELF']);

  if($script == $actual){
      return 'active-page'; //class name in css
  }
}

答案 13 :(得分:0)

您可以使用

<?php
function active($current_page){
    $page = $_GET['p'];
    if(isset($page) && $page == $current_page){
        echo 'active'; //this is class name in css
    }
}
?>
<ul>
    <li><a class="<?php active('page1');?>" href="?p=page1">page1</a></li>
    <li><a class="<?php active('page2');?>" href="?p=page2">page2</a></li>
    <li><a class="<?php active('page3');?>" href="?p=page3">page3</a></li>
    <li><a class="<?php active('page4');?>" href="?p=page4">page4</a></li>
</ul>

答案 14 :(得分:0)

球稍晚,但我必须自己解决这个问题并最终使用this Javascript method进行了一些小修改。这样做的好处是不需要对当前代码进行很多更改,只需运行脚本即可。

window.onload = activateCurrentLink;

function activateCurrentLink(){
    var a = document.getElementsByTagName("A");
    for(var i=0;i<a.length;i++)
        if(a[i].href == window.location.href.split("#")[0])
            a[i].className = 'activelink';
}

答案 15 :(得分:0)

简单解决方案:

借用上面asprin的代码;

创建一个新文件menu.php,您将在其中存储唯一的菜单副本。在此文件中,您将创建一个函数addMenu($pageName),该函数将参数作为页面名称,并在添加当前标记后返回由菜单组成的字符串。

在HTML代码中,您将include(menu.php)然后使用当前页面名称调用函数addMenu。所以你的代码看起来像这样:

menu.php

     <?php

        function addMenu($pageName){
            $menu = 

                '<ul>
                    <li><a href="Öffnungszeiten.php"' . ($pageName == "Öffnungszeiten" ? "class=\"current\"" : "") . '><span>Öffnungszeiten</span></a></li>
                    <li><a href="sauna.php"' . ($pageName == "Öffnungszeiten" ? "class=\"current\"" : "") . '><span>Sauna</span></a></li>
                    <li><a href="frauensauna.php"' . ($pageName == "Frauensauna" ? "class=\"current\"" : "") . '><span>Frauensauna</span></a></li>
                    <li><a href="custom.php" ' . ($pageName == "lounge" ? "class=\"current\"" : "") . '><span>Beauty Lounge</span></a></li>
                    <li><a href="Feiertage.php"' . ($pageName == "feiertage" ? "class=\"current\"" : "") . '><span>Feiertage</span></a></li>                                                                                
                </ul>';
          return $menu;
    }
        ?>

在您的HTML中,请说:

<div id="menu">
            <?php
                include('menu.php');
                echo addMenu("index");
                echo $hello;     
            ?>
        </div>

答案 16 :(得分:0)

在查询字符串中发送页面名称,并通过获取变量在每个页面上进行检查。