Адаптация phpBB 3 под Smarty 3

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Нужен ли Smarty 3 в phpBB 3?

Да, очень не хватает
1
11%
Нет, не нужен
4
44%
Мне всё равно
4
44%
 
Всего голосов: 9

Аватара пользователя
VEG
phpBB 2.0.7a
Сообщения: 609
Стаж: 20 лет 5 месяцев
Откуда: Минск
Благодарил (а): 20 раз
Поблагодарили: 141 раз

Адаптация phpBB 3 под Smarty 3

Сообщение VEG »

Стандартный шаблонизатор phpBB 3 достаточно примитивен, на нём практически нереально изменить что-то серьёзное, не заглядывая в php код. Простой пример из мода Quick Reply от rxu. Для того, чтобы подставить имя пользователя в JavaScript, пришлось в PHP код добавлять:

Код: Выделить всё

// This value will be used as a parameter for JS insert_text() function, so we use addslashes to handle "special" usernames properly ;)
'POSTER_QUOTE' => addslashes(get_username_string('username', $poster_id, $row['username'], $row['user_colour'], $row['post_username'])),
На мой взгляд, использование шаблонизатора наподобие Smarty 3 сильно развязало бы руки разработчикам. В примере можно было бы обойтись просто конструкцией вида {$var|addslashes}.

Уже была попытка реализовать поддержку Smarty 2 в phpBB 3, но автор подошёл к адаптации слишком «прямо», Smarty там используется в стиле стандартного шаблонизатора phpBB 3, то есть никаких особых возможностей Smarty практически не используется.

Я же предлагаю заняться полной адаптацией phpBB 3 с задействованием по максимуму возможностей Smarty 3:
  • Наследование шаблонов (никаких глупых include в начале и конце документа)
  • Компиляция каждой языковой версии шаблона отдельно (языковые файлы подгружаются только один раз в момент компиляции)
  • Минимум обработки данных перед выводом на стороне PHP, передавать данные в виде кортежей в шаблоны Smarty и там обрабатывать (минус большое количество строк ненужного кода, возможность гибкого изменения всех шаблонов)
  • И др.
Выскажите ваше мнение, а так же интересует, может быть кому-нибудь интересно заняться подобным проектом вместе. Всё-таки работа объёмная, одному тяжело заниматься подобным.
Проект будет находиться под управлением репозитория Mercurial на Google Code (если опыта работы с этой системой контроля версий нет, я всё подробно объясню). Поскольку это по сути будет совершенно другой phpbb 3, мало совместимый с оригиналом по части вывода, при желании ограничиваться только заменой шаблонизатора мы не станем, а поменяем всё, что нас не устраивает в стандартной поставке :)
phpBBex 1.7.1 — phpBB 3 с уникальными функциями, не существующими в модах
phpBB [ media ] — универсальный bbcode для вставки аудио и видео (поддержка более 30 сервисов, без правок кода)
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Адаптация phpBB 3 под Smarty 3

Сообщение MIT »

По-моему бесперспективное занятие. Да и надобность весьма сомнительна... К тому же придётся всё это дело переделывать (и/или дорабатывать) под новые версии форума. Плюс придётся переписывать практически все моды.
Аватара пользователя
VEG
phpBB 2.0.7a
Сообщения: 609
Стаж: 20 лет 5 месяцев
Откуда: Минск
Благодарил (а): 20 раз
Поблагодарили: 141 раз

Re: Адаптация phpBB 3 под Smarty 3

Сообщение VEG »

По сути у нас получится форк. В новых версиях форума обычно каких-то значимых изменений не производится, так что система контроля версий будет большую часть работы, а где она не справится — можно будет помочь ей вручную.
Здесь главный профит — для разработчиков, у кого есть свои phpbb форумы, сделать написание различных модификаций приятнее, чем есть оно сейчас. Ну да, совместимость с модами потеряется, но с небольшими знаниями в php можно будет любой мод быстро адаптировать. Плюс изначально никто не запрещает включить самые популярные и нужные возможности.
phpBBex 1.7.1 — phpBB 3 с уникальными функциями, не существующими в модах
phpBB [ media ] — универсальный bbcode для вставки аудио и видео (поддержка более 30 сервисов, без правок кода)
Аватара пользователя
Mr. Anderson
phpBB Guru
phpBB Guru
Сообщения: 7522
Стаж: 22 года 6 месяцев
Откуда: СССР
Благодарил (а): 6 раз
Поблагодарили: 154 раза

Re: Адаптация phpBB 3 под Smarty 3

Сообщение Mr. Anderson »

VEG
Соглашусь с MIT - не вижу надобности. Даже ваш пример с модом rxu - притянут за уши.
Аватара пользователя
VEG
phpBB 2.0.7a
Сообщения: 609
Стаж: 20 лет 5 месяцев
Откуда: Минск
Благодарил (а): 20 раз
Поблагодарили: 141 раз

Re: Адаптация phpBB 3 под Smarty 3

Сообщение VEG »

