PHP - 循环中的Mustache partials

时间:2012-10-04 02:13:23

标签: php mustache

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

部分的示例将是列表元素(可视地)。从标记的角度来看,元素被定义为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数组中包装数据以便渲染),这种情况会让它变得丑陋。

1 个答案:

答案 0 :(得分:3)

所以{{> head }}{{> header }}{{> footer }}部分有效,但{{> my_partial }}没有?您是使用文件系统部分加载器,还是将部分作为字符串传递给Mustache构造函数?

有两件事可能会抓住你:

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

  2. 您无法在小胡子模板上将部分内容传递给the render() call

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