【问题标题】:Mustache partials using variable syntax (without the ">")?使用可变语法(没有“>”)的小胡子部分?
【发布时间】:2011-10-03 02:54:42
【问题描述】:

我使用 mustache(php 版本)作为我的模板引擎。

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

这将允许我将变量更改为部分变量,而无需对模板进行任何更改。

这可能吗?

【问题讨论】:

    标签: mustache


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多