Ответ 1
Возможно, это более красивый способ сделать это. Но это делает трюк.
@if (trim($__env->yieldContent('title')))
<h1>@yield('title')</h1>
@endif
Можно ли проверить вид лезвия, если у @yield есть контент или нет?
Я пытаюсь назначить заголовки страниц в представлениях:
@section("title", "hi world")
Итак, я хотел бы проверить вид основного макета... что-то вроде:
<title> Sitename.com {{ @yield('title') ? ' - '[email protected]('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 г..
Для тех, кто смотрит на него сейчас (2018+), вы можете использовать:
@hasSection('name')
@yield('name')
@endif
Смотрите: https://laravel.com/docs/5.6/blade#control-structures
Из документа:
@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
Вы можете просто проверить, существует ли раздел:
if (isset($__env->getSections()['title'])) {
@yield('title');
}
И вы даже можете сделать еще один шаг и упаковать этот маленький фрагмент кода в расширение Blade: http://laravel.com/docs/templates#extending-blade
@if (View::hasSection('my_section'))
<!--Do something-->
@endif
почему бы не передать название как переменную 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>
И в файле subemplate.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 (filled(View::yieldContent('sub-title')))
<h2>@yield('sub-title')</h2>
@endif