Пример форума

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

Корневому блоку назначьте шаблон forum_. Двум остальным блокам нужно назначить шаблоны по умолчанию. Блоку слева будет предложен шаблон forum_topics, а блоку справа — forum_messages:

Корневой шаблон (шаблон страницы)

forum_.tpl
<?php
echo "
{$dat['edit']}
<table>
<tr>
<td>
<a href='?login'>Вход</a><br>
<a href='?user-info&selected-user-id=new'>
    Регистрация
</a><br>
$dat[1]
</td>
    <td>$dat[2]</td>
</tr>
</table>
";
?>
forum_.tdd
<?php
$types = [
    1=>"block template('forum_topics')",
    2=>"block template('forum_messages')",
]
?>

Шаблон для тем

forum_topics.tpl
<?php

# Блок для сообщений
$messagesBlock = 3;

if (empty($tab))
    return;

foreach ($tab as $dat)
{
    echo $dat['edit'];
    echo "<a href='";
    echo "?page=$page";
    echo "&block=$messagesBlock";
    echo "&p[3]={$dat['rec']}'>";
    # Выше приведана короткая форма записи
    # pick-запроса. Стандартная форма - ниже:
    # echo "&pick[3][eq]={$dat['rec']}'>";
        echo "$dat[1]";
    echo "</a>";
    echo "<br>";
}

?>
forum_topics.tdd
<?php

$titles[1] = 'Название темы форума';

$types[1] = 'varchar(255)';
$types[2] = 'int'; # ID пользователя

$params['multi-record'] = true;

# Поле для идентификатора пользователя. 
$params['user-id-field'] = 2;
#...должно быть скрыто от редактирования
$fields['hidden'] = [2];
# Запретить участникам изменять названия тем
$params['editor-of-records']['forbid-old-recs-editing'] = true;


?>

Шаблон для сообщений

forum_messages.tpl
<?php

foreach ($tab as $dat)
{
    # Сообщение 
    echo "{$dat['edit']}$dat[1]";

    # Извлекаем имя участника
    $sql  = "SELECT * FROM ";
    $sql .= Blox::info('db','prefix');
    $sql .= "users WHERE `user-id`=$dat[2]";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
    echo "<br>(";
    echo $row['personalname'];
    echo " ";
    echo $row['familyname'];
    echo ")<br><br>";
}

?>
forum_messages.tdd
<?php

# Этот блок
$messagesBlock = 3;

$titles[1] = 'Ваше сообщение';

$types[1] = 'varchar(255)';
$types[2] = 'int'; # ID пользователя
$types[3] = 'int'; # ID темы


$params['multi-record'] = true;

#  Сохранение идентификатора темы
$defaults[3] =
$_SESSION['pick'][$messagesBlock][3]['eq'];

# Поле для идентификатора пользователя
$params['user-id-field'] = 2;

# Поля 2 и 3 скрыть от редактирования
$fields['hidden'] = [2,3];

# К  полю 3 обязательно должен быть запрос
# (т.е. для нужно щелкать по теме)
$params['pick']['key-fields'] = [3];

?>

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