Possible fix for #1 - ability to use partials with an arbitrary (non-Mustache) view class.

This commit is contained in:
Justin Hileman
2010-05-22 18:34:24 -04:00
parent 9f31a821e1
commit eeb5b245d1
4 changed files with 28 additions and 44 deletions
+4 -44
View File
@@ -424,10 +424,10 @@ class Mustache {
* @return string
*/
protected function _renderPartial($tag_name, &$context) {
$view = new self($this->_getPartial($tag_name), $this->_flattenContext($context), $this->_partials);
$view->_otag = $this->_otag;
$view->_ctag = $this->_ctag;
return $view->render();
$view = clone($this);
$view->_otag = '{{';
$view->_ctag = '}}';
return $view->render($this->_getPartial($tag_name));
}
/**
@@ -450,7 +450,6 @@ class Mustache {
return '';
}
/**
* Prepare a new context reference array.
*
@@ -470,45 +469,6 @@ class Mustache {
return $ret;
}
/**
* Prepare a new (flattened) context.
*
* This is used to create a view object or array for rendering partials.
*
* @access protected
* @param array &$context
* @return array
* @throws MustacheException
*/
protected function _flattenContext(&$context) {
$keys = array_keys($context);
$first = $context[$keys[0]];
if ($first instanceof Mustache) {
$ret = clone $first;
unset($keys[0]);
foreach ($keys as $name) {
foreach ($context[$name] as $key => $val) {
$ret->$key =& $val;
}
}
} else if (is_array($first)) {
$ret = array();
foreach ($keys as $name) {
foreach ($context[$name] as $key => $val) {
$ret[$key] =& $val;
}
}
} else {
throw new MustacheException('Unknown root context type.');
}
return $ret;
}
/**
* Get a variable from the context array.
*
@@ -0,0 +1,19 @@
<?php
class PartialsWithViewClass extends Mustache {
public function __construct($template = null, $view = null, $partials = null) {
// Use an object of an arbitrary class as a View for this Mustache instance:
$view = new StdClass();
$view->name = 'ilmich';
$view->data = array(
array('name' => 'federica', 'age' => 27, 'gender' => 'female'),
array('name' => 'marco', 'age' => 32, 'gender' => 'male'),
);
$partials = array(
'children' => "{{#data}}{{name}} - {{age}} - {{gender}}\n{{/data}}",
);
parent::__construct($template, $view, $partials);
}
}
@@ -0,0 +1,2 @@
Children of {{name}}:
{{>children}}
@@ -0,0 +1,3 @@
Children of ilmich:
federica - 27 - female
marco - 32 - male