PHP Mustache 2.1 частичная загрузка НЕ ​​основана на имени файла

Есть ли способ загрузить частичные данные на основе массива значений имени файла?

В настоящее время, если я напишу это {{> sidebar}} он будет искать views/sidebar.mustache . (на основе класса загрузчика шаблона, где я могу указать, где искать шаблоны)

В идеале я хочу, чтобы {{> sidebar}} было именем переменной, а не именем файла.

То, что я хочу достичь, – это искать частичную часть боковой панели, не основанную на имени файла, если я перехожу к загрузчику:

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

который переводится на: views/folder1/somefile.mustache .

Вы можете легко сделать это, добавив новую реализацию загрузчика partials. Вы можете создать «загрузчик псевдонимов», в котором хранятся эти ссылки шаблонов:

 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:

 $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);