PHP中的胡子部分 - 如何使用它们?

时间:2013-01-15 14:59:11

标签: php mustache

背景:

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

以下代码正常运行。我的问题是我有三个Mustache文件,我想要包含并一次渲染所有文件。

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


问题:

如何在这个上下文中使用partials以便我的三个Mustache文件被加载并且都被传递给$ data变量?

我应该以这种方式使用file_get_contents作为模板吗?我已经看到使用Mustache功能,但我找不到足够的文档来使其正常工作。


ENV:

我正在使用https://github.com/bobthecow/mustache.php

中最新版本的Mustache

我的档案是:
index.php(下)
template.mustache
template1.mustache
template2.mustache
class.php


CODE:

// 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实现的示例(包括必要的文件结构如何),这样我才能得到充分的理解:)

1 个答案:

答案 0 :(得分:24)

最简单的方法是使用“filesystem”模板加载器:

<?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模板将自动从当前目录加载。

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

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

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