Integracja IPB - Komponent Artykułów
14 July 2008
Comments
W tym warsztacie zajmiemy się stworzeniem prostych komponentów opartych o IPB. W ostatniej lekcji dowiedzieliśmy się jak wyświetlić awatar użytkownika oraz jak pobrać tablicę z danymi o użytkowniku. Wykorzystamy te dane do stworzenia prostego "bloku" użytkownika.Wykonanie
Żeby nasz warsztatowy kod ładnie wyglądał wypada użyć jakiegoś prostego ładnego szablonu. Może to być już jeden z wcześniej przerabianych lub też jakiś nowy, ja wybrałem szablon "TimeToRest" do pobrania stądSzablon dodałem do CI jako widok (poprawki ścieżek do CSS i grafik) i moja strona zaczęła wyglądać tak:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Artykuły z IPB</title>
<link rel="stylesheet" href="<?PHP echo base_url(); ?>system/application/views/style.css" type="text/css" />
</head>
<body>
<div id="wrap">
<div id="header"><img src="<?PHP echo base_url(); ?>system/application/views/images/header.jpg" width="768" height="120" alt="Time To Rest" /></div>
<div id="navigation">
<ul>
<li><a href="<?PHP echo base_url(); ?>">Strona Główna</a></li>
</ul>
</div>
<div id="content">
<?PHP echo $content; ?>
</div>
<div id="footer">| <a href="<?PHP echo base_url(); ?>">Strona Główna</a> | Designed by <a href="http://www.four-closure.com/">Donny Burnside</a> |</div>
</div>
</body>
</html>
<?php
error_reporting(E_ALL ^ E_NOTICE);
class Main extends Controller
{
function Main()
{
parent::Controller();
$this->response = array();
$this->load->script('ipbsdk_class.inc');
$this->sdk = new IPBSDK();
}
function index()
{
$this->response['content'] = $this->sdk->get_avatar();
$this->load->view('index', $this->response);
}
}

<div style="float: right; width:300px; border: 1px dashed gray; padding:5px; margin-left:8px; font-size:11px;">
<b>Witaj <?PHP echo $name; ?></b>
<center><?PHP echo $avatar; ?></center>
<B>Postów</B>: <?PHP echo $posts; ?><BR>
<B>Data Dołączenia:</B>: <?PHP echo date("Y-m-d", $joined); ?><BR>
<B>Ostatni Post:</B>: <?PHP echo date("Y-m-d", $last_post); ?>
</div>
<?php
error_reporting(E_ALL ^ E_NOTICE);
class Main extends Controller
{
function Main()
{
parent::Controller();
$this->response = array();
$this->load->script('ipbsdk_class.inc');
$this->sdk = new IPBSDK();
}
function index()
{
$user = $this->sdk->get_advinfo();
$user['avatar'] = $this->sdk->get_avatar();
$this->response['content'] = $this->load->view('profil', $user, True);
$this->response['content'] .= '<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>';
$this->load->view('index', $this->response);
}
}

Teraz trzeba zapełnić treścią resztę strony. Wyobraź sobie moduł artykułów - Treść tematu (pierwszego jego posta) to treść artykułu a kolejne posty to jego komentarze. Przeglądając dokumentację SDK znajdziemy pod Topics dwie ciekawe dla nas metody: get_topic_info - zwraca tablicę z danymi o określonym poprzez numer ID temacie, list_topic_posts - listuje posty tematu... Dodatkowo pod zakładką Forum znajdziemy list_forum_topics - listujące tematy z forum. Szczegóły po kolei.
Komponent artykułów
Tworzymy widok art_loop.php<?php
<?PHP
foreach($arts as $val)
{
echo '<a href="'.site_url('main/show/'.$val['tid']).'"><B>'.$val['title'].'</B></a> - '.$val['description'].' <B>Autor</B>: '.$val['starter_name'].'<BR>';
}
?><BR><BR><BR><BR>
<?php
error_reporting(E_ALL ^ E_NOTICE);
class Main extends Controller
{
function Main()
{
parent::Controller();
$this->response = array();
$this->load->script('ipbsdk_class.inc');
$this->sdk = new IPBSDK();
}
function index()
{
$user = $this->sdk->get_advinfo();
$user['avatar'] = $this->sdk->get_avatar();
$this->response['content'] = $this->load->view('profil', $user, True);
$arts = $this->sdk->list_forum_topics(2);
$this->response['content'] .= $this->load->view('art_loop', array('arts' => $arts), True);
$this->load->view('index', $this->response);
}
}
$arts = $this->sdk->list_forum_topics(2);
Metoda list_forum_topics pobiera tablicę złożoną z tablic zawierającą informacje o tematach z forum o podanym numerze ID. Tablicę tą przekazujemy do widoku i tam wyświetlamy.
'.site_url('main/show/'.$val['tid']).'
Załóżmy że main/show/ID będzie linkiem pokazujący dany artykuł. Stąd ten link w widoku. Wynik naszej pracy wygląda mniejwięcej tak:

Artykułów ciąg dalszy
Tworzymy w kontrolerze Main metodę show odpowiedzialną za pokazanie "artykułu":<?php
function show()
{
$id = $this->uri->segment(3);
IF(isset($id) and is_numeric($id))
{
$ar = $this->sdk->get_topic_info($id);
$this->response['content'] = $this->load->view('art', $ar, True);
$this->load->view('index', $this->response);
}
}
<?PHP echo $title; ?>
<b><?PHP echo $description; ?></b><BR><BR>
<?PHP echo $post; ?>
<HR>
<B>Komentarzy</B>: <?PHP echo $posts; ?> | <B>Odsłon</B>: <?PHP echo $views; ?>


RkBlog
Comment article