PHP - 循环中的 mustache 部分

标签 php mustache

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

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

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

{{#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 数组中以便渲染)。

最佳答案

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

有两件事可能会吸引您:

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

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

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

关于PHP - 循环中的 mustache 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12719437/

相关文章:

json - 将 mustache.js 与编号数组一起使用

php - 为什么在fetchAll()之前需要execute()

php - 我可以在 sql 查询中使用 php 函数 strtotime()

php - preg_replace UTF-8 不起作用

javascript - 获取 Handlebars 中父数组的索引

html - 在div中输入不可点击

php - Laravel仅从一个输入存储两个输入

javascript - 如果某个 div 具有 css 值,则显示其他 div

javascript - mustache 模板 : nested templates

javascript - 如何在 HTML 页面中正确存储 HTML 模板?