Laravel 9 blade добавить класс active в меню

Laravel 9 blade как добавить класс active

Содержание статьи

Laravel 9 blade как добавить класс active

В Laravel 9 управление активными пунктами меню в Blade требует точной проверки текущего маршрута или URL. Простейший способ – использовать встроенные функции request()->is() или Route::currentRouteName(), которые позволяют определить, какой пункт меню соответствует текущей странице, и добавить к нему класс active.

Для динамических меню с несколькими уровнями часто применяют условные конструкции @if или вспомогательные функции. Например, создание собственной функции menuActive() позволяет централизованно управлять добавлением класса, сравнивая текущий маршрут с набором ссылок меню. Это упрощает поддержку навигации при изменении структуры сайта.

Важно учитывать, что использование request()->is() чувствительно к шаблону URL, поэтому для страниц с параметрами рекомендуется применять именованные маршруты через Route::currentRouteName(). Такой подход исключает ошибки при переходе между страницами с похожими путями и сохраняет корректное выделение активного пункта.

В статье приведены практические примеры для разных типов меню: статические ссылки, динамические списки и вложенные подменю. Реализация через Blade позволяет минимизировать дублирование кода и делает навигацию на сайте прозрачной и легко настраиваемой для любых проектов на Laravel 9.

Laravel 9 Blade: добавить класс active в меню

Для выделения активного пункта меню в Laravel 9 Blade можно использовать условные проверки текущего маршрута или URL. Один из наиболее прямых методов – применять функцию request()->is(). Например, для ссылки на страницу «/about» проверка выглядит так: class=»{{ request()->is(‘about’) ? ‘active’ : » }}». При совпадении с текущим URL к элементу автоматически добавляется класс active.

Если меню построено на именованных маршрутах, удобнее использовать Route::currentRouteName(). Сравнивая текущий маршрут с именем ссылки, можно точно определить активный пункт: class=»{{ Route::currentRouteName() === ‘about’ ? ‘active’ : » }}». Такой подход устойчив к изменениям URL и параметрам маршрута.

Для повторяющихся проверок лучше создать вспомогательную функцию, например menuActive($route), которая возвращает ‘active’ при совпадении. Это сокращает дублирование кода и делает Blade-файлы более читаемыми: class=»{{ menuActive(‘about’) }}».

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

Проверка текущего маршрута в Blade для назначения класса active

Проверка текущего маршрута в Blade для назначения класса active

В Laravel 9 для назначения класса active важно точно определить, какой маршрут используется в текущем запросе. Blade предоставляет несколько инструментов для такой проверки.

Основные методы:

  • request()->is() – проверяет соответствие текущего URL шаблону. Пример: class=»{{ request()->is(‘about’) ? ‘active’ : » }}». Подходит для статических и простых маршрутов.
  • Route::currentRouteName() – возвращает имя текущего маршрута. Позволяет сравнивать с именами маршрутов, заданными в web.php: class=»{{ Route::currentRouteName() === ‘about’ ? ‘active’ : » }}». Надежно при изменении URL или добавлении параметров.

Для сложных меню с вложенными элементами можно использовать массив имен маршрутов:

  1. Создать массив с именами дочерних маршрутов: $submenuRoutes = [‘about’, ‘team’, ‘history’].
  2. Проверить текущий маршрут через in_array: class=»{{ in_array(Route::currentRouteName(), $submenuRoutes) ? ‘active’ : » }}».
  3. Так можно подсвечивать родительский пункт меню, если активен любой из дочерних элементов.

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

Использование директивы @if для выделения активного пункта меню

Использование директивы @if для выделения активного пункта меню

В Blade можно использовать директиву @if для точного управления добавлением класса active к пунктам меню. Этот метод позволяет сравнивать текущий маршрут или URL с ссылкой меню и динамически изменять атрибут class.

Пример базового использования:

Элемент меню Blade-код
Главная

<li class=»@if(request()->is(‘/’)) active @endif»>

<a href=»/»>Главная</a>

</li>

О нас

