使用可变语法的Mustache partials(没有“>”)?

时间:2011-07-11 20:25:07

标签: mustache

我正在使用小胡子(php版)作为我的模板引擎。

我想知道是否可以将{{something}}作为部分内容,而不必在模板中将其格式化为{{> something}}。理想情况下,如果变量名称位于_partials数组中,则变量将被视为部分变量。

这样我就可以将变量更改为部分而无需对模板进行任何更改。

这可能吗?

1 个答案:

答案 0 :(得分:0)

我想通过修改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;
    }
}