Два вопроса по недошаблонизатору Blitz или наглядно о том, какие не должны быть шаблонизаторы

Духовность™

Продвинутый новичок
Ну, это жесть. Решения более бесполезного и глупого я в жизни не видел.

Сейчас работаю сейчас этим шаблонизатором - вынуждает общий стиль проекта. Мне нужно сделать банальный вывод чекбоксов на основе массива (имен регионов и их ID). И если если ID региона == 1, то сделать слово напротив чекбокса жирным. Как это сделать в Blitz?

Может, как-то так?
PHP:
{{ BEGIN regions }}
    <input type="checkbox" name="region[{{ $region_id }}]" value="1" />
    	{{IF $region_id == 1}}<b>{{END}}
    		{{ $region_name }}
    	{{IF $region_id == 1}}</b>{{END}}
{{ END }}
Это не работает - шаблонизатор не знает ничего о сравнении. Не умеет. Коллеги подсказали решение:
PHP:
// php-скрипт 

foreach ($regions as $key => $value) {
    $regions[$key]['is_main_region'] = ($value['region_id'] == 1);
}
и ЭТО в PHP-коде! Удивительно отделяем логику приложения от логики представления! Идея MVC опрокинута в парадокс! Для того, что бы тупо в шаблоне написать прекрасно работающую конструкцию:
PHP:
<? foreach ($regions as $region): ?>
    <input type="checkbox" name="region[<?=$region['region_id']?>" value="1" />
        <?php if ($region['region_id'] == 1): ? >
            <b><?=$region['name']?></b>
        <? else: ?>
            <?=$region['name']?>
        <? endif; ?>
<? endforeach; ?>
мы ввели в логику приложения дополнительный код, который к массиву регионов, к каждому её элементу-региону, добавил переменную is_main_region, символизирующую о том, что данный элемент нужно выделить жирным:
PHP:
{{ BEGIN regions }}
    <input id="region_{{ $region_id }}" type="checkbox" name="region[{{ $region_id }}]" value="1"/>
    {{IF $is_main_region}}<b>{{END}}
    	{{ $region_name }}
    {{IF $is_main_region}}</b>{{END}}
{{ END }}
Чудовищно! Просто чудовищно!
 

pilot911

Новичок
Блиц, конечно, обманул мои ожидания.. клюнул на маркетинг
жаль, автор не доделал его, в тч операции сравнения.. сделать-то всего ничего.. и не было бы этого ощущения обмана :)
 

MiksIr

miksir@home:~$
А почему 'is_main_region' - это логика отображения? Это свойство региона, что он главный. Почему ты считаешь, что выбор - какой регион главный - это отображение? Вот выделить болдом главный регион - это отобоажение. А назначить регион главным - это нихрена не отображение.
 

Absinthe

жожо
Кстати а какие предпосылки использования этого шаблонизатора? Мне просто интересно. Навряд ли он быстрее, чем PHP, а позиционируется как самый быстрый при куче недоделок.
 

DiMA

php.spb.ru
Команда форума
О, я смотрю главный тролль на месте и конечно ни слова по существу .-)

> Кстати а какие предпосылки использования этого шаблонизатора?

Те, что сложные шаблонизоторы порождают говногод на шаблонах. А его достаточно и на пхп.

> жаль, автор не доделал его

см фразу выше, не не доделал, а по его же словам и не желал .-)

> Решения более бесполезного и глупого я в жизни не видел.
> Блиц, конечно, обманул мои ожидания.. клюнул на маркетинг

Приведенный пример исправляется пользовательскими функциями или инклюдами. Почитайте на досуге доку не пишите глупости.

А вот настоящая проблема (ваши проблемы выше - логического/политического свойства). Скажу ужасну вещь, не обижайтесь... блитц весьма тормозной. Как раз из-за того, что он эктеншн пхп, а не просто нативный пхп скрипт. Поэтому использовать в хайлоде затруднительно. Тормоза на элементарном шаблоне, что выше, не проявятся.
 

Push_Ok

