как действовать на одно или другое в PHP

1

У меня есть следующий код, и я пытаюсь выяснить, как добавить либо или ситуацию в команду PHP. Например, ниже я хочу иметь больше одного имени одной страницы (например, advertising.php), которое вызовет событие, добавляющее активный класс, указанный в php вверху.

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

<div class="row"><!--BEGIN NAV ROW-->
<div class="container">
    <nav class="navbar navbar-default" role="navigation">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#collapse">
            <span class="sr-only">Toggle Navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="index.php"><img src="images/site-logo.png" alt="Briley Design Group" /></a>
        </div>
        <div class="collapse navbar-collapse" id="collapse">
            <ul class="nav navbar-nav navbar-right list-hover-slide">
                <li class="<?php active('index.php');?>"><a href="index.php">HOME</a></li>

                <li class="<?php active('advertising.php');?> dropdown "><a href="#" class="dropdown-toggle" data-toggle="dropdown">PORTFOLIO</a>
                  <ul class="dropdown-menu">
                    <li><a href="advertising.php">Advertising</a></li>
                    <li><a href="annual.php">Annual Reports</a></li>
                    <li><a href="brochures.html">Brochures</a></li>
                    <li><a href="cards.html">Cards/Promo</a></li>
                    <li><a href="interactive.html">Interactive</a></li>
                    <li><a href="logos.html">Logos</a></li>
                    <li><a href="display.html">Display Graphics</a></li>
                    <li><a href="photography.html">Photography</a></li>
                   </ul>
                </li>

                <li class="<?php active('about.php');?> dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">ABOUT US</a>
                  <ul class="dropdown-menu">
                    <li><a href="about.php">About Our Company</a></li>
                    <li><a href="clients.html">What Our Clients Say</a></li>
                    </ul>
                </li>
                <li class="<?php active('how.php');?>"><a href="how.html">HOW WE WORK</a></li>
                <li class="<?php active('contact.php');?>"><a href="contact.html">CONTACT</a></li>
            </ul>
        </div>
    </nav>
</div>

  • 0
    Вы имеете в виду, что пытаетесь добавить active класс в навигационную панель начальной загрузки, обнаруживая страницу, на которой вы находитесь? Если так, вот ответ, чтобы сделать это в javsacript , который должен быть всем, что вам нужно.
  • 0
    да, пытаюсь добавить активный класс. Это работает, за исключением того, что я хочу, чтобы было несколько вариантов (несколько заголовков страниц), которые делают «портфолио» активным, потому что в нем есть субнавигатор, который должен сделать основной раздел активным.
Теги:

3 ответа

2

Опция (аналогично решению ethans) заключается в использовании метода func_get_args следующим образом:

function active(){
  $url_array =  explode('/', $_SERVER['REQUEST_URI']);
  $url = end($url_array);  
  if(in_array($url, func_get_args())){
      echo 'active'; //class name in css 
  } 
}

Затем вы можете вызвать метод, используя:

<?php active("advertising.php", "something.php", "else.php"); ?>
  • 0
    это сработало, спасибо!
0

Вы можете передать регулярное выражение active функции и проверить соответствие. Это может дать вам большую свободу в сопоставлении url.

Кроме того, хотя echo работает нормально, я бы предложил просто вернуть имя класса, а затем использовать синтаксис <?= Чтобы включить возвращаемое значение в ваш html:

<?
function active($urlPattern) {
    return (preg_match('/\/(' . $urlPattern . ')\.\w+$/', $_SERVER['REQUEST_URI']))
        ? 'active' : ''; //class name in css 
}    
?>
...
<li class="<?= active("advertising|annual|brochures|cards|interactive|logos|display|photography") ?> dropdown">

Таким образом, вы используете символ трубы для разделения разных страниц (без расширения php или html), для которого вы хотите иметь активный стиль.

Функция проверяет, что одно из этих имен появляется между последними / и . текущего url.

С силой регулярного выражения вы можете делать намного более сложные матчи, вам, возможно, никогда не понадобится, но приятно иметь власть под рукой.

0

Вы можете разрешить вашей active() функции принимать массив имен скриптов.

function active(array $current_page){
  $url_array =  explode('/', $_SERVER['REQUEST_URI']) ;
  $url = end($url_array);
  foreach ($current_page as $page) {}
      if($page == $url){
          echo 'active'; //class name in css 
          return;
      } 
  }
}

Затем, для меню портфолио, вы бы назвали это следующим образом:

<?php active(array('advertising.php',"annual.php","brochures.html","cards.html",//etc));?>

  • 0
    Благодарю. Я попробовал это, и ни один не вызывает активный класс
  • 0
    @PamelaFunk работает на меня. Реализовал это на моей машине. Как выглядит ваш код?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню