我使用 mustache(php 版本)作为我的模板引擎。
我想知道是否可以将 {{something}} 用作部分,而不必在模板中将其格式化为 {{>something}}。理想情况下,如果变量名称在 _partials 数组中,则该变量将被视为部分变量。
这将允许我将变量更改为部分变量,而无需对模板进行任何更改。
这可能吗?
我使用 mustache(php 版本)作为我的模板引擎。
我想知道是否可以将 {{something}} 用作部分,而不必在模板中将其格式化为 {{>something}}。理想情况下,如果变量名称在 _partials 数组中,则该变量将被视为部分变量。
这将允许我将变量更改为部分变量,而无需对模板进行任何更改。
这可能吗?
我想出了如何通过修改 Mustache.php 中的 _renderTag 函数来做到这一点。在 switch 语句中,对于默认情况,我只是检查 $tag_name 是否在 $this->_partials 数组中。
protected function _renderTag($modifier, $tag_name, $leading, $trailing) {
switch ($modifier) {
case '=':
return $this->_changeDelimiter($tag_name, $leading, $trailing);
break;
case '!':
return $this->_renderComment($tag_name, $leading, $trailing);
break;
case '>':
case '<':
return $this->_renderPartial($tag_name, $leading, $trailing);
break;
case '{':
// strip the trailing } ...
if ($tag_name[(strlen($tag_name) - 1)] == '}') {
$tag_name = substr($tag_name, 0, -1);
}
case '&':
if ($this->_hasPragma(self::PRAGMA_UNESCAPED)) {
return $this->_renderEscaped($tag_name, $leading, $trailing);
} else {
return $this->_renderUnescaped($tag_name, $leading, $trailing);
}
break;
case '#':
case '^':
case '/':
// remove any leftover section tags
return $leading . $trailing;
break;
default:
// Render var as partial if it is in _partial array (so we don't have to use "{>partial}" syntax)
if ($this->_partials[$tag_name]) {
$partial = $this->_renderPartial($tag_name, $leading, $trailing);
return $partial;
}
if ($this->_hasPragma(self::PRAGMA_UNESCAPED)) {
return $this->_renderUnescaped($modifier . $tag_name, $leading, $trailing);
} else {
return $this->_renderEscaped($modifier . $tag_name, $leading, $trailing);
}
break;
}
}