mirror of
https://github.com/fenom-template/fenom.git
synced 2023-08-10 21:13:07 +03:00
Add 'how it work'
This commit is contained in:
parent
25975a6782
commit
cb803f5d9c
@ -1,6 +1,14 @@
|
|||||||
CHANGELOG
|
CHANGELOG
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
## 1.3.0
|
||||||
|
|
||||||
|
- Feature #41: Add system variable `$`.
|
||||||
|
- Fix bug when recursive macros doesn't work in Template
|
||||||
|
- Recognize variable parser
|
||||||
|
- Tests++
|
||||||
|
- Docs--
|
||||||
|
|
||||||
### 1.2.2 (2013-08-07)
|
### 1.2.2 (2013-08-07)
|
||||||
|
|
||||||
- Fix bug in setOptions method
|
- Fix bug in setOptions method
|
||||||
|
@ -3,4 +3,6 @@ Develop
|
|||||||
|
|
||||||
If you want to discuss the enhancement of the Fenom, create an issue on Github or submit a pull request.
|
If you want to discuss the enhancement of the Fenom, create an issue on Github or submit a pull request.
|
||||||
|
|
||||||
For questions: a.cobest@gmail.com (English, Russian languages)
|
For questions: a.cobest@gmail.com (English, Russian languages)
|
||||||
|
|
||||||
|
[./git.md](Git conversation)
|
@ -17,7 +17,7 @@ use Fenom\Template;
|
|||||||
*/
|
*/
|
||||||
class Fenom
|
class Fenom
|
||||||
{
|
{
|
||||||
const VERSION = '1.2';
|
const VERSION = '1.3';
|
||||||
|
|
||||||
/* Actions */
|
/* Actions */
|
||||||
const INLINE_COMPILER = 1;
|
const INLINE_COMPILER = 1;
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
namespace Fenom;
|
namespace Fenom;
|
||||||
use Fenom;
|
use Fenom;
|
||||||
|
use Symfony\Component\Yaml\Exception\RuntimeException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Primitive template
|
* Primitive template
|
||||||
@ -69,6 +70,11 @@ class Render extends \ArrayObject
|
|||||||
*/
|
*/
|
||||||
protected $_provider;
|
protected $_provider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Closure[]
|
||||||
|
*/
|
||||||
|
protected $_macros;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Fenom $fenom
|
* @param Fenom $fenom
|
||||||
* @param callable $code template body
|
* @param callable $code template body
|
||||||
@ -192,6 +198,10 @@ class Render extends \ArrayObject
|
|||||||
*/
|
*/
|
||||||
public function getMacro($name)
|
public function getMacro($name)
|
||||||
{
|
{
|
||||||
|
if(empty($this->_macros[$name])) {
|
||||||
|
var_dump($this->_macros[$name]); exit;
|
||||||
|
throw new RuntimeException('macro not found');
|
||||||
|
}
|
||||||
return $this->_macros[$name];
|
return $this->_macros[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,18 +397,6 @@ class Template extends Render
|
|||||||
*/
|
*/
|
||||||
public function getTemplateCode()
|
public function getTemplateCode()
|
||||||
{
|
{
|
||||||
|
|
||||||
if ($this->macros) {
|
|
||||||
$macros = array();
|
|
||||||
foreach ($this->macros as $m) {
|
|
||||||
if ($m["recursive"]) {
|
|
||||||
$macros[] = "\t\t'" . $m["name"] . "' => function (\$tpl) {\n?>" . $m["body"] . "<?php\n}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$macros = "\n" . implode(",\n", $macros);
|
|
||||||
} else {
|
|
||||||
$macros = "";
|
|
||||||
}
|
|
||||||
$before = $this->_before ? $this->_before . "\n" : "";
|
$before = $this->_before ? $this->_before . "\n" : "";
|
||||||
return "<?php \n" .
|
return "<?php \n" .
|
||||||
"/** Fenom template '" . $this->_name . "' compiled at " . date('Y-m-d H:i:s') . " */\n" .
|
"/** Fenom template '" . $this->_name . "' compiled at " . date('Y-m-d H:i:s') . " */\n" .
|
||||||
@ -420,10 +408,29 @@ class Template extends Render
|
|||||||
"\t'base_name' => " . var_export($this->_base_name, true) . ",\n" .
|
"\t'base_name' => " . var_export($this->_base_name, true) . ",\n" .
|
||||||
"\t'time' => {$this->_time},\n" .
|
"\t'time' => {$this->_time},\n" .
|
||||||
"\t'depends' => " . var_export($this->_base_name, true) . ",\n" .
|
"\t'depends' => " . var_export($this->_base_name, true) . ",\n" .
|
||||||
"\t'macros' => array({$macros}),
|
"\t'macros' => " . $this->_getMacrosArray() . ",\n
|
||||||
));\n";
|
));\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make array with macros code
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function _getMacrosArray()
|
||||||
|
{
|
||||||
|
if ($this->macros) {
|
||||||
|
$macros = array();
|
||||||
|
foreach ($this->macros as $m) {
|
||||||
|
if ($m["recursive"]) {
|
||||||
|
$macros[] = "\t\t'" . $m["name"] . "' => function (\$tpl) {\n?>" . $m["body"] . "<?php\n}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "array(\n" . implode(",\n", $macros).")";
|
||||||
|
} else {
|
||||||
|
return 'array()';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return closure code
|
* Return closure code
|
||||||
* @return string
|
* @return string
|
||||||
@ -444,7 +451,7 @@ class Template extends Render
|
|||||||
{
|
{
|
||||||
if (!$this->_code) {
|
if (!$this->_code) {
|
||||||
// evaluate template's code
|
// evaluate template's code
|
||||||
eval("\$this->_code = " . $this->_getClosureSource() . ";");
|
eval("\$this->_code = " . $this->_getClosureSource() . ";\n\$this->_macros = ".$this->_getMacrosArray() .';');
|
||||||
if (!$this->_code) {
|
if (!$this->_code) {
|
||||||
throw new CompileException("Fatal error while creating the template");
|
throw new CompileException("Fatal error while creating the template");
|
||||||
}
|
}
|
||||||
|
@ -51,16 +51,21 @@ class MacrosTest extends TestCase
|
|||||||
{/if}
|
{/if}
|
||||||
{/macro}
|
{/macro}
|
||||||
|
|
||||||
{macro.factorial num=10}');
|
XXXX: {macro.factorial num=10}');
|
||||||
|
|
||||||
|
$this->tpl("macro_recursive_import.tpl", '
|
||||||
|
{import "macro_recursive.tpl" as math}
|
||||||
|
|
||||||
|
YYYY: {math.factorial num=10}');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _testSandbox()
|
public function testSandbox()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->fenom->compile("macro_recursive.tpl");
|
// $this->fenom->compile("macro_recursive.tpl")->display([]);
|
||||||
// $this->fenom->flush();
|
// $this->fenom->flush();
|
||||||
// var_dump($this->fenom->fetch("macro_recursive.tpl", []));
|
// var_dump($this->fenom->fetch("macro_recursive.tpl", []));
|
||||||
var_dump( $this->fenom->compile("macro_recursive.tpl")->getTemplateCode());
|
var_dump( $this->fenom->compile("macro_recursive_import.tpl")->getTemplateCode([]));
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
var_dump($e->getMessage() . ": " . $e->getTraceAsString());
|
var_dump($e->getMessage() . ": " . $e->getTraceAsString());
|
||||||
}
|
}
|
||||||
@ -107,4 +112,12 @@ class MacrosTest extends TestCase
|
|||||||
$tpl = $this->fenom->getTemplate('macro_recursive.tpl');
|
$tpl = $this->fenom->getTemplate('macro_recursive.tpl');
|
||||||
$this->assertSame("10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10", Modifier::strip($tpl->fetch(array()), true));
|
$this->assertSame("10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10", Modifier::strip($tpl->fetch(array()), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testImportRecursive()
|
||||||
|
{
|
||||||
|
$this->fenom->compile('macro_recursive_import.tpl');
|
||||||
|
$this->fenom->flush();
|
||||||
|
$tpl = $this->fenom->getTemplate('macro_recursive.tpl');
|
||||||
|
$this->assertSame("10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10", Modifier::strip($tpl->fetch(array()), true));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user