15

语境:

我已经阅读了尽可能多的 Mustache 文档,但我无法理解如何使用部分内容,甚至无法理解我是否以正确的方式使用 Mustache。

下面的代码工作正常。我的问题是我想同时包含和渲染三个 Mustache 文件。

我猜这就是部分的意思,但我似乎无法让它发挥作用。


问题:

我如何在这种情况下获得部分工作,以便我的三个 Mustache 文件正在加载并且都被传递给 $data 变量?

我应该以这种方式为模板使用 file_get_contents 吗?我已经看到在它的位置使用了 Mustache 函数,但我找不到足够广泛的文档来让它工作。


环境:

我正在使用来自https://github.com/bobthecow/mustache.php的最新版本的 Mustache

我的文件是:
index.php (下面)
template.mustache
template1.mustache
template2.mustache
class.php


代码:

// This is index.php
// Require mustache for our templates
require 'mustache/src/Mustache/Autoloader.php';
Mustache_Autoloader::register();

// Init template engine
$m = new Mustache_Engine;

// Set up our templates
$template   = file_get_contents("template.mustache");

// Include the class which contains all the data and initialise it
include('class.php');
$data = new class();

    // Render the template
print $m->render( $template, $data );

谢谢你:

任何 PHP 实现的部分示例(包括必要的文件结构需要如何)将不胜感激,这样我才能得到一个扎实的理解:)

4

1 回答 1

25

最简单的是使用“文件系统”模板加载器:

<?php
// This is index.php
// Require mustache for our templates
require 'mustache/src/Mustache/Autoloader.php';
Mustache_Autoloader::register();

// Init template engine
$m = new Mustache_Engine(array(
    'loader' => new Mustache_Loader_FilesystemLoader(dirname(__FILE__))
));

// Include the class which contains all the data and initialise it
include('class.php');
$data = new class();

// Render the template
print $m->render('template', $data);

然后,假设你template.mustache看起来像这样:

{{> template2 }}
{{> template3 }}

template2.mustachetemplate3.mustache模板会在需要时从当前目录自动加载。

请注意,此加载器用于原始模板和部分模板。例如,如果您将部分内容存储在子目录中,则可以为部分内容添加第二个加载程序:

<?php
$m = new Mustache_Engine(array(
    'loader'          => new Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views'),
    'partials_loader' => new Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views/partials')
));

Mustache.php wiki上有关于这些和其他Mustache_Engine选项的更多信息。

于 2013-01-15T18:22:58.787 回答