Fix #241 + tests

This commit is contained in:
bzick
2016-10-09 23:40:37 +03:00
parent 05cda5426d
commit b92e0bbad3
7 changed files with 95 additions and 117 deletions

View File

@@ -944,9 +944,9 @@ class Fenom
*
* @return Fenom\Template
*/
public function getRawTemplate()
public function getRawTemplate(Template $parent = null)
{
return new Template($this, $this->_options);
return new Template($this, $this->_options, $parent);
}
/**

View File

@@ -38,13 +38,24 @@ class Compiler
$p = $tpl->parseParams($tokens);
if ($name) {
if ($tpl->getStorage()->getOptions() & \Fenom::FORCE_INCLUDE) {
$inc = $tpl->getStorage()->compile($name, false);
$tpl->addDepend($inc);
$var = $tpl->tmpVar();
if ($p) {
return $var . ' = $var; $var = ' . self::toArray($p) . ' + $var; ?>' . $inc->getBody() . '<?php $var = ' . $var . '; unset(' . $var . ');';
} else {
return $var . ' = $var; ?>' . $inc->getBody() . '<?php $var = ' . $var . '; unset(' . $var . ');';
$_t = $tpl;
$recursion = false;
while($_t->parent) {
if($_t->parent->getName() == $name) { // recursion detected
$recursion = true;
}
$_t = $_t->parent;
}
if(!$recursion) {
$inc = $tpl->getStorage()->getRawTemplate($tpl);
$inc->load($name, true);
$tpl->addDepend($inc);
$var = $tpl->tmpVar();
if ($p) {
return $var . ' = $var; $var = ' . self::toArray($p) . ' + $var; ?>' . $inc->getBody() . '<?php $var = ' . $var . '; unset(' . $var . ');';
} else {
return $var . ' = $var; ?>' . $inc->getBody() . '<?php $var = ' . $var . '; unset(' . $var . ');';
}
}
} elseif (!$tpl->getStorage()->templateExists($name)) {
throw new \LogicException("Template $name not found");

View File

@@ -81,6 +81,12 @@ class Template extends Render
public $extend_body = false;
/**
* Parent template
* @var Template
*/
public $parent;
/**
* Template PHP code
* @var string
@@ -121,10 +127,11 @@ class Template extends Render
/**
* @param Fenom $fenom Template storage
* @param int $options
* @return \Fenom\Template
* @param Template $parent
*/
public function __construct(Fenom $fenom, $options)
public function __construct(Fenom $fenom, $options, Template $parent = null)
{
$this->parent = $parent;
$this->_fenom = $fenom;
$this->_options = $options;
$this->_filters = $this->_fenom->getFilters();