Есть ли способ загрузить частичные данные на основе массива значений имени файла?
В настоящее время, если я напишу это {{> 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);