Laravel - проверьте, не пусто ли

Можно ли проверить вид лезвия, если у @yield есть контент или нет?

Я пытаюсь назначить заголовки страниц в представлениях:

@section("title", "hi world")

Итак, я хотел бы проверить вид основного макета... что-то вроде:

<title> Sitename.com {{ @yield('title') ? ' - '[email protected]('title') : '' }} </title>

Ответ 1

Возможно, это более красивый способ сделать это. Но это делает трюк.

@if (trim($__env->yieldContent('title')))
    <h1>@yield('title')</h1>
@endif

Ответ 2

В 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 г..

Ответ 4

Из документа:

@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

Ответ 5

Вы можете просто проверить, существует ли раздел:

if (isset($__env->getSections()['title'])) {

    @yield('title');
}

И вы даже можете сделать еще один шаг и упаковать этот маленький фрагмент кода в расширение Blade: http://laravel.com/docs/templates#extending-blade

Ответ 6

@if (View::hasSection('my_section'))
    <!--Do something-->
@endif

Ответ 7

почему бы не передать название как переменную View::make('home')->with('title', 'Your Title'), это сделает ваш заголовок доступным в $title

Ответ 8

Я не думаю, что вы можете, но у вас есть варианты, такие как использование композитора представления, чтобы всегда предоставлять заголовок $вашим представлениям:

View::composer('*', function($view)
{
    $title = Config::get('app.title');

    $view->with('title', $title ? " - $title" : '');
});

Ответ 9

Не можете ли вы сделать:

layout.blade.php

<title> Sitename.com @section("title") Default @show </title>

И в файле subemplate.blade.php:

@extends("layout")

@section("title") My new title @stop

Ответ 10

Чтобы проверить, не использовать ярлык '@', но использовать длинную форму: Раздел.

<?php
  $title = Section::yield('title');
  if(empty($title))
  {
    $title = 'EMPTY';
  }

  echo '<h1>' . $title . '</h1>';
?>

Ответ 11

На основе ответа Collin Jame, если это не очевидно, я бы рекомендовал что-то вроде этого:

<title>
  {{ Config::get('site.title') }} 
  @if (trim($__env->yieldContent('title')))
    - @yield('title')
  @endif
</title>

Ответ 12

Иногда у вас есть код, который вы хотите включить только в этот раздел. Для этой проблемы я только что нашел это решение:

@if (filled(View::yieldContent('sub-title')))
    <h2>@yield('sub-title')</h2>
@endif