 
Пример форума
Приведем пример простейшего форума. Наш форум будет состоять всего из одной страницы. Страница устроена так: слева идет список ссылок на темы, справа - обсуждение выбранной темы, состоящее из последовательности сообщений разных участников форума. Участники форума могут создавать как сообщения, так и новые темы.
Внешнему блоку назначьте шаблон forum_. Двум остальным блокам нужно назначить шаблоны по умолчанию.
Блоку слева будет предложен шаблон forum_topics, а блоку справа — forum_messages:
Внешний шаблон (шаблон страницы)
forum_.tpl | forum_.tdd |
|
<?php
echo "
{$dat['edit']}
<table>
<tr>
<td>
<a href='?login'>Вход</a><br>
<a href='?userParams&selectedUserId=new'>
Регистрация
</a><br>
$dat[1]
</td>
<td>$dat[2]</td>
</tr>
</table>
";
?>
|
<?php
$types = array (
1=>"block template('forum_topics')",
2=>"block template('forum_messages')",
)
?>
|
Шаблон для тем
forum_topics.tpl | forum_topics.tdd |
|
<?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>";
}
?>
|
<?php
$titles[1] = 'Название темы форума';
$types[1] = 'varchar(255)';
$types[2] = 'int'; # ID пользователя
$params['isMultiRec'] = true;
# Поле для идентификатора пользователя.
$params['userIdField'] = 2;
#...должно быть скрыто от редактирования
$params['hiddenFields'] = array(2);
# Запретить участникам изменять названия тем
$params['forbidOldRecordsEditing'] = true;
?>
|
Шаблон для сообщений
forum_messages.tpl | forum_messages.tdd |
|
<?php
foreach ($tab as $dat)
{
# Сообщение
echo "{$dat['edit']}$dat[1]";
# Извлекаем имя участника
$sql = "SELECT * FROM ";
$sql .= $GLOBALS['prefix'];
$sql .= "users WHERE userId=$dat[2]";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
echo "<br>(";
echo $row['personalname'];
echo " ";
echo $row['familyname'];
echo ")<br><br>";
}
?>
|
<?php
# Этот блок
$messagesBlock = 3;
$titles[1] = 'Ваше сообщение';
$types[1] = 'varchar(255)';
$types[2] = 'int'; # ID пользователя
$types[3] = 'int'; # ID темы
$params['isMultiRec'] = true;
# Сохранение идентификатора темы
$defaults[3] =
$_SESSION['pick'][$messagesBlock][3]['eq'];
# Поле для идентификатора пользователя
$params['userIdField'] = 2;
# Поля 2 и 3 скрыть от редактирования
$params['hiddenFields'] = array(2,3);
# К полю 3 обязательно должен быть запрос
# (т.е. для нужно щелкать по теме)
$params['pick']['keyFields'] = array(3);
# Запретить участникам
# редактировать старые записи
$params['forbidOldRecordsEditing'] = true;
?>
|
После регистрации участник форума в обоих блоках увидит кнопки для начала ввода новых записей (как в списке тем, так и в ленте сообщений). После создания записей, авторы будут видеть также кнопки редактирования созданных записей, но только на протяжении текущей сессии.
|