Frage

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?

War es hilfreich?

Lösung

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
    )
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top