Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 26.02.2013 19:30:01

HTMLki - сложные шаблоны с простым синтаксисом

HTMLki — автономный шаблонизатор с интеграцией в Laravel. Он отличается от большей части современных шаблонизаторов, которые изобретают заново тот же PHP (гибкий, неудобный синтаксис) или Mustache (ограниченный, хороший синтаксис) — вместо этого обычный HTML дополняется циклами, условиями, переменными, языковыми строками и другими вещами.

Например:

xml  ‹ul $menu>
    ‹li "$classes">
      ‹img $icon src=$icon>
      ‹a "$url" target=$target>$caption‹/a>
    ‹/li>
  ‹/endul>

Мы видим здесь:

  • Цикл — <ul> выводится только если в $menu есть хотя бы один элемент
  • Условие — <img> выводится, только если $icon — не пустая
  • «Магические атрибуты» — <li "class"> становится <li class="class">, <a "url"> — <a href="url"> и т.д.
  • Анти-XSS — переменная $caption экранируется, если не указано обратное

Что ещё?

HTMLki компилируется в обычный PHP-код и потому весьма быстр.

Поля форм автоматически восстанавливают введённое значение, если не указано обратное.

Атрибуты src, href, action автоматически преобразуются в полный URL (<a href="user@login">) — не нужно писать вызовы asset(), route() и т.п.

Полезные теги: <csrf>, <errors> (форматирование сообщений Validator), <css> (регистрация asset) и др.

Локализация «из коробки». Циклы. Переменные. Условия. Магия тегов и атрибутов. Обычный PHP-код. Очень простое расширение почти любой части движка.

Ссылки: пакеты Laravel, GitHub, форум Laravel.com.

Установка — обычная, через Artisan:

shartisan bundle:install htmlki

После этого нужно перенести настройки из bundle.php в ваш application/bundles.php.

HTMLki заработает для шаблонов с расширениями .ki.php, .ki.html, .htmlki. Так как это обычный HTML, просто дополненный, большинство IDE будут изначально правильно подсвечивать его разметку.

Полное руководство по синтаксису (англ.).


Готов ответить на вопросы или дать больше примеров, если у кого-то есть интерес.

Не в сети

#2 28.02.2013 11:57:14

Rush
Откуда: Minsk
Сообщений: 6
Сайт

Re: HTMLki - сложные шаблоны с простым синтаксисом

формат входных данных?
хочу чтоб в 3м li стоял span с классом xzxzxz

Не в сети

#3 28.02.2013 15:32:34

Re: HTMLki - сложные шаблоны с простым синтаксисом

  1. формат входных данных?

Это обычные шаблоны, как Blade или просто HTML, только с другим расширением:

PHP
$menu = array(
  array(
'classes' => 'current''icon' => false'url' => 'page/1''target' => '_blank'),
  array(
'classes' => '''icon' => asset('menu-2.gif'), 'url' => 'page/2''target' => null),
  ...
);
// application/views/myhtmlki.ki.php, myhtmlki.ki.html или myhtmlki.htmlki
View::make('myhtmlki')->with('menu'$menu);

Всё как в Laravel.

  1. хочу чтоб в 3м li стоял span с классом xzxzxz

Есть несколько вариантов выбирай какой нравится:

xml  <ul $menu>
    ...

    <!-- вариант 1 -->
    <span ${ $key == 2 } "class-of-li-3">...</endspan>

    <!-- вариант 2 -->
    <if $key == 2> <span>...</span> </if>

Третий вариант — просто в скрипте при передаче выставлять новую переменную. Но можно и без этого. Вот что происходит выше:

Вариант 1
Используется неявное преобразование в массив. Любой HTML-тег может принимать «list variable», которая создает цикл. Эта переменная начинается с доллара. Это может быть либо имя (<tag $var>), либо произвольное PHP-выражение (<tag ${ expr }>). Если результат этой переменной/выражения не массив, ипользуется правило: null и false = пустой массив, всё остальное становится массивом с одним элементом (ключом 0). Соответственно, когда $key = 2 значение выражение — true, то есть array(true) — в этом случае <span> выводится один раз. Если $key — не 2, то значение выражения false, то есть array(). Ничего не происходит.
Вариант 2
Обычное условие, как <?php if () { или @if () в Blade. Менее элегантно, зато очевидно. В отличии от Blade в HTMLki любые теги (операторы, что одно) можно располагать на одной строке, хоть пять штук кряду.

Вообще, в циклах автоматически доступны несколько полезных переменных, такие как $isEven/$isOdd (четный/нечетный элемент), $isFirst/$isLast, $key (ключ в массиве), $i (номер элемента — для ассоциативных массивов не обязательно совпадает с $key) и ещё несколько. Список см. здесь.

Чтобы вложенные циклы не перекрывали переменные используются префиксы — форма записи как у выражений выше, но с чем-то между первым долларом и скобкой: <span $nested{ $listVar or expr }> — тогда переменные становятся $nested_menu, $i_nested и т.д.

Не в сети

#4 01.03.2013 13:20:53

Rush
Откуда: Minsk
Сообщений: 6
Сайт

Re: HTMLki - сложные шаблоны с простым синтаксисом

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

Не в сети

#5 01.03.2013 13:26:46

Re: HTMLki - сложные шаблоны с простым синтаксисом

Каждому своё.

Не в сети

#6 21.03.2013 18:41:11

Re: HTMLki - сложные шаблоны с простым синтаксисом

Rush пишет:

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

А в чем треш?
Вы сможете на пхп сделать то же самое проще и понятнее?
Ну тогда пример кода в студию!

Здесь же изменили поведение существующего щаблона минимальным вмешательством. По моему неплохо.
Надо почитать доки по этому шаблонизатору.
Привлекает что он не портит HTML. А как валидаторы отзываются на шаблоны HTMLki? Кто нибудь пробывал их подсовывать для валидации???

Не в сети

#7 21.03.2013 19:29:47

Re: HTMLki - сложные шаблоны с простым синтаксисом

  1. А как валидаторы отзываются на шаблоны HTMLki?

На сам HTMLki они, естественно, будут ругаться. Но ведь ты не отправляешь HTMLki в браузер как он есть -из него генерируется полностью рабочий HTML 5 или XHTML (в зависимости от настройки, HTML 5 по умолчанию). Так что здесь проблем никаких.

Циклы/условия HTMLki — удобная, но не обязательная для использования вещь, если они кому-то кажутся неочевидными. Это только один из аспектов шаблонизатора. Кроме них есть мелочи, которые делают проще написание HTML, например:

  • кавычки у атрибутов не обязательны, если в значении не содержатся пробелы: xml<input name=login size=5>
  • можно создавать пустые теги в стиле XHTML, при этом они автоматически раскрываются: xml<textarea /> xml<textarea></textarea>
  • у большинства тегов есть т.н. атрибуты по умолчанию — для них не обязательно писать имя, достаточно заключить значение в кавычки. Скажем, нет смысла определять форму или ссылку без адреса: xml<a "http://google.com"> xml<a href="google.com">

Это только несколько самых простых моментов, но даже они делают вёрстку намного приятнее, устраняя излишний формализм HTML.

  1. Надо почитать доки по этому шаблонизатору.

Если появятся вопросы — с радостью отвечу.

Не в сети

Подвал раздела