Писать чистый HTML зачастую неудобно, особенно если вам нужно делать динамические вставки.
Шаблонизаторы частично решают эту проблему, но нужно изучать их причудливый синтаксис, мириться с ограничениями, вкладывать одни шаблоны в другие для повторного использования, в общем попытка хорошая, но что-то не так.
У некоторых фреймворков есть помощники, в частности я был вынужден написать эту статью Аура.
Html .
Помощники — это отдельная история — они изначально создавались для реального упрощения, поскольку одна команда может сгенерировать хороший кусок HTML-кода, но они в основном заточены под конкретное использование, а все, что выходит за рамки этого, выглядит слишком криво.
В качестве более универсального решения было бы неплохо не придумывать навороченный синтаксис, а использовать самые распространенные PHP и привычные примитивные CSS-селекторы.
Думая в этом духе, некоторое время назад я начал распиливать свой велосипед. Велосипед собирался, использовался как часть другого велосипеда, затем отделялся, много раз обновлялся, и теперь мне хотелось бы поделиться им с сообществом.
Как это работает?
Идея заключалась в том, чтобы сделать это как можно проще:какой будет результатh::div('Content')
<div>
Content
</div>
Это самый простой пример.
Имя метода — это тег, значение передается внутрь.
Если вам нужно добавить атрибуты, нет проблем: h::div(
'Content',
[
'class' => 'some-content'
]
)
<div class="some-content">
Content
</div>
И можно подумать, что проще быть не может, но тут на помощь приходят CSS-селекторы и немного уличной магии: h::{'div.some-content'}('Content')
Результат будет таким же.
На первый взгляд это может показаться немного странным, но на практике это очень удобно.
По сравнению с Aura.Html
В начале я упомянул Aura.Html, стоит сравнить, как генерируется HTML там и здесь.
Aura.Html (пример из документации): $helper->input(array(
'type' => 'search',
'name' => 'foo',
'value' => 'bar',
'attribs' => array()
));
Наш вариант: h::{'input[type=search][name=foo][value=bar]'}()
Любой из параметров можно поместить в массив.
На выходе: <input name="foo" type="search" value="bar">
И еще один более серьезный вариант.
Aura.Html (пример из документации): $helper->input(array(
'type' => 'select',
'name' => 'foo',
'value' => 'bar',
'attribs' => array(
'placeholder' => 'Please pick one',
),
'options' => array(
'baz' => 'Baz Label',
'dib' => 'Dib Label',
'bar' => 'Bar Label',
'zim' => 'Zim Label',
),
))
Наш вариант: h::{'select[name=foo]'}([
'in' => [
'Please pick one',
'Baz Label',
'Dib Label',
'Bar Label',
'Zim Label'
],
'value' => [
'',
'baz',
'dib',
'bar',
'zim'
],
'selected' => 'bar',
'disabled' => ''
])
Здесь в используется явно, его можно использовать для передачи внутреннего содержимого тега, например Содержание в примере с div выше.
Используются как общие правила, так и некоторые специальные, о которых чуть подробнее ниже.
Вывод тот же: <select name="foo">
Теги: #HTML #движок без шаблонов #генератор HTML #разработка веб-сайтов #php
-
Foursquare Преодолел Отметку В 10 000 000
19 Oct, 24 -
Создание Gsmrozetka.ru
19 Oct, 24 -
Какой Браузер Вы Используете?
19 Oct, 24