Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Ребята, что-то мучаюсь с индикацией активного пункта меню сайта...
Все элементы реализованы через стандартные бутстрапные ul > li с классом active для активного пункта.
Как наиболее коротким и красивым способом сделать такую "подсветку" активного пункта?
Пробовал через @if (Route::currentRouteName() = '...') - но что-то пока не разобрался.
Наверное надо еще полное пространство имен указывать для фасада Route?
Или вообще в Middleware / ServiceProviders формирование массива пунктов вынести?
Может, подскажете проверенные варианты
Не в сети
Эхх, все молчат(
Хотя бы как правильно проверять текущий путь внутри @if вставки во вьюшке, подскажите?
Т.е. если есть три роута:
/
/profile
/about
- то как проверять "где мы сейчас", чтобы выделять классом active пункт меню?
Не в сети
Я так делал
<a href="$item->url" {{ Request::is($item->url) ? 'class="active"' : null }}>
Не в сети
Не в сети
Спасибо, ребята. Буду пробовать.
Просто тема актуальная, скажем так, для 90% проектов. И было интересно, кто как делает.
Думал вообще формировать массив кнопок меню в middleware, но сомневался - может слишком сложно будет))
Не в сети
В той же документации на laravel.ru есть https://laravel.ru/docs/v5/requests#информация
Изменено php_dev (19.08.2015 23:10:20)
Не в сети
Если говорите, что актуально во многих проектах, то вот еще пример вынести в helpers https://github.com/bestmomo/laravel5-ex … .php#L3-L8 и примеры использования там же во views найдете.
Не в сети
Не в сети
с хелпером вроде поизящней код смотрится, хотя кому как
Не в сети
в зависимости от ситуации у меня есть несколько проверок
1. на наличие забитого url/route для элемента меню
тут все ясно, сверяю с инфой из request
2. на наличие префикса
указываю префикс, положение префикса в url. т.е для адреса site.com/admin/users/ prefix = ['users', 1]. для url site.com/users будет ['users', 0]. проверяю на соответствие.
3. проверка на тупо забитый active = true
4. если выпадающий список, то можно поискать активные элементы в нем, которые проверяются пунктами 1 - 3 на активность.
если указанн префикс, то в приоритете
по мне лучше эти проверки вывести в отдельный пакет, который подгружать уже через композер во вьюшку. Я брал за основу пакет на github у pingpong-labs, допилил под себя
Не в сети
по мне лучше эти проверки вывести в отдельный пакет, который подгружать уже через композер во вьюшку. Я брал за основу пакет на github у pingpong-labs, допилил под себя
да чуваки много написали, можно осветить что для себя допиливал если не секрет, там вроде пакет menus выглядет готовым для использования, на первый взгляд конечно.
а другие компоненты с этого пинг понга не пробовал?
Изменено stuchin (20.08.2015 12:51:39)
Не в сети
можно осветить что для себя допиливал если не секрет, там вроде пакет menus выглядет готовым для использования, на первый взгляд конечно.
добавил сущностей типа dropdown, link, header, divider, html. у каждой сущности свои параметры, методы. Мне так проще. У Pingpong-labs все в куче. Зацыкленность добавил, чтобы можно было делать выпадающее меню, содержащее в себе другое выпадающее меню и так без конца. Возможность ботстраповский badge добавлять к элементам меню (удобно отображать кол-во новых сообщений, например), параметр prefixUrl у них вроде бы мелькает в классе, но реализации проверки по префиксу нет. Ограничение элементов меню по ролям (хотя это можно было и иначе реализовать). Короче косметический подгон под себя.
а другие компоненты с этого пинг понга не пробовал?
сугубо в целях обучения
Не в сети
много проблем с меню получается
Не в сети
много проблем с меню получается
Да нет особых проблем, просто хотелось сделать красиво. С хелперами вариант понравился. Лаконично. Склонировал тот проект bestmomo/laravel5-example себе, много чего интересного подсмотрел. Многоязычность ту же.
Еще раз всем спасибо.
Не в сети
Некоторое время тому назад задавался тем же вопросом, если интересно вот ссылка на тему - https://laravel.ru/forum/viewtopic.php?id=864
Реализация как раз через helpers
Изменено Johnson (31.08.2015 09:28:39)
Не в сети
Я делал через провайдеры с использованием контракта View
Создал класс WidgetsServiceProvider, который регистрирует наши виджеты в шаблонах. Использует составители
<?php
namespace App\Providers;
use View;
use Illuminate\Support\ServiceProvider;
class WidgetsServiceProvider extends ServiceProvider {
public function boot() {
View::composer('*', 'App\Widgets\CompiledAssets');
View::composer('*', 'App\Widgets\Navbar');
View::composer('*', 'App\Widgets\DataArray');
}
public function register() {
}
}
Сам код виджета
<?php
namespace App\Widgets;
use Route;
use Illuminate\Contracts\View\View;
class Navbar {
protected $currRoute = null;
public function compose(View $view){
$this->currRoute = Route::currentRouteName();
$view->with('navbar', $this);
}
public function create($configs){
/**
* Тут генерим хтмл менюхи
*/
}
}
В нужном месте вызываем $navbar->create($config)
Конфиг это передаем массив с деревом
у меня делается примерно так
$navbar->create(config('manager.navbar'))
<?php
return [
'class' => 'nav navbar-nav',
'items' => [
[
'title' => 'Инструменты менеджера',
'route' => 'manager.index',
'children' => [
'items' => [
[
'title' => 'Запросы и резервы',
'route' => 'manager.orders.rezervs'
],
[
'title' => 'Архивы',
'route' => 'manager.orders.archives'
],
[
'title' => 'Отгрузки',
'route' => 'development'
],
[
'title' => 'Расчеты',
'route' => 'development'
],
[
'title' => 'Бухгалтерия',
'route' => 'development'
]
]
]
],
[
'title' => 'Личный кабинет',
'route' => 'development'
],
[
'title' => 'Подбор оборудования',
'route' => 'development'
],
[
'title' => 'Документация на оборудование',
'route' => 'development'
],
[
'title' => 'Рассчет стоимости',
'route' => 'manager.shipment.calculate'
]
]
];
Не в сети
Страницы 1