mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Fix #241 + tests
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user