Частични мустаци, използващи променлив синтаксис (без ›)?

Използвам мустаци (php версия) като моя машина за шаблони.

Чудя се дали е възможно {{something}} да служи като частично, вместо да се налага да го форматирам като {{>something}} в шаблона. В идеалния случай една променлива ще се третира като частична, ако името на променливата е в масива _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