【问题标题】:Laravel 4 Templating like .NETLaravel 4 模板,如 .NET
【发布时间】:2014-02-07 03:16:31
【问题描述】:

为什么我不能将视图作为模块的一部分?

在 .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,一个变量作为标题。这个嵌套的产量将有另一个产量或内容......然后我们用于该框的同一个框将被再次使用以另一个标题和另一个内容呈现@yield('second'),这可能与第一产量。

我不明白如何使用刀片模板系统制作这种级联。有没有办法做类似的事情?

我知道这很复杂,但如果你曾经使用过 .net,你就会明白我的意思。

感谢和抱歉我的英语。

这样做与HMVC模型有相似之处,但又不一样。

【问题讨论】:

  • 您找到解决方案了吗?通常我使用 AngularJS 和他的指令在客户端处理模板和部分,但只是因为我不需要任何服务器端操作(否则我必须为此目的向服务器发送新请求)

标签: templates laravel blade


【解决方案1】:

我找到了解决办法...

这里解释起来有点复杂,但我会尽力而为。

试试这个:

默认模板(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

模块模板 (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,然后将其添加到页面中,最后将所有内容包装在默认的主模板中。

这有助于您与他人共享模板。我知道你有问题,问!呵呵

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 2013-06-27
    • 1970-01-01
    • 2023-03-08
    • 2013-07-21
    • 2014-04-04
    • 2013-05-08
    • 2013-12-11
    • 2014-11-19
    相关资源
    最近更新 更多