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



Сегодня мы попробуем оценить ситуацию в сфере современного форумостроения, попробуем разобраться не с точки зрения администратора или редактора форума, а с точки зрения разработчика. Представим, что перед нами стоит задача: создать форум, сверстать под него какой-нибудь уникальный дизайн и написать свой плагин, как обычно не делающий ничего нужного.

1. Punbb/fluxbb

Этот движок написан очень давно и в стиле старой школы. То есть, лапша кода вперемешку с хтмл.

($hook = get_hook('po_pre_header_load')) ? eval($hook) : null;

define('FORUM_PAGE', 'post');
require FORUM_ROOT.'header.php';

// START SUBST - <!-- forum_main -->
ob_start();

($hook = get_hook('po_main_output_start')) ? eval($hook) : null;

?>
	<div class="main-head">
		<h2 class="hn"><span><?php echo $tid ? $lang_post['Post reply'] : $lang_post['Post new topic'] ?></span></h2>
	</div>

Вот в таком стиле написан движок. MVC тут нет в помине. Шаблон одновременно является и контроллером, и экшеном. Если сюда вносить изменения, то при следующем обновлении всё заменится на исходную версию и придётся переделывать работу заново. В итоге, если переписывать форум punbb под какой-нибудь оригинальный дизайн, придётся форкать проект, либо ограничиться только изменением файла стилей.

Каждый устанавливаемый плагин вносит какие-либо изменения прямо в код движка. Что тоже не добавляет радости разработчикам.

Стоит отметить, что создатели фактически прекратили поддержку punbb. Разработка последнего обновления заняла 3 года. С fluxbb ситуация немного лучше: в среднем обновления выходят раз в полгода, но, всё же разработчики сконцентрировались на разработке нового продукта.

2. SMF

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

