7

假设我有一个电子商务网站,我想通过大量模板来展示我展示产品网格的方式。使用 DRY 原则,您将如何重用此代码并可能将参数传递到块中以在不同区域进行一些自定义?{embed} 是最佳选择吗?我可以看到类似的东西会产生很多不必要的开销。

4

2 回答 2

13

我在客户网站上做了这件事。我在整个网站上重新使用了相同的产品网格,它是 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"}

这就是过程参数发挥作用的地方。这将允许您在运行条目循环之前嵌入模板,并嵌入包含站点包装器并输出页面内容的标题。一旦掌握了窍门,它就会变得非常强大,并使您的网站更加干净。

于 2012-10-24T04:03:15.257 回答
7

您可以使用嵌入或隐藏,具体取决于您要传递的内容。

https://github.com/croxton/Stash

于 2012-10-24T03:56:27.863 回答