【问题标题】:How to reuse blocks of code and pass arguments to them in ExpressionEngine如何在 ExpressionEngine 中重用代码块并将参数传递给它们
【发布时间】:2012-10-24 03:07:04
【问题描述】:

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

【问题讨论】:

    标签: dry expressionengine


    【解决方案1】:

    我在客户网站上做了这件事。我在整个网站上重新使用了相同的产品网格,它是 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} 正常工作。我的引导文件中引用了 Stash 目录,没有拼写错误,使用的是最新的 beta。它只是吐出 {stash:embed name="test"} 而不是 test.html 中的实际内容。
    • 天啊!我可能应该激活扩展。谢谢,@croxton! (twitter.com/croxton)
    • 这是很棒的东西,贾斯汀。您甚至可以将变量传递给嵌入式模板,例如{stash:embed name="test" stash:limit="20"}。漂亮!
    • 感谢指正,您是正确的。我还没有使用该功能,所以我仍然熟悉它。 Stash 是一个极其强大的插件,似乎拥有无穷无尽的可能性和灵活性。
    【解决方案2】:

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

    https://github.com/croxton/Stash

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多