0

尝试使用 mustache.php 调用部分小胡子。我确定我搞砸了,因为文档似乎表明你可以做我想做的事情。

    $m = new Mustache_Engine(array(
    'loader' => new Mustache_Loader_FilesystemLoader(dirname(__FILE__) . '/patternlab-php-master/source/_patterns/02-organisms/'),
));

echo $m->render('{{> 03-ups/00-two-up }}');

我收到此错误:

Fatal error: Uncaught exception 'Mustache_Exception_UnknownTemplateException' with message 'Unknown template: {{> 03-ups/00-two-up }}' in C:\xampp\htdocs\grogan\wordpress\wp-content\themes\grogan-theme\vendor\mustache\mustache\src\Mustache\Loader\FilesystemLoader.php:102
Stack trace: 
#0 C:\xampp\htdocs\grogan\wordpress\wp-content\themes\grogan-theme\vendor\mustache\mustache\src\Mustache\Loader\FilesystemLoader.php(82): Mustache_Loader_FilesystemLoader->loadFile('{{> 03-ups/00-t...') 
#1 C:\xampp\htdocs\grogan\wordpress\wp-content\themes\grogan-theme\vendor\mustache\mustache\src\Mustache\Engine.php(617): Mustache_Loader_FilesystemLoader->load('{{> 03-ups/00-t...') 
#2 C:\xampp\htdocs\grogan\wordpress\wp-content\themes\grogan-theme\vendor\mustache\mustache\src\Mustache\Engine.php(217): Mustache_Engine->loadTemplate('{{> 03-ups/00-t...') 
#3 C:\xampp\htdocs\grogan\wordpress\wp-content\themes\grogan-theme\page-consignment.php(46): Mustache_Engine->render('{{> 03-ups/00-t...') 
#4 C:\xampp\htdocs\grogan\wordpress\wp-includes\templ in C:\xampp\htdocs\grogan\wordpress\wp-content\themes\grogan-theme\vendor\mustache\mustache\src\Mustache\Loader\FilesystemLoader.php on line 102

我正在使用 patternlab 来存放我所有的部分并将它们调用到 wordpress 模板中。不确定这是否重要。

4

1 回答 1

0

tl;博士:您可能想使用echo $m->render('03-ups/00-two-up').

Mustache 使用“加载器”来决定在您请求时要呈现的模板。具体来说,它使用了两个加载器:一个用于所有render()调用的常规加载器,一个用于渲染部分加载器的可选部分加载器,正如您可能已经猜到的那样。如果你没有指定一个局部加载器,它会回退到主加载器。

默认情况下,Mustache 使用字符串加载器作为主加载器。这就是您可以$m->render('string with {{mustaches}}')开箱即用的原因。但是字符串加载器并不适合单行模板,因此您通常需要指定文件系统加载器。这需要一个基本目录,并根据名称从文件中加载模板。因此,如果您调用它,它将在文件系统加载器的基本目录中$m->render('foo')查找一个名为的文件。foo.mustache

这就是你配置它要做的事情,并且在异常消息中有一个提示:它说Unknown template: {{> 03-ups/00-two-up }},意思是“我试图找到一个名为{{> 03-ups/00-two-up }}.mustache但没有一个文件”:)

如果您将调用更改为实际的模板名称,它将起作用:

echo $m->render('03-ups/00-two-up');

如果你真的想为你的主加载器使用一个字符串加载器,但仍然指定一个部分文件系统加载器,你可以显式地添加它:

new Mustache_Engine([
  'partials_loader' => new Mustache_Loader_FilesystemLoader(...)
]);
于 2015-06-29T16:30:30.580 回答