Есть ли HTML/XML-подобные шаблонизаторы?

Есть довольно много различных шаблонизаторов для представлений, которые компилируются при их парсинге в, скажем, нативный вид. Например что-то вроде такого для php:
@if ($article->status == 'active')
<div class="content">
   {{ $article->content }}
   @foreach ($articles->comments as $comment)
       {{ $comment->content }}
   @endforeach
</div>
@endif

Меняются лишь форматы блоков: "@if", "<% if ... %>" и т.п. Приводится все это для того же php к виду "<?php if ... : ?>".

Так вот стало интересно, есть ли шаблонизаторы с HTML/XML-подобным синтаксисом? И если нет, то почему?
Например, писать
<if article.status = 'active'>
    <div class="content">
         {{ article.content }}
         <for comment in article.comments>
            {{ comment.content }}
         </for>
    </div>
</if>

Получается, что мы практически не смешиваем языки, пишем практически на том же HTML, пусть и модифицированном. Даже подсветка синтаксиса тегов будет частично работать во многих редакторах. Тот же "for" можно привести вообще к полной валидности XML-структуры
<for each="comment" in="article.comments" by="comment_id">
    {{ comment.content }}
</for>

С условными конструкциями, конечно, сложнее, извратиться тоже можно до
<check if="article.status = 'active'">
   {{ article.status }}
</check>

С такой структурой можно было бы дополнять некоторые нативные теги, например формы. Размечаем форму как:
<form name="article" class="form">
    <label for="title" />
    <field name="title" class="form-input" />
    <field name="type" class="form-select" />
    <submit />
</form>

А программно при парсинге добавятся нужные атрибуты и значения
<form name="article" class="form" method="POST" action="/article/save/">
    <input type="hidden" name="_token" value="12345" />
    <label for="title">Article title</label>
    <input name="title" class="form-input" type="text" placeholder="Enter title..." />
    <select name="type" class="form-select">
        <option value="blog">Blog</option>
        <option value="gallery">Gallery</option>
    </select>
    <input type="submit" value="Create article" />
</form>
  • Вопрос задан
  • 2730 просмотров
Пригласить эксперта
Ответы на вопрос 5
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
а потом разбери где разметка, а где код шаблорнизатора, нет спасибо не надо, мне и twig вполне хватает.
Ответ написан
maxaon
@maxaon
Считается, что xml не удобен для редактирования, поэтому от него стараются переходить к более простому синтаксису (yaml, json).
А "шаблонизатор" существует на клиентской стороне, angular.js называется. Он правильно делает - дополняет и расширяет html.
Ответ написан
AmdY
@AmdY
PHP и прочие вебштучки
Есть, конечно. slaslaphptal.org/introduction.html
Изначально все пытались делать либо через комменты, либо встраивая в теги, либо своими тегами, да и подсветка работала, это последнее время все придумывают свои теги.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы