【发布时间】:2012-10-24 03:07:04
【问题描述】:
假设我有一个电子商务网站,我想通过大量模板来实现我展示产品网格的方式。使用 DRY 原则,您将如何重用此代码并可能将参数传递到块中以在不同区域进行一些自定义? {embed} 是最佳选择吗?我可以看到这样的事情会产生很多不必要的开销。
【问题讨论】:
标签: dry expressionengine
假设我有一个电子商务网站,我想通过大量模板来实现我展示产品网格的方式。使用 DRY 原则,您将如何重用此代码并可能将参数传递到块中以在不同区域进行一些自定义? {embed} 是最佳选择吗?我可以看到这样的事情会产生很多不必要的开销。
【问题讨论】:
标签: dry expressionengine
我在客户网站上做了这件事。我在整个网站上重新使用了相同的产品网格,它是 100% DRY。我使用了 Stash 的 dev 分支并使用了新的嵌入功能。虽然常规嵌入始终是一种工作的选项,但 Stash 嵌入更高效、更强大。
真正的区别在于传递变量的方式以及解析嵌入的时间。使用 stash embeds 可以在循环标签内使用,并且只解析一次数据。 (在循环的每次迭代中都会解析常规嵌入。)
这是我不久前在 Twitter 上为另一位用户发布的要点。 https://gist.github.com/2950536
注意,这个例子代表了多个文件和代码块,或者我会在这里发布。 IMO,如果我把它贴在这里,它会让这篇文章难以阅读和阅读。本质上它遵循修改后的模板部分方法。
有关模板部分的更多信息。 http://eeinsider.com/blog/ee-podcast-stash-template-partials/
但要更直接地回答“如何用 Stash 替换嵌入变量?”的问题。该解决方案相当简单,并且基于“setter”和“getter”的核心编程概念。理论上,如果设置了一个变量,则可以在模板中的任何稍后位置检索它。诀窍是在解析 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"}
这就是 process 参数发挥作用的地方。这将允许您在运行条目循环之前嵌入模板,并嵌入包含站点包装器的标题并输出页面内容。一旦掌握了窍门,它就会变得非常强大,让您的网站更加整洁。
【讨论】:
{stash:embed name="test"} 而不是 test.html 中的实际内容。
{stash:embed name="test" stash:limit="20"}。漂亮!
您可以使用嵌入或隐藏,具体取决于您要传递的内容。
【讨论】: