【问题标题】:PHP - Mustache partials in a loopPHP - 循环中的小胡子部分
【发布时间】:2012-10-04 02:13:23
【问题描述】:

我认为 Mustache 很棒,因为它允许使用局部图像,并且与 Smarty 相比,它也相对轻量级。我使用 Mustache 的想法是:定义一组组成 UI 库的部分。在这些部分中传递数据并像在类固醇上使用 html 元素一样使用它们。

partial 的一个例子是列表元素(视觉上)。从标记的角度来看,该元素被定义为一个 20 行的 HTML 块。我想在循环中使用该部分,或者我可能想独立使用它。

如果我想建立一个包含上述部分的列表,我会这样做:

{{#my_list_elems}}
 ... Maybe some HTML code
 {{> my_partial
{{/my_list_elems}}

假设 my_partial 如下所示:

<div>
  <ul>
  {{#another_array}}
    <li>{{name}}</li>
  {{>#another_array}}
  </ul>
</div>

现在,经过几个小时的尝试,我的主模板或多或少看起来像这样:

{{> head}}
{{> header}}
<div>Some static HTML</div>
... More code
{{#some_array}}
{{> my_partial}}
{{/some_array}}
{{> footer}}

问题: 出于某种原因,这对我不起作用。我尝试单独渲染部分,它可以工作。一个数组?嗯。

另外,我很难弄清楚,如果我真的让它工作,它将如何处理变量。目前,我正在渲染它:

$template = $this->mustache->loadTemplate('template');
$partials['my_partial'] = $this->mustache->loadPartial('my_partial');
$data['my_partial_arr'] = $this->getPartialData();

echo $template->render($data, $partials);

请注意,PHP 代码和部分示例并不意味着可以一起工作,它们只是示例。

问题是,是否支持此功能?如果是,我做错了什么?也许我的 PHP 数组没有正确的格式?我可以将数组/循环放在较低级别,在部分中,但是当我想单独使用部分时(将数据包装在一个 elem 数组中以便渲染),这会使其变得丑陋。

【问题讨论】:

    标签: php mustache


    【解决方案1】:

    所以{{&gt; head }}{{&gt; header }}{{&gt; footer }} 部分工作,但{{&gt; my_partial }} 不工作?您是在使用文件系统部分加载器,还是将部分作为字符串传递给 Mustache 构造函数?

    有两件事可能会吸引你:

    1. Mustache 可能不认为您的数组 (my_partial_arr) 是“可迭代的”。 Mustache.php 维基has a bit more on that。您可以通过array_values() 运行它们,以确保它们将被循环而不是用作部分上下文。

    2. 您不能将部分传递给小胡子模板上的 the render() call

      在大多数情况下,将部分作为第二个参数传递不会导致问题,因为该函数无论如何都不接受第二个参数......它只会通过 loadPartial() 在您的 Mustache 实例上加载任何必要的部分无论如何。

    【讨论】:

    • 是的,其他一切都很好,除了循环部分我认为它是#1 - 只需要运行测试并会回来跟进。你是对的#2,那有多愚蠢? :)
    • 我使用了一个由 array_map() 产生的数组,我错误地认为它会返回一个数组(阅读:不是哈希)。好吧,我错了,我传递给 array_map() 的第二个参数跳过了一些索引,另一个大声笑,因为数组是 array_unique() 调用的结果。脑洞大开。感谢您的帮助。
    猜你喜欢
    • 2018-09-25
    • 2013-02-09
    • 2015-05-21
    • 2011-08-29
    • 2018-12-01
    • 2011-05-10
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多