2014-12-02 2 views
1

У меня проблема с моим наследованием с использованием шаблона клинка. Так что у меня есть мой основной шаблон: /layouts/main.blade.phpШаблон наследования с использованием Blade

@section('oneNews') 
<div class="row"> 
    <div class="large-12 columns pad_0"> 
     <div class="container"> 
      <div id="da-slider" class="da-slider"> 
      @foreach($aTopNews as $topNews) 
       <div class="da-slide"> 
        <h2>{{ $topNews['title'] }}</h2> 
        <p>{{ $topNews['content'] }}.</p> 
        <a href="/news/view/{{ $topNews['id'] }}" class="da-link">Read</a> 
        <div class="da-img">{{ HTML::image($topNews['image']) }}</div> 
       </div> 
       @endforeach 
       <nav class="da-arrows"> 
        <span class="da-arrows-prev"></span> 
        <span class="da-arrows-next"></span> 
       </nav> 
      </div> 
     </div> 
    </div> 
</div> 

Теперь я хочу, чтобы наследовать этот шаблон в другой шаблон

@extends('layouts.main') 

@section('oneNews') 
    <div class="row"> 
    <div class="large-12 columns pad_0 marg-top-20"> 
     Registru on-line 
    </div> 
    </div> 
@stop 

Контроллер:

public function getIndex() 
{ 
    return View::make('layouts.main') 
     ->with('aNews',  \News::where('type', '=', '0')->get()) 
     ->with('aTopNews', \News::where('type', '=', '1')->get()) 
     ->with('aNotice', \News::where('type', '=', '2')->get()); 
} 

Но я получаю сообщение об ошибке: «Неопределенная переменная: aTopNews», Помогите мне пожалуйста

+1

Вы определяете '$ aTopNews' при вызове представления? пожалуйста, покажите нам свой код контроллера. – Jerodev

+0

Вы проверили, что вы делаете правильный шаблон? – fmgonzalez

+0

Я отредактировал мой вопрос –

ответ

1

Прежде всего, с наследованием шаблона вы не возвращаете представление макета, вы возвращаете представление содержимого, а механизм Blade Laravel позаботится об извлечении и рендеринге правильного макета: это цель @extends в начале файла , Таким образом, в вашем контроллере вы должны иметь:

return View::make('content'); // assuming content.blade.php contains the code in your example 

Одна вещь наследования шаблонов является то, что она не проходит по переменным от ребенка (содержание) вид на макете. Таким образом, View::make('content')->with('aTopNews', $aTopNews) сделает только aTopNews, доступный для просмотра content, а не вид layouts.main, который он расширяет. Для того, чтобы сделать его доступным в макете просмотра можно использовать View::share(), что делает переменную для всех видов:

View::share('aTopNews', \News::where('type', '=', '1')->get()); 

Кроме того, для раздела наследства работать, в вашем файле макета вы должны закончить @section('oneNews') с @show.

Документация Laravel очень хорошо объясняет, как работает Blade Template Inheritance.

Смежные вопросы