Новичок
{{ BEGIN regions }}
<input type="checkbox" name="region[{{ $region_id }}]" value="1" class="{{$bold}}"/>{{ $region_name }}
{{ END }}

>>>А вот настоящая проблема (ваши проблемы выше - логического/политического свойства). Скажу ужасну вещь, не обижайтесь... блитц весьма тормозной. Как раз из-за того, что он эктеншн пхп, а не просто нативный пхп скрипт. Поэтому использовать в хайлоде затруднительно. Тормоза на элементарном шаблоне, что выше, не проявятся.

Скажите это графику и проектам которые юзают его с нагрузкой очень большой
http://alexeyrybak.com/blitz/lebowski-bench-small.gif
 

DiMA

php.spb.ru
Команда форума
Очень большая нагрузка по твоему - сколько? Прочитайте внимательнее написанное выше. На простых шаблонах и смешных нагрузках проблемы с тормозом не будет, блитц будет быстр, графику (при таких оговорках) можно верить. При сложных шаблонах, множестве хелперов и хайлоде - все умирает.

пысы Спасибо кепу за график, а никогда его не видел.
 

Push_Ok

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

да и в целом, график вот такой мы видели другие сравнения которые делал тов. Фишер мы тоже видели. вроде как графики удтвеждают что все оке.
а заявление DiMA голословно. т.е есть реально пример когда блитц работает медленние того же смарти?

если сравнение с нативными шаблонами то оно бессмыслено, т.е они однозначно быстрее.
 

Absinthe

жожо
т.е есть реально пример когда блитц работает медленние того же смарти?

если сравнение с нативными шаблонами то оно бессмыслено, т.е они однозначно быстрее.
А смарти3 быстрее нативных то будет(за вычетом времени на парсинг и подключение либы) за счет того, что шаблоны склеиваются.
 

Push_Ok

Новичок
а как смарти разруливает такие моменты как одинаковые переменные в шаблоне после склейки?

ну т.е у мнея было 2 шаблона в них

первый
PHP:
<b>{$pp}</b>
второй
PHP:
<a>{$pp}</a>
а после склейки что?
или он наймспейсит их както?
 

Absinthe

жожо
Push_Ok склейка целевого и родительского шаблонов при наследовании.
 

pilot911

Новичок
я перехожу на Смарти3 - он быстрее Твига в разы, на Хабре был тест, вполне жизнеспособный, там Смарти3 быстрее Твига в 60 раз на выдаче скомпилированного контента - это весьма показательный результат
 

Push_Ok

Новичок
я не силен в смарти, мое знакомство с ним закончилось еще на начальных стадиях, но думаю что там чтото типо


PHP:
{include file="string:$template"}
PHP:
{include file="$template"}
или частичный рендеринг и потом подстановка
PHP:
{$string_of_child_tpl}
не очень ясно как оно собирается работать быстрее чем просто echo $aa;

Что касаеться блитза в целом то он сильно влияет на код phpчасть его, т.к подход с блоками не сразу понятен. но после не продолжительного использования все становится на свои места.
 

pilot911

Новичок
с блоками у Блица классно придумано, но без логики в шаблонах продукт нереально использовать в тиражируемых системах, где ядро не меняется, а меняются лишь шаблоны
 

Absinthe

жожо
я не силен в смарти, мое знакомство с ним закончилось еще на начальных стадиях
Блоки не смарти придумало(даже наоборот - только в третьей версии появились), они в любом нормальном шаблонирзаторе есть.

Шаблон base.html:
PHP:
<title>{% block title %}суперсайт{% endblock %}</title>

{% block content %}
    ололо ололо я увидел НЛО
{% endblock %}
Шаблон 2:
PHP:
{% extends "base.html" %}

{% block content %}

    <h1>Профиль пользователя</h1>

    <a href="{% url profile_edit %}">Редактировать профиль</a>
    <br/>
    Имя пользователя: {{ user.username }}<br/>
    E-mail: {{ user.email }}<br/>

    {% if user.get_profile.avatar %}
        <img src="{{ user.get_profile.avatar.thumb_url }}"/> <br/>
    {% endif %}

{% endblock %}
 
Сверху