Мой пример — это первое что пришло в голову.
С текущим положением дел в phpBB 3 приходится всякий раз лезть в PHP код, когда хочешь сделать в шаблоне что-то не совсем стандартное. Недавно я столкнулся с такой проблемой. Имеем переменную postrow.POSTER_WARNINGS с числом предупреждений. Задача: вывести это число в виде картинок карточек. Я не придумал как это сделать стандартным шаблонизатором, кроме как правкой PHP или вставкой кусочка на JavaScript.
Из-за стандартного шаблонизатора даже сами разработчики phpBB 3 иногда помещают в шаблонную переменную уже готовый HTML код, который сформирован прямо в PHP коде, что само по себе попахивает. Если вы знакомы с кодом phpBB, то примеры для вас мне искать не придётся :)
Всё ещё надеюсь увидеть здесь людей, кто достаточно тесно работал со Smarty 3, и понимает какие плюшки это привнесёт.
phpBBex 1.7.1 — phpBB 3 с уникальными функциями, не существующими в модах
phpBB [ media ] — универсальный bbcode для вставки аудио и видео (поддержка более 30 сервисов, без правок кода)
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 21 год 1 месяц
Откуда: Новосибирск
Поблагодарили: 37 раз

Re: Адаптация phpBB 3 под Smarty 3

Сообщение Alek$ »

VEG, есть обоснованное мнение, что в шаблонах должно быть как можно меньше логики. Тогда дизайнерам будет проще из делать, да и дебажить это все проще.

Теперь предлагаю взглянуть с другой стороны. На мой взгляд, главная мощь phpBB заключена в массе модов, созданных сообществом, с помощью которых можно решить практически любую проблему. Замена шаблонизатора на Smatry порушит совместимость со всеми этими модами. Адаптировать мод под новый шаблонизатор смогут не многие - для этого надо обладать основательными познаниями, как в PHP, так и в верстке. Даже если вы и ваши единомышленники (буде они найдутся) взвалите на себя труд по портированию десятка-другого популярных модов и поддержания их в актуальном состоянии, это не удовлетворит большинство пользователей. Я уже не буду говорить о том, что поддержка этих пользователей тоже ляжет на ваши плечи.

Поэтому я бы предложил вам вместо попыток интегрировать Smarty, приложить усилия к развитию родного шаблонизатора, без ущерба обратной совместимости.
Вы можете присоединиться к разработке phpBB 3.1, в котором запланированы значительные усовершенствования шаблонизатора. На мой взгляд, это наилучший путь, поскольку это принесет значительную пользу всему phpBB-сообществу, а вас избавит от необходимости поддержания официально неподдерживаемых модификаций phpBB.
Вы так же можете оформить это в виде отдельного мода. Для phpBB была такая попытка (и, что важно, успешная!) — мод eXtreme Styles, который вносил массу значительных улучшений в тогдашний еще более примитивный шаблонизатор. Но при этом он был обратно-совместим и поэтому весьма популярен.

Как поступить — решать вам.
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
Аватара пользователя
VEG
phpBB 2.0.7a
Сообщения: 609
Стаж: 20 лет 5 месяцев
Откуда: Минск
Благодарил (а): 20 раз
Поблагодарили: 141 раз

Re: Адаптация phpBB 3 под Smarty 3

Сообщение VEG »

Вы правы, рекомендуется разделять контроллер, бизнес логику и представление. В phpbb первые два компонента совмещены, а шаблоны получились настолько «тонкими», что простая передача необходимых данных в шаблон занимает по 200-300 строк однообразного кода, а обратной связи шаблона с кодом вообще нет. То есть если мы решим «вот в этом шаблоне вывести список последних тем», то нам придётся лезть в соответствующий php файл и копипастить туда нужный код. Хотя согласитесь, намного аккуратнее было бы, если бы запросить список последних тем можно было бы из шаблона, чтобы отобразить их в каком-нибудь маленьком блочке:

Код: Выделить всё

{activetopics assign=topics limit=10}
    {foreach $topics as $topic}
        {$topic.title}<br>
    {/foreach}
{/activetopics}
или

Код: Выделить всё

{foreach get_activetopics(10) as $topic}
    {$topic.title}<br>
{/foreach}
или

Код: Выделить всё

{$topics = get_activetopics(['limit' => 10])}
{foreach $topics as $topic}
    {$topic.title}<br>
{/foreach}
Сейчас же во многих подобных случаях прослеживается копипаста одного и того же кода. Как пример: код вывода глобальных объявлений, статистика по форуму.

Ещё одна связанная проблема. Например, мне не нужен блок статистики по форуму на главной. Я его удалил из шаблона, но в PHP части ресурсы на обработку этого блока всё равно тратятся.
phpBBex 1.7.1 — phpBB 3 с уникальными функциями, не существующими в модах
phpBB [ media ] — универсальный bbcode для вставки аудио и видео (поддержка более 30 сервисов, без правок кода)
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 21 год 1 месяц
Откуда: Новосибирск
Поблагодарили: 37 раз

Re: Адаптация phpBB 3 под Smarty 3

Сообщение Alek$ »

VEG, в phpBB3 есть масса архитектурных недостатков, часть из которых унаследована от phpBB2, часть выявилась только потом, с этом глупо спорить. Приведенный вами пример надо решать не с помощью "активных" шаблонов, а с помощью виджетов. В шаблоне должно быть указано только место вывода того или иного виджета и не более того. При этом логика виджета пишется отдельно, вид - отдельно, а в шаблоне не надо копипастить код, который реализует логику виджета, а достаточно лишь указать, какой здесь должен быть виджет. Одной из известных мне удачных реализаций виджетов являются таковые в Yii Framework, можете посмотреть на досуге.

Кроме того, вы пропустили мой основной посыл — вместо того, чтобы, руша устоявшуюся экосистему, прикручивать инструмент близкий лично вам, но чуждый всему остальному phpBB-сообществу, стоит подумать о привнесении достоинств Smarty в существующий шаблонизатор. Это действительно принесет больше пользы всем.
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.

Вернуться в «Для авторов (phpBB 3.0.x)»