CompZone.Org :: Artykuły :: PHP
Jaki jest Twój wiek?
40 - 59
26 - 39
19 - 25
13 - 18
12 i mniej
60 i więcej
Sonda Wyniki

Add to Google

Ostatnie tematy z forum w PHP

W artykule pokaże jak stworzyć skrypt, którego zadaniem będzie pobranie i wyświetlenie kilku ostatnich tematów, a także wyświetlenie kto napisał w nim ostatni post. Skrypt ten będzie działał wraz z forum PhpBB.

Jak bedzie działał skrypt?

Skrypt będzie pobierał ostatnie tematy z tabeli topics, a potem sprawdzał ostatni post (tabela posts) i jego autora (tabela users). Na końcu zostanie wyświetlony link do tematu wraz z informacją o autorze. Pisząc skrypt, starałem się, aby był on mozliwie jak najbardziej elastyczny. Konfiguracja skryptu sprowadza się do wprowadzenie danych dotyczących bazy, prefisku tabeli (np. phpbb_) oraz ścieżki do forum. nie zapomniałem także o możliwości wykluczenia pewnych fór (np. tych tylko dla administrtorów).

Skrypt w PHP

 <?php
/* KONFIGURACJA */

//Liczba wyświetlanych topiców
$TOPICS_NUMBER=10;

//Konfiguracja bazy
$DB_HOST='localhost';
$DB_USER='username';
$DB_PASSWORD='password';
$DB_NAME='db_name';

//Konfiguracja danych o forum
$FORUM_PATH = 'forum/'; //ścieżka do forum
$TABLE_PREFIX = 'phpbb_'; //prefiks przed nazwą tabeli
$EXCLUDE_FORUMS = array(1,2); //nie wyświetlaj z tych forów
/* SZABLONY WYŚWIETLANIA */

//Początek
$BEGIN = '<table style="width:220px"><tr><th>Nowe posty</th></tr>';
//Zawartość
$CONTENT = '<tr><td>W <b>{$topic_title}</b> napisał <i>{$topic_author}</i></td></tr>';
//Koniec
$END = '</table>';

//Konstrukcja linku - na wypadek wykorzystania mod_rewrite na forum
$TOPIC_TITLE = '<a href="'.$FORUM_PATH. 'viewtopic.php?topic={$topic_id}& forum={$forum_id}">{$topic_title}</a>';

$COLUMNS = array(); // konfiguracja kolumn
$TABLE_TOPICS = $TABLE_PREFIX; // nazwa tabeli z topicami
$TABLE_FORUM = $TABLE_PREFIX; // nazwa tabeli z forami
$TABLE_USERS = $TABLE_PREFIX; // nazwa tabeli z userami
$TABLE_POSTS = $TABLE_PREFIX; // nazwa tabeli z postami

//Dokończenie odpowiednich nazw;
$TABLE_TOPICS .= 'topics';
$TABLE_FORUM .= 'forum';
$TABLE_USERS .= 'users';
$TABLE_POSTS .= 'posts';

/* POBRANIE INFORMACJI */
//w tej zmiennej będziemy przechowywać to co na końcu będziemy chcieli wyświetlić
$output = array();
//Dodajemy początek
$output[] = $BEGIN;

$exclude='';
//Dla każdego forum, które chcemy wykluczyć tworzymy warunek
foreach($EXCLUDE_FORUMS as $forum)$exclude .= "AND forum_id<>$forum ";
//Jeśli wykluczamy jakieś fora, dodajemy na początku dyrektywe WHERE
if($exclude!=''){
$exclude = ' WHERE '.substr($exclude,4);
}

//Tworzymy połączenie z DBMS (Systemem zarządzania bazą danych)
$link = mysql_connect($DB_HOST,$DB_USER,$DB_PASSWORD);
//Wybieramy bazę
mysql_select_db($DB_NAME,$link);

$sql = "SELECT topic_id, forum_id, topic_time, topic_title
FROM
$TABLE_TOPICS $exclude ORDER BY topic_time DESC LIMIT $TOPICS_NUMBER;";

//Pobieramy 10 najnowszych topiców - sortujemy malejąco według czasu (ORDER BY)
// i ograniczamy ilość dyrektywą SQL LIMIT
$topics = mysql_query($sql,$link);

//Przetwarzamy wszystkie tematy
while(($row=mysql_fetch_array($topics))!=NULL){
$sql = "SELECT post_id, poster_id, topic_id, post_time FROM $TABLE_POSTS
WHERE topic_id=
$row[topic_id] ORDER BY post_time DESC LIMIT 1;";

//Pobieramy ingormacje o ostatnim poście w tym topicu
$result = mysql_query($sql,$link);
$posts = mysql_fetch_array($result);

//Pobieramy informacje o urzytwkoniku, który napisał ostatniego posta
$sql = "SELECT user_id, username FROM $TABLE_USERS
WHERE user_id=
$posts[poster_id];";
$result = mysql_query($sql,$link);
$user = mysql_fetch_array($result);

$msg = $CONTENT;

if($posts!=NULL){
//Tutaj następuje zamiana z szablonu do treści
$topic_title = $TOPIC_TITLE;
$topic_title = str_replace('{$topic_title}', $row['topic_title'],$topic_title);
$topic_title = str_replace('{$topic_id}', $row['topic_id'],$topic_title);
$topic_title = str_replace('{$forum_id}', $row['forum_id'],$topic_title);

$msg = str_replace('{$topic_title}',$topic_title,$msg);
}else{
continue;
}
if($user!=NULL){
//tutaj zmieniamy szablon {$topic_author} na rzeczywiste dane
$msg = str_replace('{$topic_author}', $user['username'],$msg);
}else{
$msg = str_replace('{$topic_author}', 'Anonymous',$msg);
}
//dodajemy wynik do wyświetlenia
$output[] = $msg;
}

$output[] = $END;

/* wyświetlenie informacji */
echo implode("n",$output);

?>

W skrypcie zastosowałem technikę szablonów. Dzięki temu modyfikacja wyglądu skryptu czy sposobu wyświetlania jest bardzo prosta. Wszystkie szablony to zmienne.

 <?php
//....
//Początek
$BEGIN = '<table style="width:220px"><tr><th>Nowe posty</th></tr>';
//Zawartość
$CONTENT = '<tr><td>W <b>{$topic_title}</b> napisał <i>{$topic_author}</i></td></tr>';
//Koniec
$END = '</table>';

//Konstrukcja linku - na wypadek wykorzystania mod_rewrite na forum
$TOPIC_TITLE = '<a href="'.$FORUM_PATH .'viewtopic.php?topic={$topic_id}& forum={$forum_id}">{$topic_title}</a>';
//...
?>

Jak łatwo się domyślić, $BEGIN odpowiada za początek wyświetlania. Powinien tam znaleźć się nagłówek oraz np. początek tabeli (czy bloku div).

W $CONTENT przechowywany jest szablon wyświetlania linków. {$topic_title} odpowiada za wyświetlenie linku, który zdefiniowany jest w zmiennej $TOPIC_TITLE. Wszystkie pozostałe szablony powinny być zrozumiałe. Całość wyświetlania kończy $END.

Fora wykluczane z wyświetlania są zapisane w zmiennej $EXCLUDE_FORUMS. W niej deklarowana jest tablica przy pomocy array(), w której jako argumenty podajemy numery id forów, które chcemy wykluczyć.

Zakończenie

Skrypt ten jest prosty w swoim działaniu. Przeniesienie tego skryptu aby działał z innym forum nie pwoinno sprawić kłopotu.

Kodie @ 11-07-2006 22:50
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!