Integracja punBB ma tą wadę że polega na dołączeniu pewnych plików forum, co w przypadku Code Ignitera stwarza jeden problem. Otóż pomocnik
url zawiera funkcję
redirect. punBB również zawiera taką funkcję i dochodzi do konfliktu. Musimy zmienić nazwę funkcji w pomocniku (co w przypadku udostępniania projektu zintegrowanego z punBB wymusza dodanie pliku pomocnika).
- Otwórz
system/helpers/url_helper.php i znajdź:
function redirect($uri = '', $method = 'location')
zamień na:
function ci_redirect($uri = '', $method = 'location')
- W kontrolerach, które mają korzystać z integracji
przed kodem klasy dodaj:
define('PUN_ROOT', 'punbb/');
require PUN_ROOT.'include/common.php';
Gdzie
'PUN_ROOT', 'punbb/' oznacza ścieżkę do katalogu forum. W tym przypadku katalog "punbb" znajduje się w katalogu z plikiem index.php i system (główny katalog CI)
- Do konstruktora klasy dodaj:
global $pun_user;
$this->pun = $pun_user;
Przykład:
function nazwaklasy()
{
global $pun_user;
parent::Controller();
$this->pun = $pun_user;
unset($pun_user);
}
$this->pun będzie przetrzymywać tablicę danych z punBB. By ją zobaczyć wystarczy:
echo '<pre>';
print_r($this->pun);
Oto metoda kontrolera, która sprawdza zalogowanie (zwraca True jeżeli tak i False jeżeli nie jesteśmy zalogowani)
function _check_login()
{
IF($this->pun['group_id'] == 3) return false;
IF($this->pun['username'] == 'Guest') return false;
IF($this->pun['password'] == 'Guest') return false;
IF($this->pun['id'] == 1) return false;
return true;
}
Grupa adminów ma numer ID równy 1, wystarczy prosty IF:
IF($this->pun['group_id'] == 1)
{
echo 'Jestem adminem';
}
Z tablicy można wyciągnąć jeszcze inne dane jak np. nasz login itd. Integracja ta jest bardzo prosta i raczej niedoskonała pod względem kodu jaki się stosuje (globalna zmienna) jednak zapewni prostą integrację z forum (system użytkowników/uprawnień).
Wykorzystujemy CI do wykonania zapytania:
$p = $this->db->query("SELECT * FROM PREFIX_topics ORDER BY last_post DESC LIMIT 10");
Co pobierze 10 tematów, w których ostatnio dodano posta. By wyświetlić listę z linkami wystarczy w pętli wywoływać widok o kodzie:
foreach($p->result() as $item)
{
$pun .= $this->load->view('pun_loop', $item, True);
}
<LI><a href="ŚCIEŻKA/viewtopic.php?id=<?=$id;?>"><?=$subject;?></a> (<?=$last_poster;?>)</LI>