CONTENT MANAGEMENT SYSTEM
Blox Logo
Blox CMS — блочный метод сайтостроения
.
 
Blox Help

←→

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

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

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

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

forum_.tplforum_.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.tplforum_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.tplforum_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;

?>

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