From db0eae9d5df594917b37b083c9039e4f6d806840 Mon Sep 17 00:00:00 2001 From: oldrind <1401019000@qq.com> Date: Thu, 28 Jan 2016 17:49:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8D=87template=E7=B1=BB=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E8=A6=86=E7=9B=96=E7=8E=87=EF=BC=8C=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?include=E6=A0=87=E7=AD=BE=E4=BC=A0=E5=8F=98=E9=87=8F=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF=20=EF=BC=8C=E4=BB=A5$=E5=BC=80=E5=A4=B4?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E4=BC=A0=E7=9A=84=E6=98=AF=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Template.php | 19 +- library/think/template/TagLib.php | 14 +- tests/thinkphp/library/think/extend.html | 11 ++ tests/thinkphp/library/think/include.html | 1 + tests/thinkphp/library/think/layout.html | 2 + tests/thinkphp/library/think/templateTest.php | 165 +++++++++--------- 6 files changed, 119 insertions(+), 93 deletions(-) create mode 100644 tests/thinkphp/library/think/extend.html create mode 100644 tests/thinkphp/library/think/include.html create mode 100644 tests/thinkphp/library/think/layout.html diff --git a/library/think/Template.php b/library/think/Template.php index ffc263b9..82f5c83b 100644 --- a/library/think/Template.php +++ b/library/think/Template.php @@ -383,6 +383,9 @@ class Template $parseStr = $this->parseTemplateName($file); // 替换变量 foreach ($array as $k => $v) { + if (0 == strpos($v, '$')) { + $v = ltrim($this->config['tpl_begin'], '\\') . $v . ltrim($this->config['tpl_end'], '\\'); + } $parseStr = str_replace('[' . $k . ']', $v, $parseStr); } // 再次对包含文件进行模板分析 @@ -455,10 +458,12 @@ class Template $regex = $this->getRegex($restore ? 'restoreliteral' : 'literal'); if (preg_match_all($regex, $content, $matches, PREG_SET_ORDER)) { if (!$restore) { + $count = count($this->literal); // 替换literal标签 foreach ($matches as $i => $match) { $this->literal[] = substr($match[0], strlen($match[1]), -strlen($match[2])); - $content = str_replace($match[0], "", $content); + $content = str_replace($match[0], "", $content); + $count++; } } else { // 还原literal标签 @@ -821,14 +826,14 @@ class Template if (isset($vars[2])) { $parseStr = '$_COOKIE[\'' . $vars[1] . '\'][\'' . $vars[2] . '\']'; } else { - $parseStr = '\\think\\cookie::get(\'' . $vars[1] . '\')'; + $parseStr = '\\think\\Cookie::get(\'' . $vars[1] . '\')'; } break; case 'SESSION': if (isset($vars[2])) { $parseStr = '$_SESSION[\'' . $vars[1] . '\'][\'' . $vars[2] . '\']'; } else { - $parseStr = '\\think\\session::get(\'' . $vars[1] . '\')'; + $parseStr = '\\think\\Session::get(\'' . $vars[1] . '\')'; } break; case 'ENV': @@ -841,13 +846,13 @@ class Template $parseStr = strtoupper($vars[1]); break; case 'LANG': - $parseStr = '\\think\\lang::get(\'' . $vars[1] . '\')'; + $parseStr = '\\think\\Lang::get(\'' . $vars[1] . '\')'; break; case 'CONFIG': if (isset($vars[2])) { $vars[1] .= '.' . $vars[2]; } - $parseStr = '\\think\\config::get(\'' . $vars[1] . '\')'; + $parseStr = '\\think\\Config::get(\'' . $vars[1] . '\')'; break; default: break; @@ -862,10 +867,10 @@ class Template $parseStr = 'THINK_VERSION'; break; case 'LDELIM': - $parseStr = $this->config['tpl_begin']; + $parseStr = '\'' . ltrim($this->config['tpl_begin'], '\\') . '\''; break; case 'RDELIM': - $parseStr = $this->config['tpl_end']; + $parseStr = '\'' . ltrim($this->config['tpl_end'], '\\') . '\''; break; default: if (defined($vars[0])) { diff --git a/library/think/template/TagLib.php b/library/think/template/TagLib.php index be02d6a0..ad410fb4 100644 --- a/library/think/template/TagLib.php +++ b/library/think/template/TagLib.php @@ -136,12 +136,12 @@ class TagLib // 标签替换 从后向前 foreach ($nodes as $pos => $node) { // 对应的标签名 - $name = $tags[1][$node['name']]; + $name = $node['name']; // 解析标签属性 $attrs = $this->parseAttr($node['begin'][0], $name); $method = '_' . $name; // 读取标签库中对应的标签内容 replace[0]用来替换标签头,replace[1]用来替换标签尾 - $replace = explode($break, $this->$method($attrs, $break, $node['name'])); + $replace = explode($break, $this->$method($attrs, $break)); if (count($replace) > 1) { while ($beginArray) { $begin = end($beginArray); @@ -171,13 +171,13 @@ class TagLib // 自闭合标签 if (!empty($tags[0])) { $regex = $this->getRegex(array_keys($tags[0]), 0); - $self = &$this; - $content = preg_replace_callback($regex, function ($matches) use (&$tags, &$self) { - $name = $tags[0][$matches[1]]; + $content = preg_replace_callback($regex, function ($matches) use (&$tags) { + // 对应的标签名 + $name = $matches[1]; // 解析标签属性 - $attrs = $self->parseAttr($matches[0], $name); + $attrs = $this->parseAttr($matches[0], $name); $method = '_' . $name; - return $self->$method($attrs, '', $matches[1]); + return $this->$method($attrs, ''); }, $content); } return; diff --git a/tests/thinkphp/library/think/extend.html b/tests/thinkphp/library/think/extend.html new file mode 100644 index 00000000..194fbbf9 --- /dev/null +++ b/tests/thinkphp/library/think/extend.html @@ -0,0 +1,11 @@ +{layout name="layout" replace="[__REPLACE__]" /} +