瀏覽代碼

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}}

Justin Hileman 15 年之前
父節點
當前提交
b8d4321e4a
共有 1 個文件被更改,包括 49 次插入0 次删除
  1. 49 0
      TraversableMustache.php

+ 49 - 0
TraversableMustache.php

@@ -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;
+	}
+}