1

Тема: Первые итоги

Я провел работу по рефакторингу punbb 1.4.4, в соответствии с озвученной мною точкой зрения на дальнейшее развитие punbb, в результате  у меня получился новый вариант punbb, построенный на ооп, использующий шаблонизатор plate и контейнер pimple. Код доступен на гитхабе на моей странице ( (Please log in or register to see this URL) ) я намеренно не делал пока ветку в официальном репозитории. Код изменен частично, он будет работать только в пользовательской части, с дефолтовым стилем и языком,  на url-схеме file fancy. Инсталлера нет, поэтому для работы надо копию бд готового форума и файл конфига с настройками на эту бд, возможно поправить кэш конфига на нужные настройки в части языка, версии, стиля и схемы после первого запуска, который будет 100% неудачный.

Что хочу отметить по выбранным решениям.
Шаблонизатор взял некомпилируемый, выбор очень невелик, решающим фактором оказалось способность шаблонизатора работать с локальной областью видимости переменных, чтобы в шаблоне доступ к переменным был напрямую, без $this, это позволило максимально сократить возню с шаблонами.
Роутер изначально взял aura.router, т.к.  он позволил взять существующие маршруты с минимальными изменениями. Сохранение маршрутов считаю важным, в отличии от системы хуков и совместимости с расширениями, т.к. отсутствие совместимости с маршрутами поставит крест на обновлении. Несмотря на то что aura.router хорош,я всеже адаптировал штатный rewrite.php и сравнил производителность. Aura.router проиграл с оглушительным треском, оказавшись в  более чем в 20 раз медленнее. Поэтому роутер свой.
Контейнер Pimple и хорош и плох одновременно. Это один из лидеров тестов производительности,  я не вижу потребности в хитроумной di, тем более что нужен скорее контейнер сервис локатор, чем di контейнер, поэтому форуму вполне хватит конфигурирования зависимостей. Вобщем пока контейнер такой какой есть.

После этого я задумался над вопросом расширяемости шаблонов. Есть фактически 2 апробированных  варианта - хуки как у нас и компилятор как у phpbb. Отсюда вытекает загаженость шаблонов хуками или плейсхолдерами. Ужасно.
Мне попался шаблонизатор transphporm  (Please log in or register to see this URL) с иной концепцией - шаблон чистый html без плейсхолдеров и иных управляющих конструкций. Управлением отображения занимается template style sheet, очень похожий синтаксически и идеологически на css. Я потратил немало времени на то, чтобы ввести использование этого шаблонизатора, сделал ветку, которая работает с настройками основной ветки, но главная страница форума отображается  при помощи transphporm.  Результат меня в принципе удовлетворяет,  генерация страницы даже быстрее, хотя возможно дело в кэше,  а не  в супер-пупер алгоритмах. Тем не менее в результате шаблоны index и main стали чистыми, там нет ада. Файлы стилей шаблонов, да, это уже трудночитаемые документы, хоть они и небольших размеров. КРоме того  решен вопрос расширяемости шаблонов - расширение может добавить  перед рендерингом к основному стилю свой стиль, который внедрит в DOM свой шаблон. Это самый гениальный момент в этом шаблонизаторе.
Но меня напрягает что он имеет  крайне ограниченные возможности  стилей. Например conditional логика примитивна до простых условий "равно" "не равно". Логика циклов сбивает с толку, всетаки css и loop это разные вещи. Ну  и в процессе внедрения можно долго натыкаться на новые неожиданные препятствия. Такчто тут надо реально крепко подумать, может быть надо плюнуть и оставить анахронизмы с хуками или компиляторами и загадить шаблоны управляющей логикой. Или лучше взять идею transphporrm и разработать шаблонизатор на основе DOM  (благо основа в виде transphporm уже есть), но способный работать с чистым php/.  Или не париться и попытать счастья с transphporm. Авось прокатит smile

После таких вводных данных, я ожидаю что аксакалы и эксперты клонируют код, пощупают его и подвергнут все результаты и мои идеи и предположения конструктивно критике, но чур сильно не бить, пианист играет как умеет.
Еще напоминаю, что я сделал телеграм группу,   там возможно живое общение - (Please log in or register to see this URL) 

Спасибо за внимание.

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

2

Re: Первые итоги

шаблон чистый html без плейсхолдеров и иных управляющих конструкций

такие же мысли в последнее время посещали.

в большинстве случаев достаточен вот такой простой состав

все что в {Товар.NAME} - переменные
набор элементов соддержащим  определенный класс - считается повторяющимся

например template-block-repeat-product -> template-block-repeat (повторяем блок) + product (т.е. переменная в передаваемых  шаблону параметров)

    <tr class="testclass1 template-block-repeat-product testclass2">
            <td>{Товар.PRODUCT_ROWNUM}</td>
        <td>{Товар.NAME}</td>
        <td>{Товар.PRICE}</td>
        <td>{Товар.QUANTITY}</td>
        <td>{Товар.PRICE_SUM}</td>
        </tr>

повторится столько раз сколько есть данных (элементов) в сущности (массиве) "product"

можно на js обрабатывать
можно препроцессор реализовать который скомпилирует в php код (развернет в циклы подставит вывод переменных и т.п.)

Добавлено спустя 2 минуты 56 секунд:

ну а всякие виджеты конечно при таком подходе придется выносить в файлы (partial)

типа так

<aside class="some-container1">
{ВиджетПоследниеСообщения}
<aside>

<aside class="some-container2">
{ВиджетЛучшиеАвторы}
<aside>

Поделиться

3

Re: Первые итоги

hcdev, transphporm все это решает, у него  управляющая логика вынесена в template style sheet.
Но сам template style sheet сильно связывает руки, несмотря на возможности его расширения новыми функциями. 
В твоем примере загрязнен управляющими инструкциями атрибут class и шаблонизатор должен парсит документ, искать это вот все.  На мой взгляд нужно изменить tss, это должен быть php в котором все управление происходит, например если у нас там какйто хтмл-блок циклически повторяется, то обработка задается както так:

$template->loop('#element_id', $data);

а не так как щас в transphporm. Или например даже так:

$dom = $template->getDom('#element_id');

foreach ($data as $cur_data) {
    $dom->title = translate($cur_data['title'];
    $template->append($dom);
}

Т.е. основная мысль в том, чтобы получить возможность делать что хочешь используя весь арсенал php, а не сношаться с недоделаным tss который разве что в академических целях интересен.

Добавлено спустя 24 минуты 35 секунд:

Вот кстати шаблонизатор, реализующий эту логику: (Please log in or register to see this URL)

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться