たとえば、e コマース サイトを持っていて、多数のテンプレートを使用して製品グリッドを表示する方法を実行したいとします。DRY 原則を使用して、このコードをどのように再利用し、さまざまな領域でのカスタマイズのためにブロックに引数を渡す可能性がありますか? {embed} は最適なオプションですか? そのようなものが多くの不必要なオーバーヘッドを生み出していることがわかりました。
2 に答える
私はクライアントサイトでこれとまったく同じことをしました。サイト全体で同じ製品グリッドを再利用したところ、100% DRY でした。Stash の dev ブランチを使用し、新しい埋め込み機能を使用しました。通常の埋め込みは常に機能するオプションですが、 Stash の埋め込みはより効率的で強力です。
本当の違いは、変数を渡す方法と、埋め込みがいつ解析されるかです。stash 埋め込みを使用すると、ループ タグ内で使用でき、データを 1 回だけ解析できます。(通常の埋め込みは、ループの反復ごとに解析されます。)
これは、Twitter の別のユーザーのためにしばらく前に投稿した Gist です。 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"}
ここで、プロセスパラメータの出番です。これにより、エントリ ループが実行される前にテンプレートを埋め込んだり、サイト ラッパーを含むヘッダーを埋め込んでページ コンテンツを出力したりできます。コツをつかめば、非常に強力になり、サイトがとてもきれいになります。
渡そうとしているものに応じて、埋め込みまたはスタッシュを使用できます。