2016-12-31 4 views
4

私は流体テンプレートでメニュー生成のようなTypoScript使用したい場合は、私は2つの方法があります。流体テンプレートのtyposcriptの最適な使い方は何ですか?

  • テンプレートの変数を埋めるためのTypoScriptを使用します。このようにそれをやって:他の方法は、Fの使用である

    <div class="header"> 
        <div class="logo">{logo->f:format.raw()}</div> 
        <div class="main-menu">{mainMenu->f:format.raw()}</div> 
    </div> 
    
  • :のTypoScriptの一部を呼び出すためのcObjectのなViewHelper

    page.10 = FLUIDTEMPLATE 
    page.10 { 
        templateName = index.html 
        // ... define pathes ... 
        variables { 
         contentMain < styles.content.get 
         mainMenu < temp.mainMenu 
         : 
        } 
    } 
    

    やテンプレートでは、単に変数を使用します。
    のTypoScript:そう

    <div class="header"> 
        <div class="logo">{logo->f:format.raw()}</div> 
        <div class="main-menu"> 
         <f:cObject typoscriptObjectPath="lib.mainMenu /> 
        </div> 
    </div> 
    

page.10 = FLUIDTEMPLATE 
page.10 { 
    templateName = index.html 
    // ... define pathes ... 
    variables { 
     contentMain < styles.content.get 
     : 
    } 
} 
lib.mainMenu < temp.mainMenu 

流体テンプレートは次のようになりながら。私の質問:それぞれの賛否両論は何ですか?
TYPO3の異なるバージョンの違いはありますか?

答えて

4

大きな違いこれらの2つのアプローチに関しては、あるように私はpgampeの意見に同意しません!

あなたは変数を使用している場合は、それらがそれらのコンテンツ要素をフロントエンドで使用されていない場合でも、常にをレンダリングされます。これは、実際に取り組むのが難しい巨大な副作用を持つ可能性があります。いくつかの例

  • 使用していない(もう使用していない)列のページに重いUSER_INTプラグインがあります。それらは表示されなくても依然として呼び出されます
  • EXT:newsと機能ExcludeDisplayedNewsを使用しています。ニュースの変数を介して、何らかの形でレンダリングされたプラグイン(ただし、出力されません)がある場合は、レンダリングと示されているニュースのプラグインが
+1

この情報は、dataProcessorsが言及されるたびに言及することが不可欠です。これは、単純に、出力部品をレンダリングする前の副作用です。私の個人的なアドバイスは、Fluidテンプレートに大量のレンダリングを貼り付けることです。一般に、これはdataProcessorsを避け、VHSパッケージなどのViewHelpersを使用すること、または自分で作成するViewHelpersを使用することを意味します。あるいは古い学校のTSオブジェクトをf:cObjectでレンダリングします(これは "すべてをあらかじめレンダリングする必要があります"という問題はありません)。 –

2

無条件にレンダリングされるか、または現在のページコンテキストに大きく依存するすべての要素にテンプレート変数を使用する必要があります。

他のレコード値に応じてレンダリングされる要素は、cObjectビューヘルパーを使用する方が適しています。

結果がページキャッシュにキャッシュされている限り、技術的に大きな違いはありません。それは好む方法だけの味と読みやすさの問題です。

両方のメソッドでは、dataProcessorsを使用して、テンプレート内で反復または処理できる配列またはオブジェクトを返すことができます。特にメニュー生成のために、来るべきTYPO3 8.x LTSは、メニューをアレイとして吐き出すメニュープロセッサを持つでしょう。機能#78672TYPO3 8.5以降)を参照してください。そのようなものを使用する場合は、常に変数として渡すことをお勧めします。これにより、はるかに明確になり、テンプレート内に隠すことはありません。

https://docs.typo3.org/typo3cms/extensions/core/8-dev/Changelog/8.5/Feature-78672-IntroduceFluidDataProcessorForMenus.html

+0

ニュースレコードを欠場する私はあなたが正しいのですか?現在のページのデータに依存するページの部分をテンプレート変数として使用する必要があります。例えばページからのすべてのデータ、すべての列からのすべての内容(tt_content)、メニュー(少なくとも8より前)、およびすべての内容「無条件に」? typoscriptの条件としてnormaly評価する言語条件やその他の条件はどうですか?キャッシュされていないレンダリングの実行時の動作は何ですか?私は、テンプレート変数の代わりにVHコールの値が間違っていると仮定します。 –

+0

理論上、ViewHelpersは1回の例外を除いて、毎回TS dataProcessorsより優れた性能を発揮するはずです。システムキャッシュのフラッシュ後、流体テンプレートを再コンパイルする必要があります。その後ViewHelpersは実際にレンダリングされたときにのみ実行され、ストレートPHPとして実行されます。解析は行われません。 dataProcessorベースのセットアップでは、この選択性は全く不可能です。私が間違っている場合は、f:cObjectのようにこのTSを常に再実行してください。パフォーマンスがメトリックの場合、TSを拡張するソリューションは推奨されません。 –

+0

テンプレートのプッシュまたはプルのアプローチを好むかどうかがわかります。プッシュアプ​​ローチは、テンプレートを乱雑に(ワードプレスを参照)する傾向があり、依存関係を追跡することを困難にする傾向がある一方で、プッシュアプ​​ローチはデータを生成しすぎる可能性が高い。 – pgampe

関連する問題