mirror of
https://github.com/Mibew/handlebars.php.git
synced 2025-05-02 18:26:40 +03:00
Adding Handlebars_String to fix #12
If a helper return a Handlebars_String, then the result is compiled again.
This commit is contained in:
parent
63cd738e64
commit
65eb09d101
@ -418,6 +418,20 @@ class Handlebars_Engine
|
|||||||
return new Handlebars_Template($this, $tree, $source);
|
return new Handlebars_Template($this, $tree, $source);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load string into a template object
|
||||||
|
*
|
||||||
|
* @param string $source string to load
|
||||||
|
*
|
||||||
|
* @return Handlebars_Template
|
||||||
|
*/
|
||||||
|
public function loadString($source)
|
||||||
|
{
|
||||||
|
$tree = $this->_tokenize($source);
|
||||||
|
return new Handlebars_Template($this, $tree, $source);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* try to tokenize source, or get them from cache if available
|
* try to tokenize source, or get them from cache if available
|
||||||
*
|
*
|
||||||
|
@ -34,7 +34,7 @@ interface Handlebars_Loader
|
|||||||
*
|
*
|
||||||
* @param string $name template name to load
|
* @param string $name template name to load
|
||||||
*
|
*
|
||||||
* @return string Mustache Template source
|
* @return Handlebars_String
|
||||||
*/
|
*/
|
||||||
public function load($name);
|
public function load($name);
|
||||||
}
|
}
|
||||||
|
@ -84,15 +84,14 @@ class Handlebars_Loader_FilesystemLoader implements Handlebars_Loader
|
|||||||
*
|
*
|
||||||
* @param string $name template name
|
* @param string $name template name
|
||||||
*
|
*
|
||||||
* @return string Handlebars Template source
|
* @return Handlebars_String Handlebars Template source
|
||||||
*/
|
*/
|
||||||
public function load($name)
|
public function load($name)
|
||||||
{
|
{
|
||||||
if (!isset($this->_templates[$name])) {
|
if (!isset($this->_templates[$name])) {
|
||||||
$this->_templates[$name] = $this->loadFile($name);
|
$this->_templates[$name] = $this->loadFile($name);
|
||||||
}
|
}
|
||||||
|
return new Handlebars_String($this->_templates[$name]);
|
||||||
return $this->_templates[$name];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,10 +34,10 @@ class Handlebars_Loader_StringLoader implements Handlebars_Loader
|
|||||||
*
|
*
|
||||||
* @param string $name Handlebars Template source
|
* @param string $name Handlebars Template source
|
||||||
*
|
*
|
||||||
* @return string Handlebars Template source
|
* @return Handlebars_string Handlebars Template source
|
||||||
*/
|
*/
|
||||||
public function load($name)
|
public function load($name)
|
||||||
{
|
{
|
||||||
return $name;
|
return new Handlebars_String($name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
74
src/Handlebars/String.php
Normal file
74
src/Handlebars/String.php
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of Handlebars-php
|
||||||
|
*
|
||||||
|
* PHP version 5.3
|
||||||
|
*
|
||||||
|
* @category Xamin
|
||||||
|
* @package Handlebars
|
||||||
|
* @author fzerorubigd <fzerorubigd@gmail.com>
|
||||||
|
* @copyright 2013 Authors
|
||||||
|
* @license GPLv3 <http://www.gnu.org/licenses/gpl-3.0.html>
|
||||||
|
* @version GIT: $Id$
|
||||||
|
* @link http://xamin.ir
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handlebars string
|
||||||
|
*
|
||||||
|
* @category Xamin
|
||||||
|
* @package Handlebars
|
||||||
|
* @author fzerorubigd <fzerorubigd@gmail.com>
|
||||||
|
* @copyright 2013 Authors
|
||||||
|
* @license GPLv3 <http://www.gnu.org/licenses/gpl-3.0.html>
|
||||||
|
* @version Release: @package_version@
|
||||||
|
* @link http://xamin.ir
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Handlebars_String
|
||||||
|
{
|
||||||
|
private $_string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new string
|
||||||
|
*
|
||||||
|
* @param string $string input source
|
||||||
|
*/
|
||||||
|
public function __construct($string)
|
||||||
|
{
|
||||||
|
$this->_string = $string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To String
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return $this->getString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getString()
|
||||||
|
{
|
||||||
|
return $this->_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new string
|
||||||
|
*
|
||||||
|
* @param string $string input source
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setString($string)
|
||||||
|
{
|
||||||
|
$this->_string = $string;
|
||||||
|
}
|
||||||
|
}
|
@ -249,7 +249,12 @@ class Handlebars_Template
|
|||||||
$current[Handlebars_Tokenizer::ARGS], //Arguments
|
$current[Handlebars_Tokenizer::ARGS], //Arguments
|
||||||
$source
|
$source
|
||||||
);
|
);
|
||||||
return call_user_func_array($helpers->$sectionName, $params);
|
$return = call_user_func_array($helpers->$sectionName, $params);
|
||||||
|
if ($return instanceof Handlebars_String) {
|
||||||
|
return $this->handlebars->loadString($return)->render($context);
|
||||||
|
} else {
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
} elseif (trim($current[Handlebars_Tokenizer::ARGS]) == '') {
|
} elseif (trim($current[Handlebars_Tokenizer::ARGS]) == '') {
|
||||||
//Fallback for mustache style each/with/for just if there is no argument at all.
|
//Fallback for mustache style each/with/for just if there is no argument at all.
|
||||||
try {
|
try {
|
||||||
|
@ -106,6 +106,9 @@ class Handlebars_Tokenizer
|
|||||||
*/
|
*/
|
||||||
public function scan($text, $delimiters = null)
|
public function scan($text, $delimiters = null)
|
||||||
{
|
{
|
||||||
|
if ($text instanceof Handlebars_String) {
|
||||||
|
$text = $text->getString();
|
||||||
|
}
|
||||||
$this->reset();
|
$this->reset();
|
||||||
|
|
||||||
if ($delimiters = trim($delimiters)) {
|
if ($delimiters = trim($delimiters)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user