28

デフォルトのテンプレートを Laravel で動作させようとしています。私は Codeigniter と Phil Sturgeon のテンプレート システムから来ているので、同様の方法でそれをやろうとしています。私が行方不明/間違っていることを誰かが助けてくれますか? ありがとう!

//default.blade.php (located in layouts/default)
<html>
    <title>{{$title}}</title>
    <body>
    {{$content}}
    </body>
</html>
//end default.blade.php

//home.blade.php (index view including header and footer partials)
@layout('layouts.default')
@include('partials.header')
//code
@include('partials.footer')
//end home

//routes.php (mapping route to home controller)
Route::controller( 'home' );
//end

//home.php (controller)
<?php
class Home_Controller extends Base_Controller {
    public $layout = 'layouts.default';
    public function action_index()
    {   
        $this->layout->title = 'title';
        $this->layout->content = View::make( 'home' );
    }
}
//end
4

2 に答える 2

86

Laravel の 2 つの異なるレイアウト アプローチを混在させています。このようにして、レイアウト ビューをレンダリングし、ホーム ビューを含めて、もう一度レイアウトの内部に含めようとします。

私の個人的な好みは、コントローラーのアプローチです。

コントローラーのレイアウト

コントローラーとレイアウトは同じままでかまいません。

注: ショートカットとして、View::make の代わりにコンテンツをネストすることができます。これにより、レイアウトでエコーアウトすると自動的にレンダリングされます。

home.blade.php で @layout 関数を削除します。

編集(例):

コントローラー/home.php

<?php
class Home_Controller extends Base_Controller {
  public $layout = 'layouts.default';
  public function action_index()
  {
    $this->layout->title = 'title';
    $this->layout->nest('content', 'home', array(
      'data' => $some_data
    ));
  }
}

ビュー/レイアウト/default.blade.php

<html>
  <title>{{ $title }}</title>
  <body>
    {{ $content }}
  </body>
</html>

ビュー/home.blade.php

コンテンツにはパーシャルが含まれています。

@include('partials.header')
{{ $data }}
@include('partials.footer')

ブレードのレイアウト

このアプローチが必要な場合は、いくつかの問題があります。まず、レイアウトの後に新しいコンテンツを含めます。意図的かどうかはわかりませんが、@layout関数自体は基本的に、ビューの最初にあるように制限された@includeです。したがって、レイアウトが閉じた html の場合、その後のインクルードは html レイアウトの後に追加されます。

コンテンツは、ここで@section関数を使用してセクションを使用し、レイアウトで@yieldする必要があります。ヘッダーとフッターは、@include を使用してレイアウトに含めることができますコンテンツ ビューで定義する場合は、以下のように@sectionにも配置します。セクションが存在しない場合にそのように定義すると、何も生成されません。

コントローラー/home.php

<?php
class Home_Controller extends Base_Controller {
  public function action_index()
  {
    return View::make('home')->with('title', 'title');
  }
}

ビュー/レイアウト/default.blade.php

<html>
 <title>{{$title}}</title>
 <body>
  @yield('header')
  @yield('content')
  @yield('footer')
 </body>
</html>

ビュー/home.blade.php

@layout('layouts.default')
@section('header')
  header here or @include it
@endsection
@section('footer')
  footer
@endsection
@section('content')
  content
@endsection
于 2012-09-21T09:16:28.163 に答える
0

上記の回答は、Laravel でテンプレート化がどのように行われるかを説明していますが、テーマを切り替える機能を備えたテーマ ディレクトリに編成されたテーマを管理したり、パーシャルとテーマ リソースをすべて一緒に持つなどの追加の利点を得るには、Phil Sturgeon Template Library に似たようなものに思えます。 CI。Laravel のテーマ バンドルを確認することをお勧めします。リンクは次のとおりです。

http://raftalks.github.io/Laravel_Theme_Bundle/

于 2012-09-27T22:16:05.587 に答える