2010-12-06 3 views
2

をフッター、ヘッダーとサイドメニューを含めるための最良の方法は、現在、私のsymfonyのアプリで私は、テンプレートの私のヘッダ部を処理するためのヘッダー・コンポーネントをモジュールヘッダを作成し、symfonyの

はこれです行く最善の方法?

また、いくつかのセクションに含まれているサイドメニューをどうすればよいのか分かりません。カテゴリモジュールのコンポーネントのサイドメニューを作成して、スロットを使用してこれを行う必要がありますか?

答えて

2

おそらくパーシャルアレスが最適な方法でしょう。

レイアウトにドロップしたいものが、一部のアクションでのみ表示され、すべてではない場合は、スロットが本当に便利です。

ヘッダーとフッターの両方のモジュールを作成したとします。私は、それぞれのアプリケーションテンプレートフォルダに部分的に作成する方が好きです。

/apps 
    /yourapp 
    /templates 
     _header.php 
     _footer.php 
     layout.php 

カテゴリのサイドバーには、コンポーネントのように聞こえるが、どのようにあなたがそれを実装すると、同じコンポーネントがすべてのページに表示されるか、(すべてであれば)別のページに示されているもののサイドバーを制御することができるかどうかによって決まります。

すべてのページで同じコンポーネントを使用するには、layout.phpファイル内にコンポーネント(include_component付き)を含めます。より詳細な制御が必要な場合は、表示する必要がある各アクションのテンプレートを含むコンポーネントを含めます。

さらに複雑なサイドバーのソリューションには、特定の属性が設定されている場合はレイアウトからのものが含まれます。だからでのactions.class.php:

public function preExecute() 
{ 
    $this->getRequest()->setAttribute('show_categories_sidebar', true); 
} 

はその後でのlayout.php:

好奇心のうち
<?php if ($sf_request->hasAttribute('show_categories_sidebar')): ?> 
    <div id="sidebar"> 
    <?php include_component('category', 'sidebar') ?> 
    </div> 
<?php endif; ?> 
+0

私はsymfonyのドキュメントから読み込んだものから、キャッシュするのが部分的に不可能ですか? –

1

私は通常、ヘッダーとフッターの部分またはコンポーネントをデフォルトモジュールに配置します。私はそれらをスロットを介してレイアウトに組み込み、他のアクションにそれらを上書きまたは無効にする機能を与えます。だから、単純化されたレイアウトは、次のようになります。

<body> 
    <?php if (has_slot('header')): ?> 
    <?php include_slot('header') ?> 
    <?php else: ?> 
    <?php include_component('default', 'header') ?> 
    <?php endif ?> 
    <?php echo $sf_content ?> 
    <?php if (has_slot('footer')): ?> 
    <?php include_slot('footer') ?> 
    <?php else: ?> 
    <?php include_partial('default/footer') ?> 
    <?php endif ?> 
</body> 

あなたは今、アクション/テンプレートごとにヘッダー/フッターを上書きするだけでなく、falseにスロットを設定することで、それらを完全に無効にする能力を持っています。同様のプリンシパルをサイドメニューに使用できます。

+0

、あなたは、ヘッダーやフッターの他のブロックごとに異なるコード(コンポーネントVSを持っていない理由部分的な)? –

+0

これを行う2つの異なる方法を示すだけです。コントローラレイヤーに属するものを実行する必要がある場合にのみ、コンポーネントを使用します。 –