【问题标题】:PHP Mustache 2.1 partial loading NOT based on the filenamePHP Mustache 2.1 部分加载不基于文件名
【发布时间】:2013-01-30 11:59:15
【问题描述】:

有没有办法根据文件名值的数组加载部分?

目前,如果我写这个{{> sidebar}},它将寻找views/sidebar.mustache。 (基于模板加载器类,我可以在其中指定查找模板的位置)

理想情况下,我希望 {{> sidebar}} 是变量名而不是文件名。

如果我传递给加载器,我想要实现的是不基于文件名查找侧边栏部分:

$partials = array(
    'sidebar' => 'folder1/somefile'
);

将转换为:views/folder1/somefile.mustache

【问题讨论】:

    标签: php partial-views mustache


    【解决方案1】:

    您可以通过添加一个新的局部加载器实现轻松地做到这一点。您可以制作一个“别名加载器”,用于存储这些模板引用:

    class FilesystemAliasLoader extends Mustache_Loader_FilesystemLoader implements Mustache_Loader_MutableLoader
    {
        private $aliases = array();
    
        public function __construct($baseDir, array $aliases = array())
        {
            parent::__construct($baseDir);
            $this->setTemplates($aliases);
        }
    
        public function load($name)
        {
            if (!isset($this->aliases[$name])) {
                throw new Mustache_Exception_UnknownTemplateException($name);
            }
    
            return parent::load($this->aliases[$name]);
        }
    
        public function setTemplates(array $templates)
        {
            $this->aliases = $templates;
        }
    
        public function setTemplate($name, $template)
        {
            $this->aliases[$name] = $template;
        }
    }
    

    然后,您可以将其设置为部分加载器:

    $partials = array(
        'sidebar' => 'folder1/somefile'
    );
    
    $mustache = new Mustache_Engine(array(
        'loader'          => new Mustache_Loader_FilesystemLoader('path/to/templates'),
        'partials_loader' => new FilesystemAliasLoader('path/to/partials'),
        'partials'        => $partials,
    ));
    

    ...或者您可以将别名传递给加载程序构造函数,或者您甚至可以稍后在加载程序或引擎实例上设置它们:

    $loader = new FilesystemAliasLoader('path/to/partials', $partials);
    $loader->setTemplates($partials);
    $mustache->setPartials($partials);
    

    【讨论】:

    • 过去几天我一直处于 AFK 状态。谢谢你的回答,这就是我要找的!
    • @bobthecow 它对我不起作用。由于某种原因,部分仍然没有加载
    • @KevinWiggins 你能在某处粘贴一些代码吗?如果没有更多细节,很难提供帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2016-03-20
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多