2012-10-24 6 views
7

私は電子商取引サイトを持っていて、多数のテンプレートを通して製品グリッドを表示する方法を持ちたいとします。 DRYの原則を使って、このコードを再利用して、さまざまな分野のカスタム化のために引数をブロックに渡す可能性がありますか? {embed}は最善の選択肢ですか?私はそのような何かを見て、不必要なオーバーヘッドをたくさん作り出しました。ExpressionEngineでコードブロックを再利用して引数を渡す方法

答えて

13

私は、クライアントのサイトでこの正確な事をしました。サイト全体で同じ製品グリッドを再利用し、100%DRYでした。私はStashのdevブランチを使用し、新しい埋め込み機能を使用しました。通常の埋め込みは常にの作業のオプションですが、埋め込みの方が効率的で強力です。

実際の違いは、変数を渡す方法と、埋め込みが解析されるときです。 stash埋め込みを使用すると、ループタグ内で埋め込みを使用して、データを1回だけ解析することができます。 (通常の埋め込みがループの各反復で解析される場所)

ここでは、Twitterに別のユーザーのためにしばらく投稿しました。 https://gist.github.com/2950536

注:この例は複数のファイルとコードブロックを表していますが、ここでは投稿します。 IMO、それは私がここにそれを投稿した場合、このポストをフォローして読むことが難しくなります。基本的には、変更されたテンプレートの部分的なアプローチに従います。

テンプレートパーシャルの詳細。 http://eeinsider.com/blog/ee-podcast-stash-template-partials/

しかし、より直接的には、「どのようにStashに変数を埋め込むのでしょうか?」と答えてください。この解決策はかなり簡単で、 "セッター"と "ゲッター"というコアプログラミングの概念に基づいています。理論では、変数を設定するとテンプレートの後の時点で取得できます。トリックはゲッターが解析される前の変数の設定です。 プロセスパラメータの出番だ

{exp:stash:set} 

    {stash:page_content} 

     {exp:channel:entries channel="your-channel"} 

      {stash:your_var_1}Some value 1{/stash:your_var_1} 
      {stash:your_var_2}Some value 2{/stash:your_var_2} 
      {stash:your_var_3}Some value 3{/stash:your_var_3} 
      {stash:your_var_4}Some value 4{/stash:your_var_4} 

      {stash:embed name="your-template" process="start"} 

     {/exp:channel:entries} 

    {/stash:page_content} 

{/exp:stash:set} 

{stash:embed name="header" process="end"} 

。これにより、テンプレートの前に埋め込み、エントリループを実行し、サイトラッパーを含むヘッダーを埋め込み、ページコンテンツを出力することができます。一度あなたがそれのハングアップを取得すると、それは本当に強力になり、あなたのサイトはとてもきれいになります。

+0

頑丈な回答ありがとう、ジャスティン!私は基本的な{stash:embed}を正しく動作させるようには思えません。私は最新のベータ版を使用して、私のブートストラップファイルで参照されているStashディレクトリを持っています。 test.html内の実際の内容の代わりに '{stash:embed name =" test "}'を吐き出すだけです。 –

+0

D'oh!私はおそらく拡張機能を有効にする必要があります。ありがとう、@クロクストン! (twitter.com/croxton) –

+0

これは素晴らしいことです、ジャスティン。また、 '{stash:embed name =" test "stash:limit =" 20 "}'のような埋め込みテンプレートに変数を渡すことさえできます。ニフティ! –

7

あなたは、あなたが渡そうとしているものに応じて、埋め込みを使うことも、隠すこともできます。

https://github.com/croxton/Stash

関連する問題