Частичные усы с использованием синтаксиса переменных (без ›)?

Я использую усы (версия php) в качестве шаблонизатора.

Мне интересно, возможно ли, чтобы {{что-то}} служило частичным, вместо того, чтобы форматировать его как {{>что-то}} в шаблоне. В идеале переменная должна рассматриваться как партиал, если имя переменной находится в массиве _partials.

Это позволило бы мне изменить переменную на частичную без внесения каких-либо изменений в шаблоны.

Это возможно?


person makeee    schedule 11.07.2011    source источник


Ответы (1)


Я понял, как это сделать, изменив функцию _renderTag в Mustache.php. В операторе 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;
    }
}
person makeee    schedule 11.07.2011