Laravel: передать переменную на вкладку без использования Javascript - PullRequest
1 голос
/ 31 мая 2019

Я создаю страницу индекса, в которой я показываю заказы, разделенные на три таблицы: «входящие», «in_progress», «готовые»

По сути, эта же таблица показана три раза (и разделена на другую вкладку)

<table class="table table-striped table-hover dataTables-example">
    <thead class="thead-dark">
        <tr>
            <th>Id</th>
            <th>Eingang</th>
            <th>Auftrag id</th>
            <th>Ort</th>
        </tr>
    </thead>
    <tbody>
        @foreach($all_ as $element)
        @if($element->status === 'in_progress')
        <tr>
            <td>{{$element->id}}</td>
            <td class="gradeX">{!! $element->created_at->format('D j M Y, G:i:s') !!}</td>
            <td><a href="{{route('orders.show', $element->title)}}">{!! $element->title !!}</a></td>
            <td>{!! $element->address->plz->locality !!}</td>
        </tr>
        @endif
        @endforeach
    </tbody>
</table>

Я сохранил таблицу в другом файле и назвал ее так: @ include ('dashboard.orders.includes.table_orders')

....
<div class="tab-content py-3 px-3 px-sm-0" id="nav-tabContent">
    <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">
        <!-- I need to call here the partial and pass status="incoming" -->
        @include('dashboard.orders.includes.table_orders')
    </div>

    <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">
        <!-- I need to call here the partial and pass status="in progress" -->
        @include('dashboard.orders.includes.table_orders')
    </div>

    <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">
        <!-- I need to call here the partial and pass status="ready" -->
        @include('dashboard.orders.includes.table_orders')
    </div>
</div>

Модель выглядит так:

$element [
    "id" => 1
    "title" => "KFZ_0001_May_2019"
    "details" => "Lorem Ipsums dolor..."
    "status" => "in progress"    // <---or incoming or ready
    "created_at" => "2019-05-31 09:14:02"
    "updated_at" => "2019-05-31 11:16:55"
    "deleted_at" => null
  ]

Вопрос:

Как мне вызвать внешний партиал и передать переменную «status», чтобы показать ордера, разделенные каждый в соответствующей таблице?

Все три таблицы показаны на одной странице!

Я бы хотел не использовать javascript только для этого.

Ответы [ 3 ]

2 голосов
/ 31 мая 2019

Вы можете передать переменную в включенный блейд-файл, просто передав массив в качестве второго параметра:

<div class="tab-content py-3 px-3 px-sm-0" id="nav-tabContent">
    <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">
        @include('dashboard.orders.includes.table_orders', ['status' => 'incoming'])
    </div>

    <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">
        @include('dashboard.orders.includes.table_orders', ['status' => 'in_progress'])
    </div>

    <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">
        @include('dashboard.orders.includes.table_orders', ['status' => 'ready'])
    </div>
</div>

и внутри вашего table_orders шаблона:

@foreach($all_ as $element)
    @if($element->status === $status)
    <tr>
        {{ .. your row format }}
    </tr>
    @endif
@endforeach

Если вы хотите еще больше обобщить свой код, без необходимости повторять 3 раза одно и то же включение и легко добавлять различные статусы, вы можете передать в представление такой объект, как:

$tabs = [
  ['status' => 'incoming', 'id' => 'nav-home', 'label' => 'nav-home-tab'],
  ['status' => 'in_progress', 'id' => 'nav-profile', 'label' => 'nav-profile-tab'],
  ['status' => 'ready', 'id' => 'nav-contact', 'label' => 'nav-contact-tab'],
];

и по вашему мнению:

@foreach($tabs as $tab)
    <div class="tab-pane fade show active" id="{{ $tab['id'] }}" role="tabpanel" aria-labelledby="{{ $tab['label'] }}">
        @include('dashboard.orders.includes.table_orders', ['status' => $tab['status']])
    </div>
@endforeach
1 голос
/ 31 мая 2019

Насколько я вас понял, я бы сделал что-то вроде этого:

@include('dashboard.orders.includes.table_orders', ['status' => 'incoming'])

, а затем

@foreach($all_ as $element)
    @if($element->status === $status)
        ...
    @endif
@endforeach

Если вы хотите вывести некоторые данные три раза, а разницу только в некоторых переменных, вы не нарушите принцип СУХОГО.

0 голосов
/ 31 мая 2019

Попробуйте сделать это так @include('partial_name', $element)

Затем вы можете получить доступ к переменной как к имени, которое вы передали включаемому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...