Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Libraries > PHP Шаблонизатор


Автор: undercloud 23.5.2016, 16:24
Всем доброго дня! Я тут создал новый шаблонизатор для PHP http://undercloud.github.io/ant/.
Возможно кому нибудь понравится, интересно Ваше мнение, предложения, баг репорты и т.д.

Автор: Евгений Павленко 23.5.2016, 17:57
В чем его преимущества по сравнению с Твигом, etc ?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/PHP-Shablonizator-id57430527ae201551628b4567#findElement_E7045_57431a53ae2015d275953c77_0

Автор: undercloud 23.5.2016, 18:48
Цитата(Евгений Павленко @ 23.5.2016,  17:57)
В чем его преимущества по сравнению с Твигом, etc ?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/PHP-Shablonizator-id57430527ae201551628b4567#findElement_E7045_57431a53ae2015d275953c77_0

Отличия конечно есть, есть встроенный итератор состояний http://undercloud.github.io/ant/#control-foreach, отдельный слой логики, HAML, JADE, встроенный валидатор-линтер, синтаксис проще - меньше нагромождения  служебных тегов,посмотрите документацию

Автор: ksnk 24.5.2016, 21:46
Я правильно понимаю, что в шаблонизаторе нет блоков и макросов, как в твиге или смарти? 
Наследования шаблонов тоже нет?

P.S. неправильно понимаю, наследование с блоками есть

Автор: ksnk 25.5.2016, 08:18
Нормальный проект должен содержать тесты и примеры. Иначе его слишком сложно оценивать. 

Автор: Sentox 25.5.2016, 09:12
Ну так Razor лучше тогда на порядок

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/PHP-Shablonizator-id57430527ae201551628b4567#findElement_E7045_57454266ae2015251a953c9b_0

Автор: ksnk 25.5.2016, 11:11
Sentox, Razor - это тот, который для ASP.NET? Тут, вроде, про php разговор. Хотя синтаксис, на первый взгляд, что-то общее имеет. Буковку @  smile 
Основной косяк этого шаблонизатора - выполнение "шаблонных вставок" с помощью eval'а. При таком выборе говорить о хоть о какой то скорости работы уже не приходится. Так что остается только синтаксис. Чем синтаксис лучше синтаксиса твига - не могу понять. Хотя конструкция 
{{ value or 'пусто'}} мне нравится чуть больше, чем твиговский {{value|default('пусто')}}, хотя еще больше бы нравился {{value || 'пусто'}}, по принятым в Javascript соглашениям...

Автор: undercloud 25.5.2016, 11:18
Цитата(ksnk @ 24.5.2016,  21:46)
Я правильно понимаю, что в шаблонизаторе нет блоков и макросов, как в твиге или смарти? 
Наследования шаблонов тоже нет?

P.S. неправильно понимаю, наследование с блоками есть

Есть определение собственных функций и расширение синтаксиса

Добавлено через 43 секунды
Цитата(Sentox @ 25.5.2016,  09:12)
Ну так Razor лучше тогда на порядок

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/PHP-Shablonizator-id57430527ae201551628b4567#findElement_E7045_57454266ae2015251a953c9b_0

Что такое Razor?

Добавлено через 2 минуты и 19 секунд
Цитата(ksnk @ 25.5.2016,  08:18)
Нормальный проект должен содержать тесты и примеры. Иначе его слишком сложно оценивать.

В планах - сделать онлайн песочницу, а насчет тестирования, оно есть - но не привел к нужному виду и не добавил в коммит

Добавлено через 5 минут и 50 секунд
Цитата(ksnk @ 25.5.2016,  11:11)
Sentox, Razor - это тот, который для ASP.NET? Тут, вроде, про php разговор. Хотя синтаксис, на первый взгляд, что-то общее имеет. Буковку @  smile 
Основной косяк этого шаблонизатора - выполнение "шаблонных вставок" с помощью eval'а. При таком выборе говорить о хоть о какой то скорости работы уже не приходится. Так что остается только синтаксис. Чем синтаксис лучше синтаксиса твига - не могу понять. Хотя конструкция 
{{ value or 'пусто'}} мне нравится чуть больше, чем твиговский {{value|default('пусто')}}, хотя еще больше бы нравился {{value || 'пусто'}}, по принятым в Javascript соглашениям...

Насчет eval - неправильно поняли, он для исполнения строк-шаблонов объявленных в  коде
Код

$tmpl = "
@if(true)
  {{ $var }}
@endif
"

echo Ant::init()->fromString($tmpl)->draw()


Добавлено через 7 минут и 3 секунды
Цитата(ksnk @ 25.5.2016,  11:11)
 При таком выборе говорить о хоть о какой то скорости работы уже не приходится...