<li class=»@if(Route::currentRouteName() === ‘about’) active @endif»>

<a href=»{{ route(‘about’) }}»>О нас</a>

</li>

Для вложенных меню можно комбинировать несколько условий:

Элемент меню Blade-код
Сервисы

<li class=»@if(in_array(Route::currentRouteName(), [‘service1′,’service2’])) active @endif»>

<a href=»#»>Сервисы</a>

</li>

Использование @if обеспечивает полную гибкость: можно включать сложные логические проверки, учитывать параметры URL и динамически подсвечивать родительские элементы меню.

Применение функции request()->is() для установки класса active

Применение функции request()- loading=is() для установки класса active»>

Функция request()->is() проверяет соответствие текущего URL заданному шаблону и возвращает true при совпадении. Это позволяет динамически добавлять класс active к элементам меню без необходимости использования имен маршрутов.

Пример для статической страницы:

<li class=»{{ request()->is(‘about’) ? ‘active’ : » }}»><a href=»/about»>О нас</a></li>

Для меню с подстраницами удобно использовать символ подстановки ‘*’:

<li class=»{{ request()->is(‘services/*’) ? ‘active’ : » }}»><a href=»/services»>Сервисы</a></li>

Это выделит активным любой URL вида /services/подстраница, что избавляет от проверки каждого маршрута отдельно.

Для проверки нескольких URL одновременно можно передавать массив шаблонов:

<li class=»{{ request()->is([‘blog’, ‘news’]) ? ‘active’ : » }}»><a href=»/blog»>Блог</a></li>

Использование request()->is() оптимально для простых и вложенных меню, когда структура URL предсказуема, и обеспечивает корректное выделение активного пункта без лишнего кода.

Добавление класса active через route name в Blade

В Laravel 9 для точного определения активного пункта меню удобно использовать имя маршрута. Blade предоставляет функцию Route::currentRouteName(), которая возвращает имя текущего маршрута. Сравнивая его с именем маршрута ссылки, можно динамически добавлять класс active.

Пример для одиночного пункта меню:

<li class=»{{ Route::currentRouteName() === ‘about’ ? ‘active’ : » }}»><a href=»{{ route(‘about’) }}»>О нас</a></li>

Для меню с несколькими связанными маршрутами удобно использовать массив:

<li class=»{{ in_array(Route::currentRouteName(), [‘services.index’, ‘services.show’]) ? ‘active’ : » }}»>

<a href=»{{ route(‘services.index’) }}»>Сервисы</a>

</li>

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

Использование имен маршрутов обеспечивает стабильное выделение активного пункта при изменении URL, работе с параметрами маршрутов и генерации ссылок через route(), минимизируя ошибки подсветки.

Создание вспомогательной функции для автоматического добавления active

Для упрощения управления классом active в меню рекомендуется создавать вспомогательную функцию. Она позволяет централизованно проверять текущий маршрут и возвращать ‘active’ при совпадении, уменьшая дублирование кода в Blade.

Пример функции в файле app/helpers.php:

<?php

function menuActive($routes) {

  if (is_array($routes)) {

    return in_array(Route::currentRouteName(), $routes) ? ‘active’ : »;

  }

  return Route::currentRouteName() === $routes ? ‘active’ : »;

}

Использование в Blade:

<li class=»{{ menuActive(‘about’) }}»><a href=»{{ route(‘about’) }}»>О нас</a></li>

<li class=»{{ menuActive([‘services.index’,’services.show’]) }}»><a href=»{{ route(‘services.index’) }}»>Сервисы</a></li>

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

Сравнение текущего URL с ссылкой меню без использования пакетов

Сравнение текущего URL с ссылкой меню без использования пакетов

Для подсветки активного пункта меню в Laravel 9 можно напрямую сравнивать текущий URL с URL ссылки, без сторонних пакетов. Функция request()->url() возвращает полный адрес текущей страницы, что позволяет проводить точное сравнение.

Пример реализации для одиночного пункта меню:

<li class=»{{ request()->url() === url(‘/about’) ? ‘active’ : » }}»><a href=»{{ url(‘/about’) }}»>О нас</a></li>

Для динамических маршрутов с параметрами удобно использовать request()->is() с шаблоном:

<li class=»{{ request()->is(‘services/*’) ? ‘active’ : » }}»><a href=»{{ url(‘/services’) }}»>Сервисы</a></li>

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

Управление активным состоянием выпадающих подменю

Для корректного выделения активного пункта в выпадающих меню необходимо учитывать как родительский элемент, так и дочерние страницы. В Laravel Blade это достигается с помощью массивов маршрутов и проверок текущего URL или имени маршрута.

Пример алгоритма:

  1. Создать массив дочерних маршрутов для подменю: $submenuRoutes = [‘services.index’, ‘services.show’].
  2. Проверить текущий маршрут через in_array(Route::currentRouteName(), $submenuRoutes) и добавить класс active родительскому элементу.
  3. Для каждого дочернего элемента подменю проверить его имя маршрута или URL и выделить класс active индивидуально.

Пример Blade-кода:

  • <li class=»{{ in_array(Route::currentRouteName(), [‘services.index’,’services.show’]) ? ‘active’ : » }}»>

    <a href=»#»>Сервисы</a>

    <ul>

    <li class=»{{ Route::currentRouteName() === ‘services.index’ ? ‘active’ : » }}»><a href=»{{ route(‘services.index’) }}»>Сервис 1</a></li>

    <li class=»{{ Route::currentRouteName() === ‘services.show’ ? ‘active’ : » }}»><a href=»{{ route(‘services.show’) }}»>Сервис 2</a></li>

    </ul>

    </li>

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

Вопрос-ответ:

Как в Laravel 9 Blade автоматически выделять активный пункт меню?

Для выделения активного пункта меню можно использовать функции request()->is() или Route::currentRouteName(). Первый вариант сравнивает текущий URL с заданным шаблоном, второй — проверяет имя маршрута. В Blade это реализуется через условие: class=»{{ request()->is(‘about’) ? ‘active’ : » }}» или class=»{{ Route::currentRouteName() === ‘about’ ? ‘active’ : » }}».

Можно ли подсвечивать родительский пункт меню, если активна его подстраница?

Да, для этого создается массив дочерних маршрутов и проверяется текущий маршрут через in_array(Route::currentRouteName(), $submenuRoutes). Если совпадение найдено, родительский пункт получает класс active, а дочерний элемент подсвечивается индивидуально.

Как использовать request()->is() для динамических URL с параметрами?

Функция request()->is() поддерживает символ подстановки ‘*’. Например, request()->is(‘services/*’) вернет true для любого URL вида /services/что-то, позволяя автоматически подсвечивать активный пункт меню без ручной проверки каждого параметра.

Зачем создавать вспомогательную функцию для класса active в Blade?

Вспомогательная функция позволяет централизованно управлять добавлением класса active. Она принимает имя маршрута или массив маршрутов и возвращает ‘active’, если текущий маршрут совпадает. Это сокращает дублирование кода в Blade и упрощает поддержку меню при расширении сайта.

Можно ли сравнивать текущий URL с ссылкой меню без пакетов?

Да, это делается через request()->url() и функцию url(). Пример: class=»{{ request()->url() === url(‘/about’) ? ‘active’ : » }}». Такой способ точный и не требует сторонних пакетов, подходит для страниц с предсказуемой структурой URL.

Как правильно выделять активный пункт меню в Laravel 9 Blade для сложного сайта с вложенными страницами?

Для сайтов с вложенной структурой меню удобнее использовать проверку имени маршрута через Route::currentRouteName() и массив дочерних маршрутов. Родительский пункт получает класс active, если текущий маршрут совпадает с любым из дочерних. Дочерние элементы проверяются отдельно, что позволяет подсвечивать активный путь точно, даже если URL содержит параметры. Такой подход уменьшает дублирование кода и упрощает поддержку навигации при добавлении новых страниц.

Ссылка на основную публикацию