Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Привет, я вот учу Laravel и вот решил делать сайт на нем(чисто в учебных целях). Вот есть такой шаблон, я его разбил на части(видел красный цветом)
То есть как я понял, мне нужно для каждого вида создать свой контроллер и делать выборку в нем ? и передавать переменую ввид sidebar
Вот так я склевиваю шаблон
@extends('layouts.site')
@section('menu')
@include(env('TEMHE').'.menu')
@endsection
@section('slider')
@include(env('TEMHE').'.slider')
@endsection
@section('content')
@include(env('TEMHE').'.content')
@endsection
@section('sidebar')
@include(env('TEMHE').'.sidebar')
@endsection
Правильно ли ?
Не в сети
нет. ларавель – не битрикс, не надо пытаться из него сделать то чем он не является. контент и есть содержание вида, с остальным надо решить что является лейаутом а что включаемыми элементами. меню так например точно – часть лейаута. в сами включаемые элементы данные могут идти как из контроллера (если они зависимы от контента страницы) или вообще собираться отдельным вью-композером.
Не в сети
нет. ларавель – не битрикс, не надо пытаться из него сделать то чем он не является. контент и есть содержание вида, с остальным надо решить что является лейаутом а что включаемыми элементами. меню так например точно – часть лейаута. в сами включаемые элементы данные могут идти как из контроллера (если они зависимы от контента страницы) или вообще собираться отдельным вью-композером.
Так лучшие меню оставить в лейауте ? а как туда передать переменные ? для каждого создавать контролер
Не в сети
какие туда переменные надо передавать?
Не в сети
какие туда переменные надо передавать?
Смотрите, если я оставляю меню и sibebar и футер в лайоте.
Мне же надо будет из БД выбрать меню, sibebar и футер и передать результаты выборки в шаблон лайот, какой контролер должен это обрабатывать, или как правельно сделать
Не в сети
Можете на моем примери показать (
Не в сети
а зачем хранить меню и сайдбар в базе? если набор страниц фиксированный, их можно прямо в вид захардкодить
Не в сети
а зачем хранить меню и сайдбар в базе? если набор страниц фиксированный, их можно прямо в вид захардкодить
НЕ много не пойму а что в каждом контролеры вызывать выборку меню и сайтбара
Не в сети
если список фиксированный, то и выбирать ничего не надо
Не в сети
вообще если судить по дизайну, выбор ларавеля как минимум странен. сайт – типичная визитка, вордпресс для таких задач идеален
Не в сети
Да я меню хранить буду в БД )) и категории будут в БД. Я знаю что сайт на WP подходит, проще сделать, да и шаблон WordPress я для учебных целий делаю на Laravel на WordPress я бы уже сделал бы его
Не в сети
Скажи, а если я создам котроел MainController который будет делать выборку для меню катрегорий и футера и будет передавать эти значения в вид лайоут
Не в сети
нет, этот код придётся копипастить в каждый экшен, это не дело. для лейаута данные должны выбираться в view composer-е, в документации они описаны. я недавно постил пример – https://laravel.ru/forum/viewtopic.php?pid=11511#p11511
Не в сети
Это в каждом контролеры вызывать это ужас (( А если наследовать и в родительском контрлере вызывать методы и все
Не в сети
Зачем в кажом контролере? Создает глобальный view composer и все
Не в сети
это что view composer где про не го можно почитать
Не в сети
Не в сети
Что то для меня сложно сильно )
Подскажите а способа по проше нету ?)
Не в сети
есть – вордпресс
Не в сети
Не знаю как другие, но я делаю так.
// layout.blade.php
<head>
<meta name="robots" content="@yield('robots', 'index, follow')" />
<meta name="description" content="@yield('description')" />
<meta name="keywords" content="@yield('keywords')" />
<meta name="_token" content="{{ csrf_token() }}">
<title>@yield('title') - Бла бла</title>
</head>
<body>
@include('frontend.partials.header')
<main class="main-content">@yield('content')</main>
@include('frontend.partials.footer')
@yield('js')
<script>$.ajaxSetup({headers:{'X-CSRF-TOKEN':App.token()}});</script>
</body>
</html>
Затем, если надо меню брать из базы, и что б как ты сказал "каждый раз не передавать его в каждом контроллере". Пишем в AppServiceProvider вот это
view()->composer('frontend.partials.header', function($view){
$view->with('categories', Category::orderBy('created_at', 'asc')->active()->get(['slug', 'name',]));
});
Затем в вью header спокойно прогоняем переменную categories по циклу. Но каждый раз будит идти запрос к базе для выборки меню. И лучше бы тут закешировать его.
Profit!
Не в сети
Как то сложновато
Не в сети
Как то сложновато
не сложнее чем на чистом пыхе
Не в сети
matros97 пишет:Как то сложновато
не сложнее чем на чистом пыхе
А скажите а в каком методе вы вызывает view->composer
И как я понял, мне надо header sidebar footer вызвать как у вас и все будет работать
Не в сети
TrueKanonir пишет:matros97 пишет:Как то сложновато
не сложнее чем на чистом пыхе
А скажите а в каком методе вы вызывает view->composer
И как я понял, мне надо header sidebar footer вызвать как у вас и все будет работать
Я же написал
Пишем в AppServiceProvider вот это
view()->composer('frontend.partials.header', function($view){ $view->with('categories', Category::orderBy('created_at', 'asc')->active()->get(['slug', 'name',])); });
В AppServiceProvider этот код надо вставить.
Этот код только для хедера. Если нужен футер, то продублируйте его, и измените зедер на футер.
Но тогда уже 2 дополнительных запроса будет.
Не в сети
Страницы 1