Webboard

Pełna wersja: Najnowsze tematy i posty na stronie
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Napisałem klasę wyświetlającą ostatnie X postów lub tematów. Skrypt będzie działał niezależnie od miejsca, w którym działa (musi jedynie znajdować się na tym samym serwerze co instalacja MyBB). Niezbędny jest dostęp do pliku "inc/config.php". Klasą najwygodniej jest zapisać do pliku np. "MyBBLatest.class.php" i dołączać jego treść w miejscu gdzie będzie on potrzebny. Klasa nie wyświetli nic w przypadku jakiegokolwiek błędu, wiec nie trzeba się obawiać o nieoczekiwane wyświetlenie błędy dla użytkownika. Klasę udostępniam na licencji GNU GPL, więc nie musisz się martwić o kwestie prawne podczas jej użytkowania. Miło byłoby jednak, gdybyś dotował Polski Support MyBB w ramach podziękowania. :) Poniżej krótka dokumentacja i przykłady użycia klasy.

Dokumentacja

__constructor(string $mybb, string $url)
Jest to konstruktor który wywołuje się podczas inicjalizacji klasy.

Pierwszy parametr zawiera względną ścieżkę do głównego katalogu z instalacją MyBB. Jeżeli nasze forum znajduje się np. w podkatalogu "forum" to wystarczy wpisać tu po prostu "forum". Jeżeli strona, na której chcemy użyć klasy znajduje się w tym samym katalogu co forum, nie musimy wpisywać nic. Należy pamiętać, o końcowym slashu!
Domyślnie: NULL

Drugi parametr zawiera adres URL forum (np. http://www.adresstrony.com/forum/). Jest on parametrem niezbędnym. Należy pamiętać, o końcowym slashu!

threads(integer $many, boolean $lastpost, integer $fid)
Wyświetla nieposortowaną listę wątków.

Pierwszy parametr mówi ile wątków ma być wyświetlonych.
Domyślnie: 10

Drugi parametr decyduje o tym, czy link do wątku ma kierować do jego ostatniego postu czy do pierwszego.
Domyślnie: false

Trzeci parametr mówi z którego działu forum wątki mają być pobrane. Musi to być numer ID działu. Jeżeli nie jest podany, pobiera wątki z całego forum.
Domyślnie: false

posts(integer $many, integer $fid)

Pierwszy parametr mówi ile wątków ma być wyświetlonych.
Domyślnie: 10

Drugi parametr mówi z którego działu forum wątki mają być pobrane. Musi to być numer ID działu. Jeżeli nie jest podany, pobiera wątki z całego forum.
Domyślnie: false

Przykłady użycia
Zakładamy, że zapisaliśmy klasę w pliku "MyBBLatest.class.php" w tym samym folderze, w którym znajduje się plik, w którym chcemy wyświetlić posty lub wątki. Zatem w owym pliku dołączamy plik klasy:

Kod PHP:
require_once('MyBBLatest.class.php'); 

Teraz musimy zainicjować klasę:

Kod PHP:
$mybb = new MyBBLatest('forum''http://adres.pl/forum'); 

Tym samym jesteśmy już gotowi, aby wyświetlać posty i wątki. Najprościej będzie utworzyć listę 10 najnowszych wątków/postów z całego forum. Dokonamy tego za pomocą sekwencji:

Kod PHP:
echo $mybb->threads();
echo 
$mybb->posts(); 

Którą możemy okrasić trochę informacją:

Kod PHP:
<h3>Najnowsze wątki na forum</h3>
<?
php
echo $mybb->threads();
?>
<h3>Najnowsze posty na forum</h3>
<?php
echo $mybb->posts();
?>

Możemy też wyświetlić 5 wątków z działu o ID 2 kierujące do ostatniego postu:

Kod PHP:
<h3>Najnowsze wątki z działu X</h3>
<?
php
echo $mybb->threads(5true2);
?>

Podobnie możemy poczynić z postami:

Kod PHP:
<h3>Najnowsze posty z działu X</h3>
<?
php
echo $mybb->posts(52);
?>

I to by chyba było na tyle. :) Chętnie usłyszę propozycje lub sugestie na temat tego skryptu. Służę także pomocą w jego użytkowaniu. :)

Zawartość klasy
Kod PHP:
<?php
/**
* This class can display latest threads or posts
* formated in unordered list (<ul/>)
* It doesn't depend on place where script is being run
* just initialize class and execute proper method

* @author Mariusz "marines" Kujawski <marinespl@gmail.com>
* @link http://marines.jogger.pl/
* @version 0.1
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/
class MyBBLatest {
   
// mysql db handler
   
private $db;
   
// tables prefix
   
private $prefix;
   
// url to mybb
   
private $url;
   
/**
   * constructor
   *
   * @param string $mybb path to MyBB instalation
   * @param string $url URL of MyBB instalation
   * @return boolean
   */
   
public function __construct($mybb ''$url) {
      
// include mybb config file
      
@include('./' $mybb 'inc/config.php');
      
// db connect
      
$this->db = @mysql_connect($config['database']['hostname'], $config['database']['username'], $config['database']['password']);
      
// db choose
      
@mysql_select_db($config['database']['database'], $this->db);
      
// stop executing if db connection isn't availible
      
if (!$this->db) return false;
      
// set db prefix
      
$this->prefix $config['database']['table_prefix'];
      
// set base url of mybb
      
$this->url $url;
      
// return
      
return true;
   }
   
/**
   * display latest threads
   *
   * @param integer $many indicates how many threads have to be retrieved from database
   * @param boolean $lastpost indicates whether link has to direct to last post in thread
   * @param integer $fid ID of forum which threads have to be retrieved from
   * @return string list of threads
   */
   
public function threads($many 10$lastpost false$fid false) {
      
// forum id select
      
if ($fid) {
         
$where 'WHERE `fid` = ' $fid;
      }
      if (
$lastpost) {
         
$last '&action=lastpost';
      }
      
// initialize temporary var
      
$tmp '<ul class="last-threads">';
      
// select data
      
$query = @mysql_query('SELECT `tid`, `subject` FROM `' $this->prefix 'threads` ' $where ' ORDER BY `dateline` DESC LIMIT ' $many);
      
// check if query has result
      
if (!$query) return false;
      
// collect data into list
      
while ($row mysql_fetch_array($query)) {
         
$tmp .= '<li><a href="' $this->url 'showthread.php?tid=' $row[0] . $last '">' $row[1] . '</a></li>';
      }
      
$tmp .= '</ul>';
      
// return list of threads
      
return $tmp;
   }
   
/**
   * display latest posts
   *
   * @param integer $many indicates how many posts have to be retrieved from database
   * @param integer $fid ID of forum which posts have to be retrieved from
   * @return string list of posts
   */
   
public function posts($many 10$fid false) {
      
// forum id select
      
if ($fid) {
         
$where 'WHERE `fid` = ' $fid;
      }
      
// initialize temporary array
      
$tmp '<ul class="last-threads">';
      
// select db data
      
$query = @mysql_query('SELECT `pid`, `tid`, `subject` FROM `' $this->prefix 'posts` ' $where ' ORDER BY `dateline` DESC LIMIT ' $many);
      
// check if query has result
      
if (!$query) return false;
      
// collect data into list
      
while ($row mysql_fetch_array($query)) {
         
$tmp .= '<li><a href="' $this->url 'showthread.php?tid=' $row[1] . '&pid=' $row[0] . '#pid' $row[0] . '">' $row[2] . '</a></li>';
      }
      
$tmp .= '</ul>';
      
// return posts
      
return $tmp;
   }
// MyBBLatest end
?>