#laravel #file #indexing #carousel #display
#laravel #файл #индексирование #карусель #отобразить
Вопрос:
Я использую laravel 5.2 и пытался отобразить карусель только на индексной странице, но не работает. Я выбрал, чтобы коды не «распространялись» на индексной странице, они хранятся в: public/carousel/carousel.php тоже (не …blade.php ).
route.php:
Route::get('/', 'HomeController@index')
HomeController.php:
{
$cats = Category::all();
$carousel = public_path('carousel/carousel.php');
//$carousel = storage_path('public/carousel/carousel.php');
return view('layouts.app', compact('cats', 'carousel'));
}
layouts/app.blade.php:
{{-- @include('carousel/carousel');--}}
@if($carousel)
{{ $carousel }}
@endif
@yield('content')
В итоге отображается только: C:wampwwwapp_namepubliccarousel/carousel.php
.
Можете ли вы мне помочь или указать на другой лучший способ?
Комментарии:
1. Каково содержимое
carousel.php
?2.
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> <ol class="carousel-indicators"> <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li> <li data-target="#carouselExampleIndicators" data-slide-to="1"></li> <li data-target="#carouselExampleIndicators" data-slide-to="2"></li> </ol> ........................ </div>
3. Содержимое кода точно такое же, как в документации: getbootstrap.com/docs/4.0/components/carousel
Ответ №1:
В вашем контроллере вы передаете в представление переменную с именем $carousel
, которая является путем к вашему файлу, как вы определили здесь:
$carousel = public_path('carousel/carousel.php');
Это причина, по которой он отображает только строку. Вам нужно получить фактическое содержимое файла:
$carousel = file_get_content(public_path('carousel/carousel.php'));
Лучшим и более похожим на laravel способом сделать это было бы переименовать файл в carousel.blade.php
, сохранить его в resources/views
папке и просто включить его из вашего основного блейд-файла (без необходимости делать что-либо в контроллере):
@include('carousel')
Если вам нужно отобразить карусель только на определенных страницах, вы можете просто передать переменную $carousel = true
на страницах, которые должны ее отображать:
$carousel = true;
return view('layouts.app',compact('carousel'));
И в вашем представлении блейда включайте файл carousel только тогда, когда эта переменная присутствует и имеет значение true:
@includeWhen(isset($carousel) amp;amp; $carousel, 'carousel')
Комментарии:
1. Спасибо, gbalduzzi, я сделал именно то, что вы сказали, и это работает. <br> Остается моя старая проблема: карусель отображается на всех страницах, но рекомендуется указывать только на первую страницу (layouts.app). Последний способ, который я использовал как $ carousel в HomeControlles. Но: на других страницах контроллера, которые я упомянул: $ carousel = FALSE … но это не сработало.<br> Можете ли вы посоветовать мне, как это сделать? <br> Я вернусь, чтобы проверить через несколько часов. Спасибо за все.
2. Я отредактировал свой ответ, чтобы включить способ условного контроля присутствия carousel с вашего контроллера
3. Извините, я не сообщил вам, что использую Laravel 5.2, в котором нет директивы @includeWhen(). Можете ли вы помочь мне, что я могу сделать, чтобы отображать карусель только на главной странице, а не на других страницах. Спасибо.
4.
@if(isset($carousel) amp;amp; $carousel) @include('carousel') @endif
5. Извините, как я могу отметить вопрос, где это место? Спасибо