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:

require_once('MyBBLatest.class.php');

Teraz musimy zainicjować klasę:

$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:

echo $mybb->threads();
echo $mybb->posts();

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

<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:

<h3>Najnowsze wątki z działu X</h3>
<?php
echo $mybb->threads(5, true, 2);
?>

Podobnie możemy poczynić z postami:

<h3>Najnowsze posty z działu X</h3>
<?php
echo $mybb->posts(5, 2);
?>

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
<?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 <[email protected]>
* @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
?>