не работает карусель laravel 5.2 только на индексной странице

#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. Извините, как я могу отметить вопрос, где это место? Спасибо