Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 18.08.2015 14:40:29

Лаконичное создание меню навигации

Ребята, что-то мучаюсь с индикацией активного пункта меню сайта...
Все элементы реализованы через стандартные бутстрапные ul > li с классом active для активного пункта.
Как наиболее коротким и красивым способом сделать такую "подсветку" активного пункта?

Пробовал через @if (Route::currentRouteName() = '...') - но что-то пока не разобрался.
Наверное надо еще полное пространство имен указывать для фасада Route?

Или вообще в Middleware / ServiceProviders формирование массива пунктов вынести?
Может, подскажете проверенные варианты wink

Не в сети

#2 19.08.2015 12:20:02

Re: Лаконичное создание меню навигации

Эхх, все молчат(
Хотя бы как правильно проверять текущий путь внутри @if вставки во вьюшке, подскажите?
Т.е. если есть три роута:

/
/profile
/about

- то как проверять "где мы сейчас", чтобы выделять классом active пункт меню?

Не в сети

#3 19.08.2015 13:26:28

iy_expert
Откуда: Ukraine. Rivne
Сообщений: 19

Re: Лаконичное создание меню навигации

Я так делал
<a href="$item->url" {{ Request::is($item->url) ? 'class="active"' : null }}>

Не в сети

#4 19.08.2015 14:03:08

Re: Лаконичное создание меню навигации

Не в сети

#5 19.08.2015 19:55:11

Re: Лаконичное создание меню навигации

Спасибо, ребята. Буду пробовать.
Просто тема актуальная, скажем так, для 90% проектов. И было интересно, кто как делает.
Думал вообще формировать массив кнопок меню в middleware, но сомневался - может слишком сложно будет))

Не в сети

#6 19.08.2015 23:09:15

Re: Лаконичное создание меню навигации

В той же документации на laravel.ru есть https://laravel.ru/docs/v5/requests#информация

Изменено php_dev (19.08.2015 23:10:20)

Не в сети

#7 19.08.2015 23:25:22

Re: Лаконичное создание меню навигации

Если говорите, что актуально во многих проектах, то вот еще пример вынести в helpers https://github.com/bestmomo/laravel5-ex … .php#L3-L8 и примеры использования там же во views найдете.

Не в сети

#8 20.08.2015 10:42:18

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: Лаконичное создание меню навигации

Пример на jQuery — в базовую вьюху к скриптам добавить что-то вроде
$('#navmenu .nav li:has(a[href="'+ document.location + '"])').addClass('active');

Не в сети

#9 20.08.2015 10:53:03

stuchin
Откуда: Волгоград
Сообщений: 68

Re: Лаконичное создание меню навигации

с хелпером вроде поизящней код смотрится, хотя кому как

Не в сети

#10 20.08.2015 11:20:44

Re: Лаконичное создание меню навигации

в зависимости от ситуации у меня есть несколько проверок

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, допилил под себя

Не в сети

#11 20.08.2015 12:48:17

stuchin
Откуда: Волгоград
Сообщений: 68

Re: Лаконичное создание меню навигации

ded100let пишет:

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

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

Изменено stuchin (20.08.2015 12:51:39)

Не в сети

#12 20.08.2015 13:45:46

Re: Лаконичное создание меню навигации

stuchin пишет:

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

добавил сущностей типа dropdown, link, header, divider, html. у каждой сущности свои параметры, методы. Мне так проще. У Pingpong-labs все в куче. Зацыкленность добавил, чтобы можно было делать выпадающее меню, содержащее в себе другое выпадающее меню и так без конца. Возможность ботстраповский badge добавлять к элементам меню (удобно отображать кол-во новых сообщений, например), параметр prefixUrl у них вроде бы мелькает в классе, но реализации проверки по префиксу нет. Ограничение элементов меню по ролям (хотя это можно было и иначе реализовать). Короче косметический подгон под себя.

stuchin пишет:

а другие компоненты с этого пинг понга не пробовал?

сугубо в целях обучения

Не в сети

#13 20.08.2015 19:42:28

stuchin
Откуда: Волгоград
Сообщений: 68

Re: Лаконичное создание меню навигации

много проблем с меню получается

Не в сети

#14 30.08.2015 01:15:47

Re: Лаконичное создание меню навигации

stuchin пишет:

много проблем с меню получается

Да нет особых проблем, просто хотелось сделать красиво. С хелперами вариант понравился. Лаконично. Склонировал тот проект bestmomo/laravel5-example себе, много чего интересного подсмотрел. Многоязычность ту же.
Еще раз всем спасибо.

Не в сети

#15 31.08.2015 09:28:13

Re: Лаконичное создание меню навигации

Некоторое время тому назад задавался тем же вопросом, если интересно вот ссылка на тему - https://laravel.ru/forum/viewtopic.php?id=864
Реализация как  раз через helpers

Изменено Johnson (31.08.2015 09:28:39)

Не в сети

#16 03.12.2015 13:46:42

Re: Лаконичное создание меню навигации

Я делал через провайдеры с использованием контракта 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'
        ]
    ]
];

Не в сети

Подвал раздела