Справочники, инструменты, документация

PHP: Как установить текущую страницу «active», несколько методов

Этот метод получает текущую страницу с помощью php, которая будет передавать слово в этом случае active и помещает его в параметр класса, чтобы установить страницу активной.
<?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>

Создайте переменную в каждом из ваших файлов php, затем проверьте эту переменную на странице html следующим образом, например:

$activePage = "sauna"; // разные для каждой страницы
<?php if ($activePage =="sauna") {?>
 class="active" <?php } ?>

Было бы проще, если бы вы построили массив страниц в своем скрипте и передали его в файл представления вместе с текущей активной страницей:

index.php or controller

<?php
$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;?>

Поместите весь приведенный ниже код в menu.php, и все будет сделано.

<?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 -это имя класса, который будет выделять Ваш пункт меню -->

Есть две вещи, которые вы можете сделать, сначала вы можете прочитать текущее имя файла php, который вы запрашиваете, используя $_SERVER['PHP_SELF'] или $_SERVER['REQUEST_URI'] или любые другие глобальные переменные $_SERVER, которые вы можете использовать для чтения текущей страницы и сравнения ее с url ссылки, что-то вроде этого:

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

Можно сделать таким образом:

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>

Создайте новый файл 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>

Метод Javascript, с небольшой модификацией имеет преимущество, что не требует большого количества изменений в текущем коде, просто запустите скрипт и вуаля.

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';
}

Можно использовать:

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

Как вариант:

function active_page($script){

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

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

Простой пример:

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