RkBlog

Hardware, programming and astronomy tutorials and reviews.

Integracja IPB - Komentarze i Usprawnienia

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:
<?php
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ć.

Komentarze

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:
<?php
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>
RkBlog

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

Comment article