Можно ли проверить вид лезвия, если у @yield есть контент или нет?
Я пытаюсь назначить заголовки страниц в представлениях:
@section("title", "hi world")
Поэтому я хотел бы проверить внешний вид макета … что-то вроде:
<title> Sitename.com {{ @yield('title') ? ' - '.@yield('title') : '' }} </title>
Вероятно, есть более красивый способ сделать это. Но это делает трюк.
@if (trim($__env->yieldContent('title'))) <h1>@yield('title')</h1> @endif
В Laravel 5 теперь мы имеем метод hasSection
который можно вызвать на фасаде View
.
Вы можете использовать View::hasSection
чтобы проверить, является ли @yeild
пустым или нет:
<title> @if(View::hasSection('title')) @yield('title') @else Static Website Title Here @endif </title>
Это условие проверяет, был ли раздел с названием названия указан в нашем представлении.
Совет . Я вижу, что многие новые ремесленники создали свои титульные разделы следующим образом:
@section('title') Your Title Here @stop
но вы можете упростить это, просто передав значение по умолчанию в качестве второго аргумента:
@section('title', 'Your Title Here')
Метод hasSection
был добавлен 15 апреля 2015 года .
Из документов:
@yield('section', 'Default Content');
Введите свой основной макет, например «app.blade.php», «main.blade.php» или «master.blade.php»,
<title>{{ config('app.name') }} - @yield('title', 'Otherwise, DEFAULT here')</title>
И на конкретной странице просмотра (файл клинка) введите следующее:
@section('title') My custom title for a specific page @endsection
Для тех, кто смотрит на него сейчас, вы можете использовать:
@hasSection('name') @yield('name') @endif
Вы можете просто проверить, существует ли раздел:
if (isset($__env->getSections()['title'])) { @yield('title'); }
И вы даже можете сделать еще один шаг и упаковать этот маленький фрагмент кода в расширение Blade: http://laravel.com/docs/templates#extending-blade
почему бы не передать название как переменную View::make('home')->with('title', 'Your Title')
это сделает ваш заголовок доступным в $title
Я не думаю, что вы можете, но у вас есть варианты, например, с использованием композитора представления, который всегда предоставляет заголовок $ для ваших просмотров:
View::composer('*', function($view) { $title = Config::get('app.title'); $view->with('title', $title ? " - $title" : ''); });
Не можете ли вы сделать:
layout.blade.php
<title> Sitename.com @section("title") Default @show </title>
И в subtemplate.blade.php:
@extends("layout") @section("title") My new title @stop
Способ проверки – не использовать ярлык «@», а использовать длинную форму: раздел.
<?php $title = Section::yield('title'); if(empty($title)) { $title = 'EMPTY'; } echo '<h1>' . $title . '</h1>'; ?>
Основываясь на ответе Collin Jame, если это не очевидно, я бы рекомендовал что-то вроде этого:
<title> {{ Config::get('site.title') }} @if (trim($__env->yieldContent('title'))) - @yield('title') @endif </title>
@if (View::hasSection('my_section')) <!--Do something--> @endif