У меня есть серия виджетов, которые выглядят следующим образом:
Каждый виджет имеет кнопку в правом верхнем углу, которая либо добавляет, либо удаляетВиджет в зависимости от того, где вы находитесь в приложении, здесь есть раздел кода:
div class="col-xs-2">
@if(Route::current()->uri() == 'welcome')
<form action="{{ action('WidgetController@destroy', $widgetNo ) }}" method="post">
@csrf @method('delete')
<button type="submit" class="widget">
<i class="fa fa-bars "></i>
</button>
</form>
@elseif(Route::current()->uri() == 'widget-library')
@foreach($user->widgets as $widget)
@if($widget->widget_id == $widgetNo)
<i class="fa fa-bars "></i>
@else
<form action="{{action('WidgetController@store')}}" method="POST">
@csrf
<input type="hidden" name="user_id" value="{{ $user->id }}">
<input type="hidden" name="widget_id" value="{{ $widgetNo }}">
<button type="submit" class="widget">
<i class="fa fa-plus "></i>
</button>
</form>
@endif
@endforeach
@endif
</div>
Когда в «Библиотеке виджетов» код проверяет, какие виджеты есть у пользователя, и ставит плюс или полосу(поскольку я хочу, чтобы пользователь не добавлял виджет, который у него уже есть).
Когда у вас есть только один виджет, он выглядит так:
Как видите, это работает.
Однако есть две проблемы.
- Когда у пользователя более одногоВиджет цикла foreach многократно повторяется, создавая несколько кнопок.
- Кроме того, когда у пользователя нет виджетов, значки не отображаются, поскольку они созданы в цикле foreach.
Сами виджеты являются просто HTML, поэтому для добавления уникального идентификатора я сделал следующее в моем WПредставление библиотеки idget.
@include('widgets.quick-search-full-width', ['widgetNo' => 1])
@include('widgets.calendar', ['widgetNo' => 2])
@include('widgets.suggestion', ['widgetNo' => 3])
@include('widgets.task', ['widgetNo' => 4])
@include('widgets.quick-search', ['widgetNo' => 5])
@include('widgets.message', ['widgetNo' => 6])
@include('widgets.find-expert', ['widgetNo' => 7])
@include('widgets.holiday', ['widgetNo' => 8])
@include('widgets.expenses', ['widgetNo' => 9])
@include('widgets.snap-pole', ['widgetNo' => 10])
@include('widgets.teams-cms', ['widgetNo' => 11])
@include('widgets.events-cms', ['widgetNo' => 12])
@include('widgets.team-cms', ['widgetNo' => 13])
@include('widgets.article-todo', ['widgetNo' => 14])
@include('widgets.article-cms', ['widgetNo' => 15])
@include('widgets.vacancies', ['widgetNo' => 16])
@include('widgets.yammer', ['widgetNo' => 17])
@include('widgets.poll-results', ['widgetNo' => 18])
Как вы можете видеть, я передаю идентификатор для каждого виджета.
Затем на главной странице у меня есть большой оператор switch, чтобы решить, какая частьдля рендеринга.
@foreach ($user->widgets as $widget)
@switch($widget->widget_id)
@case (1)
@include('widgets.quick-search-full-width', ['widgetNo' => 1])
@break;
@case(2)
@include('widgets.calendar', ['widgetNo' => 2])
@break;
@case (3)
@include('widgets.suggestion', ['widgetNo' => 3])
@break;
@case (4)
@include('widgets.task', ['widgetNo' => 4])
@break;
@case (5)
@include('widgets.quick-search', ['widgetNo' => 5])
@break;
@case (6)
@include('widgets.message', ['widgetNo' => 6])
@break;
@case(7)
@include('widgets.find-expert', ['widgetNo' => 7])
@break;
@case (8)
@include('widgets.holiday', ['widgetNo' => 8])
@break;
@case (9)
@include('widgets.expenses', ['widgetNo' => 9])
@break;
@case (10)
@include('widgets.snap-pole', ['widgetNo' => 10])
@break;
@case (11)
@include('widgets.teams-cms', ['widgetNo' => 11])
@break;
@case (12)
@include('widgets.events-cms', ['widgetNo' => 12])
@break;
@case (13)
@include('widgets.team-cms', ['widgetNo' => 13])
@break;
@case (14)
@include('widgets.article-todo', ['widgetNo' => 14])
@break;
@case (15)
@include('widgets.article-cms', ['widgetNo' => 15])
@break;
@case (16)
@include('widgets.vacancies', ['widgetNo' => 16])
@break;
@case(17)
@include('widgets.yammer', ['widgetNo' => 17])
@break;
@case(18)
@include('widgets.poll-results', ['widgetNo' => 18])
@break
@default
<h3>You currently have no widgets</h3>
@endswitch
@endforeach
Я думал, что смогу решить эту проблему простым разрывом цикла foreach, но это не сработало.