Интеграция CMS с форумом phpBQ
FROM $table_topics t, $table__forums f, $table_posts p, $table_users u
WHERE t.topic_id = p.topic_id AND
f.forum_id = t.forum_id AND
t.topic_status 2 AND
p.post_id = t.topic_last_post_id AND
p.poster_id = u.user_id
ORDER BY p.post_id PESC LIMIT $N»;
$result = mysql_query($query) or die(«Ошибка в SQL-запросе»);
// Выводим последние темы форума
echo «
// $row[topic_id] — ID темы
// $row[forum_id] — ID форума
// $row[,,topic__title"] — название темы
// $row[username] — имя пользователя
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo «
href=\»$url/viewtopic.php?topic=$row[topic_id] &foruitp=$row[forum_id] \»>» .
«;
}
echo «
$row[username] |
«;
// Освобождаем память и закрываем соединение
mysql_free_result($result);
mysql_close($link);
?>
В данном сценарии нет ничего сложного, кроме SQL-запроса (листинг 19.4).
Глава 19. Базовая интеграция
233
$query = «SELECT t.topic_id, t.topic_title, t.topic_last_post_id,
t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username
FROM $table_topics t, $table_forunis f, $table_posts p, $table_users u
WHERE t.topic_id = p.topic_id AND
f. f orum_id = t. f orum_id AND
t.topic_status 2 AND
p.post_id = t.topic_last_post_id AND
p.poster_id = u.user_id
ORDER BY p.post_id DESC LIMIT $N»;
Рис. 19.2. Вывод последних постов форума
Как видите, запрос выбирает информацию из таблиц тем, форумов,
сообщений и пользователей. Для каждой таблицы создается псевдоним (для тем —
t, для форумов — f, для сообщений — р, для пользователей — и). Делается
это для того, чтобы хоть немного уменьшить запрос. (Представьте, что
вместо t, f, ? и и мы бы писали полные имена таблиц?) Сортировка выполняется
234 Часть V. Интеграция CMS с форумом phpBB
по ID сообщения в порядке убывания. Оператор limit ограничивает число
выводимых записей.
Результат работы сценария представлен на рис. 19.2.
Подключить сценарий last-posts.php к нашей CMS очень просто:
$раде = $раде . join(··, file («http: //$SERVER_NAME/
last-posts.php»)) ;
19.4. Вывод онлайн-посетителей
Наверняка на многих сайтах вы видели, что на главной странице выводится
список зарегистрированных пользователей, которые в данный момент
находятся в онлайне. Сейчас мы тоже попытаемся написать сценарий, выводящий
список пользователей, которые в данный момент находятся на сайте.
Вообще-то в составе phpBB2 есть такой сценарий, он называется
viewonline.php и размещен в каталоге phpBB2. Но работать с ним, мягко
говоря, не совсем удобно (рис. 19.3).
Рис. 19.3. Сценарий viewonline.php
Нам нужен сценарий, выводящий информацию в более компактном виде,
например в одну строку. Поэтому мы напишем свой вариант. Чтобы не изобре-
Глава 19. Базовая интеграция
235
тать велосипед заново, мы возьмем за основу сценарий viewonline.php и
удалим из него все лишнее. В целях экономии своего и вашего времени сразу
привожу код компактного сценария (листинг 19.5).
define(·IN_PHPBB·, true);
include($phpbb_root_path . ‘extension.inc’);
include($phpbb_root_path . ‘common. ‘ .$phpEx);
// URL форума без последнего слэша /
$url = «http://your_site/phpBB2″;
$userdata = session__pagestart($user_ip, PAGE_VIEWONLINE);
init_userprefs ($userdata);
$sql = «SELECT u.user_id, u.username, u.user_allow_viewonline,
u.user_level, s.session_logged_in, s.session_time, s.session_page,
s. session_ip
FROM «.USERSJTABLE.» u, » .SESSIONSJTABLE. » s
WHERE u.user_id = s.session_user_id
AND s.session_time >= «. ( time() — 300 ) . »
ORDER BY u.username ASC, s.session_ip ASC»;
if ( !($result = $db->sql_query($sql)) )
{
die(‘Ошибка’);
}
while ( $row = $db->sql_fetchrow($result) )
{
lf ( $row['sessionalogged__in'] )
{
Susername = $row[·username¦];
236 Часть V. Интеграция CMS с форумом phpBB
$id=$row['user_id'];
echo «$username 
·· ·
}
}
?>
Наш сценарий выводит не только имена пользователей, но и ссылки,
позволяющие просмотреть профиль пользователя.
5th Фев 2011
|
Теги:
|