Как я могу создать частичный шаблон в Laravel? - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь понять, как достичь того, что я задумал, используя лезвие laravel. Я хочу создать шаблон таблицы многократного использования, который я могу расширить (например, другой заголовок и тело для разных страниц). Из проведенного мной исследования я понял, что шаблоны предназначены только для общей структуры страницы, а не для отдельных компонентов. Итак, как я мог этого добиться? Пример ниже

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

<table class="table-selectable table table-hover bg-white">
  <thead class="thead-dark">
    <th>Image</th>
    <th>Title</th>
    <th>Tags</th>
    **{{SOME APPENDED HEADERS DEPENDING ON PAGE}}**
  </thead>
  <tbody>
    @if(!empty($objects))
      @foreach($objects as $object)
        <tr onclick="someFunction()">
          <td class="align-middle"><img class="list-image" src="some-image.jpg"></td>
          <td class="align-middle"><h5>Title</h5></td>
          <td class="align-middle">
              Tags
          </td>
          **{{SOME APPENDED BODY FIELDS DEPENDING ON PAGE}}**
        </tr>
      @endforeach
    @endif
  </tbody>
</table>

Вроде бы довольно простая задача, но я не смог найти для нее решения.

1 Ответ

1 голос
/ 10 июля 2020

Blade позволяет это из коробки.

Макеты ( Документы )

<!-- Stored in resources/views/layouts/app.blade.php -->

<html>
    <head>
        <title>App Name - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            This is the master sidebar.
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

включает ( Документы )

Затем вы можете добавить небольшие шаблоны в свой макет, используя include

@include('view.name', ['some' => 'data'])

Компоненты ( Документы )

И, наконец, если вы хотите, чтобы у вас был еще больший контроль, попробуйте компоненты.

Примечание : Компоненты теперь немного сложнее, чем были, но по-прежнему имеют обратную совместимость. Таким образом, вы все еще можете определять компоненты следующим образом:

modal.blade (Компонент)

<!-- Modal -->
<div 
    class="modal fade {{ $class ?? '' }}" 
    id="{{ $id }}" 
    tabindex="-1" 
    role="dialog" 
    aria-labelledby="{{ $id }}Title" 
    aria-hidden="true"
>
    <div class="modal-dialog modal-dialog-centered {{ $size ?? '' }}" role="document">
        <div class="modal-content shadow">
            <div class="modal-header">
                <h5 class="modal-title font-weight-normal" id="{{ $id }}Title">
                  {{ $title }}
                </h5>
                <button type="button" class="close close-icon" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            @if ($form) {{ $action }} @endif
            <div class="modal-body">
                {{ $body }}
            </div>
            <div class="modal-footer">
                {{ $footer }}
            </div>
            @if ($form) {!! Form::close() !!} @endif
        </div>
    </div>
</div>

Использование

@component('components.modal', [
    'id'    => 'myModalID',
    'class' => 'modal-info',
    'form'  => true
])
    @slot('title')
        My Modal
    @endslot

    @slot('action')
        {!! Form::open([]) !!}
    @endslot

    @slot('body')
        Some content
    @endslot

    @slot('footer')
        <button type="submit" class="btn">
            Submit
        </button>
    @endslot
@endcomponent
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...