Teraz zajmiemy się usprawnieniem naszego menu użytkownika. Działa ono poprawnie jeżeli użytkownik jest zalogowany, jeżeli nie jest pojawią się dziwne, niepełne dane. Przeglądając zakładkę
Members dokumentacji SDK (
link) znajdziemy dwie ciekawe metody:
is_loggedin zwracającą wartość logiczną True jeżeli jesteśmy zalogowani oraz
login(login, hasło) logującą użytkownika i zwracającą True jeeli to się powiedzie.
Naszym zadaniem będzie dodanie sprawdzania czy użytkownik jest zalogowany i jeżeli nie to wyświetlenia formularza logowania.
Widok profil.php przerabiamy na:
<div style="float: right; width:300px; border: 1px dashed gray; padding:5px; margin-left:8px; font-size:11px;">
<?PHP
IF($logged)
{
?>
<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); ?>
<?PHP
}
else
{
?>
<?php echo form_open('main/login'); ?>
<LI><B>Login</b><?php echo form_input(array('name' => 'login', 'size' => 20)); ?><BR>
<LI><B>Hasło</b><?php echo form_password(array('name' => 'password', 'size' => 20)); ?>
<center><?php echo form_submit('submit', 'Zaloguj'); ?></center></form>
<?php echo form_close(); ?>
<?PHP
}
?>
</div>
$logged będzie przechowywała wynik metody SDK
is_loggedin. Jeżeli True to pokaż informacje o użytkowniku, jeżeli False to pokaż formularz logowania. Owy formularz odsyła do metody
login kontrolera
Main, który wygląda tak:
function login()
{
$rules['login'] = "required|max_length[250]|xss_clean";
$rules['password'] = "required|max_length[250]|xss_clean";
$this->validation->set_rules($rules);
IF($this->validation->run() == TRUE and $this->sdk->login($this->input->post('login'), $this->input->post('password')))
{
$this->response['content'] = '<center><B>Zalogowano Pomyślnie</B></center><META HTTP-EQUIV="Refresh" CONTENT="1; URL='.site_url().'">';
}
else
{
$this->response['content'] = '<center><B>Błąd Logowania</B></center><META HTTP-EQUIV="Refresh" CONTENT="1; URL='.site_url().'">';
}
$this->load->view('index', $this->response);
}
Jeżeli dane są wprowadzone i udało się zalogować to wyświetli się odpowiedni komunikat, we wszystkich innych wypadkach (bez rozdrabniania się na różne możliwości) wyświetli się komunikat informujący o niepowodzeniu. Teraz wystarczy wylogować się na forum i spróbować zalogować się z naszej strony. Wszystko powinno działać.
Teraz zajmiemy się naszymi "artykułami", a mianowicie wyświetlaniem "komentarzy" czyli postów do danego tematu. Obecnie w widoku
art.php zmienna
$posts określa liczbę postów dla danego tematu. Wykorzystamy to by wyświetlać link "Zobacz Komentarze" gdy jakieś istnieją, oto widok:
<?PHP echo $title; ?>
<b><?PHP echo $description; ?></b><BR><BR>
<?PHP echo $post; ?>
<HR>
<?PHP
IF($posts > 0)
{
echo '<B>Komentarzy</B>: '.$posts.' | <A href="'.site_url('main/show_com/'.$tid).'">Zobacz Komentarze</A>';
}
else
{
echo '<B>Brak Komentarzy</B>';
}
?> | <B>Odsłon</B>: <?PHP echo $views; ?>
Gdzie zmienna
$tid zawiera numer ID naszego tematu (z tablicy get_topic_info). Teraz metoda
show_com kontrolera:
function show_com()
{
$id = $this->uri->segment(3);
IF(isset($id) and is_numeric($id))
{
$ar = $this->sdk->list_topic_posts($id);
IF(count($ar) > 1)
{
unset($ar[0]);
$this->response['content'] = '';
foreach($ar as $val)
{
$this->response['content'] .= $this->load->view('comment', $val, True);
}
}
$this->load->view('index', $this->response);
}
}
Wygląda dość znajomo. Na co trzeba zwrócić uwagę to fakt iż
list_topic_posts zwraca wszystkie posty tematu, wraz z postem początkowym ("tematem"), dlatego przed pętlą usuwamy go z tablicy (za pomocą unset). Widok
comment.php wygląda tak:
<b><?PHP echo $author_name; ?></b><BR><BR>
<?PHP echo $post; ?>
<HR><BR>