RkBlog

Hardware, programming and astronomy tutorials and reviews.

Integracja z punBB

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')

Integracja

- W kontrolerach, które mają korzystać z integracji przed kodem klasy dodaj:
<?php
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:
<?php
global $pun_user;
$this->pun = $pun_user;
Przykład:
<?php
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:
<?php
echo '<pre>';
print_r($this->pun);

Czy jestem zalogowany?

Oto metoda kontrolera, która sprawdza zalogowanie (zwraca True jeżeli tak i False jeżeli nie jesteśmy zalogowani)
<?php
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;
 }

Czy jestem adminem?

Grupa adminów ma numer ID równy 1, wystarczy prosty IF:
<?php
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ń).

Ostatnie 10 aktywnych tematów

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:
<?php
foreach($p->result() as $item)
 {
 $pun .= $this->load->view('pun_loop', $item, True);
 }
<?php
<LI><a href="ŚCIEŻKA/viewtopic.php?id=<?=$id;?>"><?=$subject;?></a> (<?=$last_poster;?>)</LI>
RkBlog

Kurs Code Igniter, 14 July 2008, Piotr Maliński

Comment article