Browse Source

Merge branch 'hotfix/0.1.1' into dev

Justin Hileman 15 years ago
parent
commit
35c97c3cf1

+ 18 - 3
Mustache.php

@@ -24,7 +24,7 @@ class Mustache {
 
 	// Override charset passed to htmlentities() and htmlspecialchars(). Defaults to UTF-8.
 	protected $charset = 'UTF-8';
-	
+
 	protected $tagRegEx;
 
 	protected $template = '';
@@ -142,12 +142,16 @@ class Mustache {
 
 				// regular section
 				case '#':
-					if (is_array($val)) {
+					if ($this->varIsIterable($val)) {
 						foreach ($val as $local_context) {
 							$replace .= $this->_render($content, $this->getContext($context, $local_context));
 						}
 					} else if ($val) {
-						$replace .= $content;
+						if (is_array($val) || is_object($val)) {
+							$replace .= $this->_render($content, $this->getContext($context, $val));
+						} else {
+							$replace .= $content;
+						}
 					}
 					break;
 			}
@@ -387,6 +391,17 @@ class Mustache {
 		}
 	}
 
+	/**
+	 * Check whether the given $var should be iterated (i.e. in a section context).
+	 *
+	 * @access protected
+	 * @param mixed $var
+	 * @return bool
+	 */
+	protected function varIsIterable($var) {
+		return is_object($var) || (is_array($var) && !array_diff_key($var, array_keys(array_keys($var))));
+	}
+
 	/**
 	 * Prepare a string to be used in a regular expression.
 	 *

+ 13 - 0
examples/child_context/ChildContext.php

@@ -0,0 +1,13 @@
+<?php
+
+class ChildContext extends Mustache {
+	public $parent = array(
+		'child' => 'child works',
+	);
+	
+	public $grandparent = array(
+		'parent' => array(
+			'child' => 'grandchild works',
+		),
+	);
+}

+ 2 - 0
examples/child_context/child_context.mustache

@@ -0,0 +1,2 @@
+<h1>{{#parent}}{{child}}{{/parent}}</h1>
+<h2>{{#grandparent}}{{#parent}}{{child}}{{/parent}}{{/grandparent}}</h2>

+ 2 - 0
examples/child_context/child_context.txt

@@ -0,0 +1,2 @@
+<h1>child works</h1>
+<h2>grandchild works</h2>

+ 3 - 3
examples/complex/complex.php

@@ -2,17 +2,17 @@
 
 class Complex extends Mustache {
 	public $header = 'Colors';
-	
+
 	public $item = array(
 		array('name' => 'red', 'current' => true, 'url' => '#Red'),
 		array('name' => 'green', 'current' => false, 'url' => '#Green'),
 		array('name' => 'blue', 'current' => false, 'url' => '#Blue'),
 	);
-	
+
 	public function notEmpty() {
 		return !($this->isEmpty());
 	}
-	
+
 	public function isEmpty() {
 		return count($this->item) === 0;
 	}

+ 2 - 2
examples/delimiters/Delimiters.php

@@ -2,13 +2,13 @@
 
 class Delimiters extends Mustache {
 	public $start = "It worked the first time.";
-	
+
 	public function middle() {
 		return array(
 			array('item' => "And it worked the second time."),
 			array('item' => "As well as the third."),
 		);
 	}
-	
+
 	public $final = "Then, surprisingly, it worked the final time.";
 }

+ 1 - 1
examples/double_section/DoubleSection.php

@@ -4,6 +4,6 @@ class DoubleSection extends Mustache {
 	public function t() {
 		return true;
 	}
-	
+
 	public $two = "second";
 }

+ 2 - 2
examples/sections/Sections.php

@@ -2,13 +2,13 @@
 
 class Sections extends Mustache {
 	public $start = "It worked the first time.";
-	
+
 	public function middle() {
 		return array(
 			array('item' => "And it worked the second time."),
 			array('item' => "As well as the third."),
 		);
 	}
-	
+
 	public $final = "Then, surprisingly, it worked the final time.";
 }