假设我有一个电子商务网站,我希望通过众多模板展示产品网格。使用DRY原则,您将如何重用此代码并可能将参数传递到块中以在不同区域进行某些自定义? {embed}是最佳选择吗?我可以看到类似的东西会产生很多不必要的开销。
答案 0 :(得分:13)
我在客户端网站上做了这件事。我在整个网站上重复使用相同的产品网格,它是100%干燥的。我使用了Stash的dev分支并使用了新的嵌入功能。虽然常规嵌入始终是工作的选项,但Stash嵌入更有效,更强大。
真正的区别在于你如何传递变量,以及何时解析嵌入。使用存储嵌入可以在循环标记内部使用,并且只解析一次数据。 (循环的每次迭代都会对常规嵌入进行解析。)
这是一个Gist,我在Twitter上发布了一段时间给另一位用户。 https://gist.github.com/2950536
注意,该示例代表多个文件和代码块,或者我将在此处发布。国际海事组织,如果我在这里发布,它会使这篇文章难以理解并阅读。基本上它遵循修改后的模板部分方法。
有关模板部分的更多信息。 http://eeinsider.com/blog/ee-podcast-stash-template-partials/
但更直接地回答“如何用Stash替换嵌入变量?”的问题。解决方案相当简单,基于“setter”和“getters”的核心编程概念。理论上,如果设置变量,则可以在模板的任何后续点检索它。诀窍是在解析getter之前设置变量。
{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 :(得分:7)
您可以使用嵌入或隐藏,具体取决于您尝试传递的内容。