Added TraversableMustache, a Mustache subclass that allows traversal of variables via dots... they approximately map to ->, as in ->bar->baz means the same thing as {{foo.bar.baz}}

This commit is contained in:
Justin Hileman
2010-03-26 04:07:08 -04:00
parent e0b9b6c522
commit b8d4321e4a
+49
View File
@@ -0,0 +1,49 @@
<?php
/**
* TraversableMustache class.
*
* A Mustache subclass which allows variable traversal via dots, i.e.:
*
* @code
* class Foo extends TraversableMustache {
* var $one = array(
* 'two' => array(
* 'three' => 'wheee!'
* )
* );
*
* protected $template = '{{one.two.three}}';
* }
* $foo = new Foo;
* print $foo;
* @endcode
*
* (The above code prints 'wheee!')
*
* @extends Mustache
*/
class TraversableMustache extends Mustache {
/**
* Override default getVariable method to allow object traversal via dots.
* This might be cool. Also, might be heinous.
*
* @access protected
* @param string $tag_name
* @param array &$context
* @return string
*/
protected function getVariable($tag_name, &$context) {
$chunks = explode('.', $tag_name);
$first = array_shift($chunks);
$ret = parent::getVariable($first, $context);
while ($next = array_shift($chunks)) {
$c = array($ret);
$ret = parent::getVariable($next, $c);
}
return $ret;
}
}