Использовать PHP для добавления активного класса в навигационные ссылки, когда они находятся на странице или на дополнительной странице?

0

Я вижу много таких вопросов вокруг этого веб-сайта и в Интернете, но я не могу найти конкретный ответ на то, что я пытаюсь сделать. Я не хочу использовать JS, я хочу использовать его как можно меньше, но если мне придется это сделать.

Я хочу использовать PHP для добавления активного класса в мои навигационные ссылки, когда эта страница открыта, или если открыта страница в раскрывающемся меню (подстраница, на которую я ссылался). Вот мой код.

На всех моих страницах я включил следующее:

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

В качестве части этой страницы я имею следующее:

<ul class="firstbar">
    <li class="item"><a href="index.php">Home</a></li>
    <li class="item has-dropdown">
        <a href="about.php">About Us</a>
        <ul class="dropdown">
        <li><a href="about.php#about">G2 Drivers</a></li>
        <li><a href="about.php#locations">Locations</a></li>
        <li><a href="about.php#instructors">Instructors</a></li>
        </ul>
    </li>
    <li class="item has-dropdown">
        <a href="services.php">Services</a>
        <ul class="dropdown">
        <li><label>In-car</label></li>
        <li><a href="services/defensivedriving.php">Defensive Driving</a></li>
        <li><a href="services/incarlessons.php">In-car Lessons</a></li>
        <li class="divider"></li>
        <li><label>In-class</label></li>
        <li><a href="services/curriculum.php">Curriculum</a></li>
        </ul>
    </li>
</ul>

Вы можете посмотреть тестовый URL-адрес здесь: www.mrobertsdesign.ca/g2drivers/(активный класс уже доступен, просто не уверен, как его добавить)

Активный класс должен быть добавлен в тег элемента списка непосредственно перед тегом привязки, как показано ниже:

    <li class="active item"><a href="index.php">Home</a></li>

На странице about.php есть раскрывающееся меню, но оно только хеш связано с частями этой страницы. Но для таких страниц, как services.php, который имеет раскрывающийся список на разные страницы, я хочу, чтобы в теге элемента списка "Службы" был активный класс, поэтому ничего другого. Например:

    <li class="active item has-dropdown">
        <a href="services.php">Services</a>
        <ul class="dropdown">
        <li><label>In-car</label></li>
        <li><a href="services/defensivedriving.php">Defensive Driving</a></li>
        <li><a href="services/incarlessons.php">In-car Lessons</a></li>
        <li class="divider"></li>
        <li><label>In-class</label></li>
        <li><a href="services/curriculum.php">Curriculum</a></li>
        </ul>
    </li>

То, что я не могу найти ни в одном из вопросов, которые я рассматривал до сих пор, заключается в том, что если бы кто-то был на одной из страниц в раскрывающемся меню, большинство вопросов, похоже, не включают идея выпадающего меню и кода обычно включает поиск текущей страницы и т.д., поэтому до сих пор мне не удалось использовать это для этой проблемы.

Вся помощь приветствуется! Благодарю!


@1andsock ответил на первую половину вопроса ниже, но у меня есть пара страниц, которые находятся в разных папках и имеют одно и то же имя, поэтому сценарий не работает в этих ситуациях. Для всех, кто хотел бы взглянуть и хотел бы помочь мне в этом, это было бы потрясающе =)

Добавить class= "active" на активную страницу с помощью PHP

Это аналогичная статья для этого, которую я только что видел, и, похоже, отвечает на то, что я ищу, но у нее есть класс "noactive", я просто хочу, чтобы он был "активным" или просто не отображался активным.

  • 0
    А твой вопрос программирования есть? Если вы смотрите, как анализировать и обрабатывать HTML с помощью PHP, вот справочный вопрос, который должен дать некоторые подсказки: Как вы анализируете и обрабатываете HTML / XML в PHP?
  • 0
    Привет, спасибо за отзыв и предоставленную ссылку! Также спасибо за то, что указали на мою неясность с точки зрения фактического вопроса, лол, я думаю, я действительно не знал, что искал ... Но будьте уверены, я просто не очень хорошо разбираюсь в PHP, на самом деле я хотел опубликовать вопрос, заданный кем-то другим, на которого я наткнулся с похожим вопросом (хотя и не достаточно похожим), но я думаю, что нашел ответ ниже!
Показать ещё 4 комментария

2 ответа

2
Лучший ответ

Я не тестировал это, но почему бы вам просто не сделать:

<?php
  $current_page = basename($_SERVER['PHP_SELF']);
?>

а потом:

<li class="<?php if ($current_page == "index.php"){ echo "active "; }?> item"><a href="index.php">Home</a></li>

для обычных ссылок и:

<li class="<?php if ($current_page == "index.php"){ echo "active "; }?> item has-dropdown">
    <a href="about.php">About Us</a>

для ссылок с выпадающими списками?

  • 0
    Мне нравится этот ответ, спасибо! Я соберу это вместе, когда вернусь домой сегодня вечером =) Я думал о чем-то более похожем на сценарий внизу страницы, по любой причине, но это выглядит намного лучше! Я думаю, что я слишком привык работать с JQuery LOL
  • 0
    Выпадающий пример - это то же самое, что и первый пример. Это должен быть массив, в котором перечислены страницы, которые могут зажечь активный класс?
Показать ещё 7 комментариев
1

Если вы используете сеансы, вы можете установить текущую переменную сеанса страницы и использовать ее на странице:

На каждой странице:

session_start();
$_SESSION['current_page'] = 'this_page';

Затем на странице меню:

<li class="<?php if ($_SESSION['current_page'] == 'this_page'){ echo 'active '; }?> item"><a href="index.php">Home</a></li>
  • 0
    Отличная идея, но я не уверен, что хочу использовать сессии. Спасибо за ответ =)

Ещё вопросы

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