Генерация Html: Удобнее, Чем Помощники И Чистый Html

Писать чистый 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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.