Шаблоны кешируются, скорость исполнения === скорость нативных php шаблонов

Автор: ksnk 25.5.2016, 13:59
В @if может стоять сложная конструкция, со сравнениями, скобками и так далее?

Автор: ksnk 25.5.2016, 14:27
В общем - надо больше примеров. 
Иначе приходится разбираться в коде по исходникам - даже у меня заряд мазохизма иссяк  smile 

Насколько я понял - все служебные конструкции с @ тупо и цинично трансформируются строковыми заменами в соответствующие php конструкции. Получившийся файл и используется в качестве php-шаблона. Особенного анализа получившегося текста не производится. Так что несложно сломать шаблон, вставив в тело @if или @for синтаксически неверную конструкцию.
Разбираться с файлом и строкой ошибки может оказать непросто.

Автор: undercloud 25.5.2016, 15:01
Цитата(ksnk @ 25.5.2016,  13:59)
В @if может стоять сложная конструкция, со сравнениями, скобками и так далее?

абсолютно любая, любая вложенность конструкций

Добавлено через 2 минуты и 4 секунды
Цитата(ksnk @ 25.5.2016,  14:27)
Насколько я понял - все служебные конструкции с @ тупо и цинично трансформируются строковыми заменами в соответствующие php конструкции. Получившийся файл и используется в качестве php-шаблона. Особенного анализа получившегося текста не производится. Так что несложно сломать шаблон, вставив в тело @if или @for синтаксически неверную конструкцию.
Разбираться с файлом и строкой ошибки может оказать непросто.

Вот тут да, согласен - дебажить шаблон будет затруднительно

Автор: _zorn_ 25.5.2016, 16:00
Цитата(ksnk @  25.5.2016,  18:11 Найти цитируемый пост)
{{ value or 'пусто'}}

Цитата(ksnk @  25.5.2016,  18:11 Найти цитируемый пост)
{{value || 'пусто'}}

Тоже самое же smile 
Дело только в приоритетах, но кого они волнуют на одной операции ? smile
Это я про пхп. Мы же в пхп ветке да ?  smile 

Мне наоборот в шаблонах нравится более "человечный" язык. 
Сам в твиге стараюсь использовать "is not null" вместо "!= null" например.
Ну а "|default()"... твиг более требователен к неопределенным переменным. Тут на вкус и цвет.

Цитата(undercloud @  25.5.2016,  18:18 Найти цитируемый пост)
Есть определение собственных функций и расширение синтаксиса

В твиге все это есть.

Свой велосипед это конечно хорошо... но хорошо ТОЛЬКО для саморазвития. Предлагать и не дай боже использовать в реальных проектах - однозначные проклятия от поддерживающих этот проект.
Тем более если нет реальных преимуществ.

Автор: ksnk 25.5.2016, 16:55
Цитата(_zorn_ @  25.5.2016,  16:00 Найти цитируемый пост)
Тоже самое же

Нее! Мне больше нравится javascript - синтаксис. Он, как правило, лаконичнее, хотя и не всегда очевиден.

Ну а в этом случае - такое использование or вообще может быть вредным для здоровья(как и ||), так как синтаксис выражений внутри условий - чистый php в котором or выдает логический результат а не текстовый, как в "текстовых блоках". Язык внутри шаблона должен быть одним.

Автор: _zorn_ 25.5.2016, 22:10
Цитата(ksnk @  25.5.2016,  23:55 Найти цитируемый пост)
Мне больше нравится javascript

Ты серьезно ? Вот этот вот язык который меняется каждый день и где не могут прийти к консенсусу ? И где идиотские классы через прототипы ?
Нет ты правда серьезно ? Или просто с ним не работал основательно ?
Цитата(ksnk @  25.5.2016,  23:55 Найти цитируемый пост)
Ну а в этом случае - такое использование or вообще может быть вредным для здоровья(как и ||), так как синтаксис выражений внутри условий - чистый php в котором or выдает логический результат а не текстовый

Чистый пхп никакой "логический" результат выдать не может (да здравствует динамическое преобразование типов). А что вы имели ввиду я не понял.
Но поясню свою мысль.
Что 
Код

false or die ('OLOLO');

что
Код

false || die ('OLOLO');

сработают одинаково. 
Если использовать логические операторы "просто потому что кто то так сказал" не понимая что происходит, то всегда будут притензии smile
И в вашем любимом яваскрипте все сработало бы точно так же если бы был оператор "or"
Цитата(ksnk @  25.5.2016,  23:55 Найти цитируемый пост)
Язык внутри шаблона должен быть одним.

тут согласен. Но когда один и за верстальщика и за бекендщика.... 
Но на будущее делал  для "незнакомых с твигом" верстальщиков.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)