改进模板包含文件对动态变量的支持

This commit is contained in:
oldrind
2016-02-04 11:39:12 +08:00
parent 4d7eb0b8a0
commit 7c24df26dd
2 changed files with 38 additions and 13 deletions

View File

@@ -132,11 +132,24 @@ class Template
* 模板变量获取 * 模板变量获取
* @access public * @access public
* @param string $name 变量名 * @param string $name 变量名
* @return string|false * @return mixed
*/ */
public function get($name) public function get($name = '')
{ {
return isset($this->data[$name]) ? $this->data[$name] : false; if ('' == $name) {
return $this->data;
} else {
$data = $this->data;
foreach (explode('.', $name) as $key => $val) {
if (isset($data[$val])) {
$data = $data[$val];
} else {
$data = false;
break;
}
}
return $data;
}
} }
/** /**
@@ -896,19 +909,21 @@ class Template
*/ */
private function parseTemplateName($templateName) private function parseTemplateName($templateName)
{ {
if ('$' == substr($templateName, 0, 1)) {
//支持加载变量文件名
$templateName = $this->get(substr($templateName, 1));
}
$array = explode(',', $templateName); $array = explode(',', $templateName);
$parseStr = ''; $parseStr = '';
foreach ($array as $templateName) { foreach ($array as $templateName) {
if (empty($templateName)) { if (empty($templateName)) {
continue; continue;
} }
if (0 === strpos($templateName, '$')) {
//支持加载变量文件名
$templateName = $this->get(substr($templateName, 1));
}
$template = $this->parseTemplateFile($templateName); $template = $this->parseTemplateFile($templateName);
// 获取模板文件内容 if (is_file($template)) {
$parseStr .= file_get_contents($template); // 获取模板文件内容
$parseStr .= file_get_contents($template);
}
} }
return $parseStr; return $parseStr;
} }
@@ -973,9 +988,9 @@ class Template
$name = 'name'; $name = 'name';
} }
if ($single) { if ($single) {
$regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?<name>[\w\-\/\.\:@,\\\\]+)\\1(?>[^' . $end . ']*)' . $end; $regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?<name>[\$\w\-\/\.\:@,\\\\]+)\\1(?>[^' . $end . ']*)' . $end;
} else { } else {
$regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?<name>[\w\-\/\.\:@,\\\\]+)\\1(?>(?:(?!' . $end . ').)*)' . $end; $regex = $begin . $tagName . '\b(?>(?:(?!' . $name . '=).)*)\b' . $name . '=([\'\"])(?<name>[\$\w\-\/\.\:@,\\\\]+)\\1(?>(?:(?!' . $end . ').)*)' . $end;
} }
break; break;
case 'tag': case 'tag':

View File

@@ -252,11 +252,13 @@ EOF;
$config['tpl_path'] = dirname(__FILE__) . '/'; $config['tpl_path'] = dirname(__FILE__) . '/';
$config['tpl_suffix'] = '.html'; $config['tpl_suffix'] = '.html';
$template = new Template($config); $template = new Template($config);
$files = ['extend' => 'extend', 'include' => 'include'];
$template->assign('files', $files);
$content = <<<EOF $content = <<<EOF
{extend name="extend" /} {extend name="\$files.extend" /}
{block name="side"} {block name="side"}
{include file="include" name="\$user.name" value="\$user.account" /} {include file="\$files.include" name="\$user.name" value="\$user.account" /}
{\$message}{literal}{\$message}{/literal} {\$message}{literal}{\$message}{/literal}
{/block} {/block}
EOF; EOF;
@@ -374,4 +376,12 @@ EOF;
$value = $template->get('name'); $value = $template->get('name');
$this->assertEquals('value', $value); $this->assertEquals('value', $value);
} }
public function testVarGet()
{
$template = new Template();
$data = ['a' => 'a', 'b' => 'b'];
$template->assign($data);
$this->assertEquals($data, $template->get());
}
} }