私は電子商取引サイトを持っていて、多数のテンプレートを通して製品グリッドを表示する方法を持ちたいとします。 DRYの原則を使って、このコードを再利用して、さまざまな分野のカスタム化のために引数をブロックに渡す可能性がありますか? {embed}は最善の選択肢ですか?私はそのような何かを見て、不必要なオーバーヘッドをたくさん作り出しました。ExpressionEngineでコードブロックを再利用して引数を渡す方法
答えて
私は、クライアントのサイトでこの正確な事をしました。サイト全体で同じ製品グリッドを再利用し、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"}
。これにより、テンプレートをの前に埋め込み、エントリループを実行し、サイトラッパーを含むヘッダーを埋め込み、ページコンテンツを出力することができます。一度あなたがそれのハングアップを取得すると、それは本当に強力になり、あなたのサイトはとてもきれいになります。
あなたは、あなたが渡そうとしているものに応じて、埋め込みを使うことも、隠すこともできます。
- 1. ASP.NETコア - HTMLコードブロックの再利用
- 2. getoptを使用してコマンドラインで引数を渡す方法
- 3. シェルスクリプトのコマンドライン引数を使用してパラメータを渡す方法
- 4. シェルスクリプトを使用してJavaコードに引数を渡す方法
- 5. カスタム引数マスクを使用してPHP CLIを渡す方法
- 6. 引数を渡す方法
- 7. Cで関数の引数としてENUMを渡す方法
- 8. Bashで変数を引数として渡す方法
- 9. MVCを使用してcreateRoleで複数の引数を渡す方法
- 10. SonarQube APIを使用してコードを再利用する方法
- 11. pytestで引数を渡す方法
- 12. カスタムイベント引数でビューモデルを渡す方法
- 13. Xcodeでコマンドライン引数を渡す方法
- 14. 引数を引数として持つ関数を渡す方法
- 15. VueJs - コンポーネントを再利用して背景画像を渡す
- 16. 無限ループで配列関数を再利用する方法
- 17. C++でコード(関数)を再利用する方法
- 18. オープンファイルをseverals関数で再利用する方法
- 19. 複数のページでcodeigniterフォームを再利用する方法
- 20. 複数のdivでangularjs棒グラフを再利用する方法
- 21. Powershellで関数を再利用/拡張する方法は?
- 22. C#で引数としてリストを渡す方法は?
- 23. pexでGUIDをPex引数として渡す方法
- 24. Rubyでメソッドの引数としてオブジェクトを渡す方法
- 25. Netbeansでコマンドライン引数としてファイルを渡す方法
- 26. オブジェクトプロパティを引数として渡してハイフンを使用する方法
- 27. コードブロックをスタイラスの関数またはミックスインに渡す方法
- 28. 変数を引数として渡す方法
- 29. イベントと変数を引数として渡す方法
- 30. 座標を関数の引数として渡す方法は?
頑丈な回答ありがとう、ジャスティン!私は基本的な{stash:embed}を正しく動作させるようには思えません。私は最新のベータ版を使用して、私のブートストラップファイルで参照されているStashディレクトリを持っています。 test.html内の実際の内容の代わりに '{stash:embed name =" test "}'を吐き出すだけです。 –
D'oh!私はおそらく拡張機能を有効にする必要があります。ありがとう、@クロクストン! (twitter.com/croxton) –
これは素晴らしいことです、ジャスティン。また、 '{stash:embed name =" test "stash:limit =" 20 "}'のような埋め込みテンプレートに変数を渡すことさえできます。ニフティ! –