I've just started with Mustache.php and I'm looking for a way to add to my Mustache.php loader an override feature like the one used in Joomla.

I'm loading partials from the directory "views" and I'd like to tell to Mustache to read first the partials stored in "overrides" and then, if the partial is not found in that folder, look for it in the "views" folder.

At the moment I'm using this code to load my partials:

// Mustache templates path
$mustache_tpls = $_SERVER['BASE_DIR'] . '/views';

// Mustache options
$mustache_opts =  array('extension' => '.tpl');

// Mustache cache path
$mustache_cache = $_SERVER['BASE_DIR'] . '/tmp/cache/views';

// Init Mustache engine
$m = new Mustache_Engine(
    array(
        'cache'  => $mustache_cache,
        'loader' => new Mustache_Loader_FilesystemLoader(
            $mustache_tpls,
            $mustache_opts
        )
    )
);

How could I do?

有帮助吗?

解决方案

You're looking for the CascadingLoader:

// Mustache templates paths
$mustache_tpls          = $_SERVER['BASE_DIR'] . '/views';
$mustache_override_tpls = $_SERVER['BASE_DIR'] . '/overrides';

// Mustache options
$mustache_opts =  array('extension' => '.tpl');

// Mustache cache path
$mustache_cache = $_SERVER['BASE_DIR'] . '/tmp/cache/views';

// Cascading template loader
$mustache_loader = new Mustache_Loader_CascadingLoader(array(
    new Mustache_Loader_FilesystemLoader($mustache_override_tpls, $mustache_opts),
    new Mustache_Loader_FilesystemLoader($mustache_tpls, $mustache_opts),
));

// Init Mustache engine
$m = new Mustache_Engine(
    array(
        'cache'  => $mustache_cache,
        'loader' => $mustache_loader
    )
);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top