0

Laravel 3に関するいくつかのチュートリアルに従いますが、問題があることを知っています。

@section('post_navigation')
@if(Auth::check())
    @include('plugins.loggedin_postnav')
@endif
@endsection

このセクションが表示されないのはなぜですか?

たとえば、セクション内のすべてのコンテンツを削除しようとしました。

@section('post_navigation')
    <h1>Test</h1>
@endsection

しかし、うまくいきません。

完全なコードは次のとおりです。

<div class="navbar navbar-inverse navbar-fixed-top">
    <div class="navbar-inner">
        <div class="container">
            {{ HTML::link('/', 'Instapics', array('class' => 'brand')); }}

            <div class="nav-collapse">
                <ul class="nav">
                    @section('navigation')
                        <li class="active">{{ HTML::link('/', 'Home') }}</li>
                    @yield_section
                </ul>
            </div>

            @section('post_navigation')
            @if(Auth::check())
                @include('plugins.loggedin_postnav')
            @endif
            @endsection

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


[編集]
@endsection を @yield_section に変更し、動作しますが、たとえば (User_Controller インデックス ビューで) まだ理解できません。

@section('post_navigation')
    @parent
@endsection

インクルードが表示されないのはなぜですか?

endsectionyield_sectionに変更する必要があるのはなぜですか?

4

2 に答える 2

13

@section を使用すると、変数を定義するようにセクションを定義します。次に、必要な場所で@yield('sectionname')(または 2 番目の段落で指定した別の方法を使用して) 使用できます。たとえば、これを見ることができます:

@section('scripts')
    <script src="jquery.js"></script>
@endsection

<head>
    @yield('scripts')
</head>

@section / @endsection と @section / @yield_section は同じではありません。@section / @yield_section は、セクションではなくセクション領域を定義します。つまり、変数を呼び出します。実際には @section / @endsection よりも yield('sectionname') に似ています。yield との主な違いとしてデフォルト値があります。

デフォルト値を持つ領域を定義し、セクションを定義することでそれを変更できます。このロジックは、主にレイアウトの作成および使用中に使用されます。たとえば、以下のページをメイン (main.blade.php) レイアウトとします。

<html>
    <head>
        <title>
        @section('title')
        Default Title Maybe Sitename.com
        @yield_section
        </title>
        @include('scripts')
    </head>
    <body>
        <div id="content">
        @section('content')
            Default content
        @yield_section
        </div>
        <div id="sidebar">
        @section('sidebar')
            <ul id="menu">
                <li><a href="#">Menu item 1</a></li>
                <li><a href="#">Menu item 2</a></li>
                <li><a href="#">Menu item 3</a></li>
                <li><a href="#">Menu item 4</a></li>
            </ul>
        @yield_section
    </body>
</html>

通常、レイアウトは直接使用されません。別のページを作成し、そのページのレイアウトで のように指定します@layout('main')。次に、セクションが定義され、laravel テンプレート システムが定義されたセクションを変更します。このページを投稿 (post.blade.php) ページにします。

@layout('main')

@section('title')
$post->title - @parent
@end_section

@section('content')
$post->content
@end_section

post view に戻るView::make('profile');と、ご覧のとおり、レイアウト ロジックが機能し、main.blade.php のセクションがこのページで定義したものに変更されます。したがって、出力は次のようになります。

<html>
    <head>
        <title>
        Post title - Default Title Maybe Sitename.com
        </title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    </head>
    <body>
        <div id="content">
            Post content
        </div>
        <div id="sidebar">
            <ul id="menu">
                <li><a href="#">Menu item 1</a></li>
                <li><a href="#">Menu item 2</a></li>
                <li><a href="#">Menu item 3</a></li>
                <li><a href="#">Menu item 4</a></li>
            </ul>
    </body>
</html>

ちなみに、@parentセクションエリアでデフォルト値を返しますが、これ@includeはphpのincludeと同じロジックです。

良い1日を。

于 2012-12-29T12:52:53.367 に答える
1

答えを見つけたようです。しかし、L4 では @endsection が @stop に置き換えられたようです。代わりに次のようにしてみてください。

@section('scripts')
    <script src="jquery.js"></script>
@stop
于 2012-12-29T14:47:14.040 に答える