Загрузить определенные ресурсы страницы, используя @include

Как загрузить определенные ресурсы страницы с помощью @include механизма шаблонов блейдов Laravel?

Ниже приведено содержимое моего макета Master (master.blade.php):

<head>
    @section('styles')
        {{-- Some Master Styles --}}
    @show
</head>
<body>
    {{-- Header --}}
    @section('header')
        @include('header')
    @show

    {{-- Content --}} 
    @section('content')
        {{-- Content for page is extending this view --}}
    @show

    {{-- Footer --}}
    @section('footer')
        @include('footer')
    @show
</body>

На данной странице я использую свой мастер-шаблон следующим образом:

@extends('master')

@section('styles')
    @parent
    {{-- Page Stylesheet --}}
@endsection

Приведенный выше подход — это то, что я использую, чтобы попытаться загрузить свой стиль страницы в раздел <head>.

Он не работает должным образом, как ожидалось.

Я также хотел бы загрузить другие ресурсы, специфичные для страницы, в нижний колонтитул, используя тот же подход; как я могу сделать это эффективно?


person Ryanthehouse    schedule 21.09.2016    source источник


Ответы (1)


Вам не нужно делать

@extends('master')

@section('styles')
    @parent
    {{-- Page Stylesheet --}}
@endsection

на соответствующих страницах, чтобы загружать таблицы стилей для конкретных страниц.

Вам следует загружать таблицы стилей для конкретных страниц для файла master.blade.php, чтобы ваш код оставался сухим.

Для этого вы должны указать маршрут или ожидаемый формат URL-адреса таких страниц, а затем загрузить соответствующие таблицы стилей.

Вы можете сделать это в файле master.blade.php следующим образом:

@section('styles')
    @if(Request::is('transactions/generate-invoice'))
        @include('generate-invoice-css')
    @elseif(Request::is('transactions/users'))
        @include('users-css')
    @endif
@show

Где generate-invoice-css.blade.php содержит таблицы стилей, которые вы хотите загрузить для содержимого страницы, доступного в yoursite.com/transactions/generate-invoice и users-css.blade.php, а yoursite.com/transactions/users.

Для данного шаблона, например: те же таблицы стилей для страниц под transactions, вы можете сделать следующее:

@if(Request::is('transactions*'))

используя подстановочный знак *.

Чтобы загрузить данный ресурс в место, отличное от раздела <head> ваших страниц, просто используйте тот же подход и при необходимости адаптируйте его.

Чтобы загрузить определенные ресурсы страницы с @include() из вашего master.blade.php, используйте этот подход (в вашем файле master.blade.php):

@section('styles')
    @include('styles')
@show

где styles.blade.php должен содержать ваши условия для загрузки соответствующих ресурсов, удовлетворяющих вашим требованиям для целей, например:

@if(Request::is('transactions/generate-invoice'))
    @include('generate-invoice-css')
@elseif(Request::is('transactions/users'))
    @include('users-css')
@endif

Как содержание вашего styles.blade.php.

person nyedidikeke    schedule 21.09.2016
comment
Спасибо @nyedidikeke за ответ. Что касается включения, я добавил его в раздел, потому что в Master будет больше, что способствует этому. Что касается загрузки таблицы стилей, как вы упомянули, это работает, но она добавляет встроенную таблицу стилей. Я надеялся, что есть более чистый способ сделать это, добавляя таблицу стилей в голову, как это происходит с расширениями макета при загрузке стилей. Это может быть не вариант, но я пытаюсь выяснить, возможно ли это вообще. - person Ryanthehouse; 21.09.2016
comment
Затем вы должны включить его в свой styles.blade.php, если хотите, в свой раздел <head>. Основываясь на своем вопросе, вы сказали, что включили его в свой раздел нижний колонтитул. - person nyedidikeke; 21.09.2016
comment
Обновлен мой ответ на основе вашего представления выше, чтобы вместо этого включить ваши таблицы стилей в раздел <head>. - person nyedidikeke; 21.09.2016
comment
Хорошо, я думаю, я просто не ясно изложил свой вопрос. Я надеялся, что каждое представление сможет загрузить свою собственную таблицу стилей. Например, когда нижний колонтитул включен, он импортирует свою собственную таблицу стилей, но шаблон блейда помещает ‹связь› с остальным импортом таблицы стилей в ‹head›. Кажется, это происходит, когда страница расширяет макет и загружает таблицу стилей. - person Ryanthehouse; 21.09.2016
comment
Ваши последние комментарии говорят о том, что, возможно, это просто не правильный подход, насколько я понимаю. Еще раз спасибо за помощь! - person Ryanthehouse; 21.09.2016
comment
Можете ли вы уточнить немного дальше? Я не понимаю, что вы имели в виду в своем последнем комментарии выше. Лучшее место для таблиц стилей — это раздел <head> вашего HTML-файла. В своем вопросе вы выразили включение его в свой нижний колонтитул вместо того, что я ранее отправил, но отредактировал, поскольку вы повторно выразили это более чистым способом в разделе <head>. Есть ли что-то, что, по вашему мнению, не было учтено или что я не поправился? - person nyedidikeke; 21.09.2016
comment
Я ценю ваше терпение. Я пересмотрел исходный вопрос, чтобы уточнить его. Я надеюсь, что это внесет ясность. - person Ryanthehouse; 21.09.2016
comment
Обновлен мой ответ на основе ваших разъяснений. - person nyedidikeke; 21.09.2016
comment
Я ценю ваш совет. Я вижу, что ты говоришь. Спасибо. - person Ryanthehouse; 21.09.2016