Частично зареждане на PHP Mustache 2.1 НЕ въз основа на името на файла

Има ли начин за зареждане на части въз основа на масив от стойности на имена на файлове?

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

В идеалния случай искам {{> sidebar}} да бъде име на променлива, а не име на файл.

Това, което искам да постигна, е да търся част от страничната лента, която не е базирана на името на файла, ако предам към зареждащия инструмент:

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

което би се превело на: views/folder1/somefile.mustache.


person feketegy    schedule 14.02.2013    source източник


Отговори (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);
person bobthecow    schedule 15.02.2013
comment
Бях AFK през последните няколко дни. Благодаря за отговора, това е, което търся! - person feketegy; 20.02.2013
comment
@bobthecow Не работи за мен. По някаква причина частичното все още не се зарежда - person Kevin Wiggins; 15.06.2018
comment
@KevinWiggins Можете ли да поставите код някъде? Трудно е да се помогне без още малко подробности :) - person bobthecow; 18.06.2018