2014-01-17 1 views
0

Почему я не могу видеть объект как часть модуля ?.Laravel 4 Templating like .NET

В .NET у вас есть вид и код позади. Иногда нам нужно сделать что-то, что соответствует этой логике, например, сетке с виджетами внутри каждой ячейки. Обычно у виджета есть небольшая коробка с заголовком и контентом, с небольшой логикой, как я могу включить частичное подобное в другое представление, подобное этому.

@extends('jarvis.admin._layouts.default') 

@section('title') 
    Dashboard 
@stop 

@section('main') 
<div class="row-fluid"> 
    <div class="span4"> 
     @yield('first') 

     <div class="jarviswidget" id="widget-id-00"> 
      <header> 
       <h2>{{ $widget['title'] }}</h2>       
      </header> 
      <div> 
       <div class="jarviswidget-editbox"> 
        <div> 
         <label>{{ ucfirst(Lang::get('strings.title')) }}:</label> 
         <input type="text"> 
        </div> 
        <div> 
         <label>{{ ucfirst(Lang::get('strings.style')) }}</label> 
         <span data-widget-setstyle="red" class="red-btn"></span> 
         <span data-widget-setstyle="green" class="green-btn"></span> 
         <span data-widget-setstyle="purple" class="purple-btn"></span> 
         <span data-widget-setstyle="black" class="black-btn"></span> 
         <span data-widget-setstyle="darkgrey" class="darkgrey-btn"></span> 
        </div> 
       </div> 
       <div class="jarviswidget-timestamp"></div> 
       <div class="inner-spacer"> 
        <!-- content goes here --> 
        @yield('wg_content') 

        Content 

       </div> 
      </div> 
     </div> 

    </div> 
    <div class="span4"> 
     @yield('second') 

     <div class="jarviswidget" id="widget-id-00"> 
      <header> 
       <h2>{{ $widget['title'] }}</h2>       
      </header> 
      <div> 
       <div class="jarviswidget-editbox"> 
        <div> 
         <label>{{ ucfirst(Lang::get('strings.title')) }}:</label> 
         <input type="text"> 
        </div> 
        <div> 
         <label>{{ ucfirst(Lang::get('strings.style')) }}</label> 
         <span data-widget-setstyle="red" class="red-btn"></span> 
         <span data-widget-setstyle="green" class="green-btn"></span> 
         <span data-widget-setstyle="purple" class="purple-btn"></span> 
         <span data-widget-setstyle="black" class="black-btn"></span> 
         <span data-widget-setstyle="darkgrey" class="darkgrey-btn"></span> 
        </div> 
       </div> 
       <div class="jarviswidget-timestamp"></div> 
       <div class="inner-spacer"> 
        <!-- content goes here --> 
        @yield('wg_content') 

        Content 

       </div> 
      </div> 
     </div> 

    </div> 
    <div class="span4"> 
     @yield('third') 

     <div class="jarviswidget" id="widget-id-00"> 
      <header> 
       <h2>{{ $widget['title'] }}</h2>       
      </header> 
      <div> 
       <div class="jarviswidget-editbox"> 
        <div> 
         <label>{{ ucfirst(Lang::get('strings.title')) }}:</label> 
         <input type="text"> 
        </div> 
        <div> 
         <label>{{ ucfirst(Lang::get('strings.style')) }}</label> 
         <span data-widget-setstyle="red" class="red-btn"></span> 
         <span data-widget-setstyle="green" class="green-btn"></span> 
         <span data-widget-setstyle="purple" class="purple-btn"></span> 
         <span data-widget-setstyle="black" class="black-btn"></span> 
         <span data-widget-setstyle="darkgrey" class="darkgrey-btn"></span> 
        </div> 
       </div> 
       <div class="jarviswidget-timestamp"></div> 
       <div class="inner-spacer"> 
        <!-- content goes here --> 
        @yield('wg_content') 

        Content 

       </div> 
      </div> 
     </div> 

    </div> 
</div> 

<div class="row-fluid"> 
    <div class="span12"> 
    </div> 
</div> 
@stop 

Где каждый @yield загрузит небольшой виджет обрабатывающего немного логики или даже другой шаблон с другим видом вложенным.

Например, @yield ('first') загрузит окно, которое представляет собой другой шаблон с выходом внутри, и переменную как заголовок. Этот вложенный доход будет иметь другой доход или контент ... тогда тот же самый ящик, который мы используем для коробки, будет использоваться в другой раз для рендеринга @yield ('second') с другим заголовком и другим контентом, который может использоваться так же, как и первый выход.

Я не понимаю, как сделать этот каскад с помощью системы шаблонов лезвий. Есть ли способ сделать что-то подобное?

Я знаю, что это сложно, но если вы когда-либо использовали .net, вы могли бы понять, что я имею в виду.

Спасибо и извините за мой английский.

У этого есть сходство с моделью HMVC, но это не то же самое.

+0

Вы нашли решение? Обычно я обрабатываю шаблон и частичные части клиента с помощью AngularJS и его директив, например, но только потому, что мне не нужна операция на стороне сервера (в противном случае мне придется отправить новый запрос на сервер для этой цели) –

ответ

0

Я нашел решение ...

немного сложнее объяснить здесь, но я собираюсь сделать все возможное.

Попробуйте это:

шаблон по умолчанию (default.blade.php)

<!DOCTYPE html> 
    <html lang="en"> 
    <head></head> 

    <body> 

     <div class="fluid-container"> 

     @yield('main') 

     </div> 

    </body> 
    </html> 

шаблон содержимого по умолчанию (mypage.blade.php)

@extends('_layouts.default') 

@section('main') 
    <div id="widget-grid"> 
     <div class="row-fluid"> 
      <article class="span12"> 
       @include('_modules.mymodule') 
      </article> 
     </div> 
    </div> 
@stop 

модуль template (mymodule.blade.php)

Мы посылаем некоторые переменные в общий шаблон виджета

@extends('admin._partials.widget', array('widget' => array('title' => 'title', 'id' => 'some_id', 'style' => 'your: style'))) 

@section('wg_content') 
    <!-- Your widget content goes here --> 
@overwrite 

общий шаблон (widget.blade.php)

Your title $widget['title'] 
Your id $widget['id'] 
Your style $widget['style'] 
<!-- content --> 
@yield('wg_content') 

Дерево каталогов просмотров будет:

views 
    _layouts 
    default.blade.php 
    _partials 
    widget.blade.php 
    _modules 
    mymodule.blade.php 
    page 
    mypage.blade.php 

Теперь, когда вы делаете вид с контроллера, вы должны позвонить mypage.

Волшебная директива @overwrite в нижней части шаблона модуля.

Теперь, когда вы вызываете модуль, система получает шаблон виджета и переносит mymodule, а затем добавляет его на страницу и, наконец, обертывает все объекты по умолчанию, которые являются основным шаблоном.

Это поможет вам разделить шаблон с другими. Я знаю, что у тебя есть вопрос, СПРОСИТЕ! XD