Question

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?

Was it helpful?

Solution

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
    )
);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top