function template_main()
{
	global $context, $settings, $scripturl, $txt, $modSettings;

	echo '
	<div id="admincenter">';

	// Theme install info.
	echo '
		<div class="cat_bar">
		<h3 class="catbg">
			<a href="', $scripturl, '?action=helpadmin;help=themes" onclick="return reqOverlayDiv(this.href);" class="help"><span class="generic_icons help" title="', $txt['help'],'"></span></a>
			', $txt['themeadmin_title'], '
		</h3>
		</div>
		<div class="information">
			', $txt['themeadmin_explain'], '
		</div>';

	echo '<br>

При желании, этот шаблон можно переделать, и он не поломается при обновлении самой CMS. Но времени потратится много.

Разработка версии 2.1 ведётся очень медленно, а в багтрекере регулярно регистрируются новые ошибки. При этом, если верить вики, над проектом работают более 50 человек...

3. PHPBB

Это самый популярный форумный движок. Имеет просто огромное комьюнити. Множество дополнений и стилей. Не раз форкнутый. Давайте посмотрим как устроен его шаблон. В index.php нет лапши с хтмл, это уже вселяет надежду. Открываем шаблон и видим:

<!-- INCLUDE overall_header.html -->
<!-- EVENT viewforum_forum_title_before -->
<h2 class="forum-title"><!-- EVENT viewforum_forum_name_prepend --><a href="{U_VIEW_FORUM}">{FORUM_NAME}</a><!-- EVENT viewforum_forum_name_append --></h2>
<!-- EVENT viewforum_forum_title_after -->
<!-- IF FORUM_DESC or MODERATORS or U_MCP -->
<div>
	<!-- NOTE: remove the style="display: none" when you want to have the forum description on the forum body -->
	<!-- IF FORUM_DESC --><div style="display: none !important;">{FORUM_DESC}<br /></div><!-- ENDIF -->
	<!-- IF MODERATORS --><p><strong><!-- IF S_SINGLE_MODERATOR -->{L_MODERATOR}<!-- ELSE -->{L_MODERATORS}<!-- ENDIF -->{L_COLON}</strong> {MODERATORS}</p><!-- ENDIF -->
</div>
<!-- ENDIF -->

Тут используется шаблонизатор twig. Это огромный плюс в карму разработчикам. Шаблон полностью отделён от основного ядра. Можно смело собирать свой уникальный дизайн, и не бояться, что при следующем обновлении что-либо отвалится.

Разработчики до сих пор ведут активную работу над проектом, большие обновления выходят регулярно, в среднем раз в 2 месяца. Баги также находятся регулярно. Исправляются в среднем в течении 2-3 недель. Не фантастика, но всё же.

Надо сказать, что phpbb нельзя забросить на несколько месяцев, как например fluxbb. Следить за ним нужно внимательно и обновлять сразу после выхода апдейта. Это расплата за популярность. Тысячи ботов ищут по всей сети уязвимые версии phpbb.

4. MYBB

Пришло время рассмотреть форумы, не популярные в российском сегменте интернета.

Немного покопавшись в исходниках MYBB, выясняем. Шаблоны хранятся в БД в виде php файлов и с помощью eval'ов исполняются для генерации страницы. Что же, однозначный плюс за отделение шаблонов от логики, но... Править шаблон, лежащий в БД - это верх мазохизма. По мне так лучше работать со спагетти-кодом из punbb. С ним, как минимум, можно напрямую работать из любимого текстового редактора, а не бесконечно копипастить из редактора в БД и обратно.

Сайт разработчиков - живой, апдейты выходят регулярно, ведётся разработка следующей версии. Но российского комьюнити нет. Если открыть страницу поддержки, то взору предстанет не весёлая картина. По 3-4 темы "Defaced forum" ежедневно. Не удивительно, ведь если хакер может сделать sql инъекцию, то он может делать с этим форумом всё, что вздумается. А шаблоны, лежащие в БД, уж точно не облегчают поиски места размещения вредоносного кода.

#5. PHORUM

PHORUM использует свой собственный шаблонизатор. Шаблон полностью отделён от логики и пишется в виде:

<div class="PhorumNavBlock">
  <span class="PhorumNavHeading">{LANG->Goto}:</span> {IF URL->INDEX}<a class="PhorumNavLink" href="{URL->INDEX}">{LANG->ForumList}</a>•{/IF}<a class="PhorumNavLink" href="{URL->SEARCH}">{LANG->Search}</a>•{INCLUDE "loginout_menu"}
</div>
<table id="phorum-index" cellspacing="0">
  {LOOP FORUMS}
    {IF FORUMS->level 0}
      <tr class="folder">
        {IF FORUMS->forum_id FORUMS->vroot}
          <th class="forum-name">{LANG->Forums}</th>
        {ELSE}
          <th class="forum-name"><a href="{FORUMS->URL->LIST}">{FORUMS->name}</a></th>
        {/IF}
        <th class="forum-threads">{LANG->Threads}</th>
        <th class="forum-posts">{LANG->Posts}</th>
        <th class="forum-last-post">{LANG->LastPost}</th>
      </tr>
      ...
  {/LOOP FORUMS}
</table>

Синтаксис похож на SMARTY и позволяет делать достаточно наглядные шаблоны. Код легко читается и также легко правится. Верстать для PHORUM - одно удовольствие.

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

6. FUDFORUM

Превед спагетти-код.

if (_uid === '_uid') {
		exit('Sorry, you can not access this page.');
.....
	if ($cat_id) {
		$cid = $cat_id;
		while (($cid = $cidxc[$cid][4]) > 0) {
			$cat_path = ' » <a href="index.php?t=i&cat='.$cid.'&'._rsid.'">'.$cidxc[$cid][1].'</a>'. $cat_path;
		}
		$cat_path = '<br />
<a href="index.php?t=i&'._rsid.'">Начало</a>
'.$cat_path.' » <b>'.$cidxc[$cat_id][1].'</b>';
	}
.....

Всё, что было сказано о punbb/fluxbb, применимо и к fudforum. Любое изменение шаблона- это по сути, форк проекта. Поэтому остаётся менять только стили. Правда, и ошибки находятся так же редко.

7. BBPRESS

Вообще-то это не отдельный форум, а дополнение к wordpress. Но т.к. wordpress пользуется огромной популярностью то и bbpress устанавливается достаточно часто.

Приимущество bbpress перед остальными форумами - это нативная интеграция в cms и мощная система шаблонов. Верстать под bbpress - это верстать под вордпресс. Шаблон отделён от логики и имеет понятную структуру. На мой взгляд, этот плагин имеет не заслужено низкую популярность в России.

Недостатки такие же как и у вордпреса: требует немедленного обновления, тонкой настройки безопасности и постоянного внимания. Заключение

  1. Вам нужно быстро создать форум со стандартным дизайном, быстрый и надёжный. И вы не можете тратить на его поддержку много времени. В этом случае fluxbb/punbb - идеальный выбор. Единожды настроенные они будут работать годами.

  2. Вам нужен большой форум с кучей готовых плагинов, с возможностью создать свой шаблон, свои стили и при этом у Вас есть много времени на его поддержку- выбирайте phpbb.

  3. Вам нужно всё то же самое, что и в п.2, но нет времени на постоянную поддержку? Используйте PHORUM. Конечно, придётся потратить время на его создание, но оно окупится более надёжной работой форума.

  4. Если Вам нужно интегрировать форум на сайт под управлением wordpress - используйте bbpress.

На дворе 2015 год, и, как ни крути, код, написаный 20 лет назад, не отвечает современным требованиям. И если punbb/fluxbb ещё можно рассматривать за их надёжность и скорость, то такие форумы, как FUDFORUM, MYBB, SMF, являются однозначными аутсайдерами и использовать их в новых проектах нельзя.


Сообщество: AWS

Комментариев(0)


Всего: 0 комментариев на 0 страницах

Ваш комментарий будет анонимным. Чтобы оставить не анонимный комментарий, пожалуйста, зарегистрируйтесь



Сообщества