Bazując na analizie wymagań, będziemy potrzebowali trzech portletów: portletu "menu użytkownika", "chmury tagów" oraz portletu "ostatnich komentarzy". Utworzymy te portlety poprzez rozszerzenie widżetu CPortlet dostarczonego przez Yii.
W części tej, utworzymy nasz pierwszy, konkretny portlet - portlet menu użytkownika, który wyświetla listę pozycji w menu, które są dostępne tylko dla uwierzytelnionych użytkowników. Menu zawiera cztery pozycje:
UserMenu
¶Tworzymy klasę UserMenu
opisującą część logiczną portletu menu użytkownika. Klasa ta jest zachowana w pliku /wwwroot/blog/protected/components/UserMenu.php
, który posiada następującą zawartość:
Yii::import('zii.widgets.CPortlet');
class UserMenu extends CPortlet
{
public function init()
{
$this->title=CHtml::encode(Yii::app()->user->name);
parent::init();
}
protected function renderContent()
{
$this->render('userMenu');
}
}
Klasa UserMenu
dziedziczy z klasy CPortlet
z biblioteki zii
. Nadpisuje zarówno metodę init()
jak i metodę renderContent()
z klasy CPortlet
. Pierwsza metoda ustawia tytuł jako nazwę aktualnego użytkownika; druga generuje zawartość ciała portletu poprzez wygenerowanie widoku o nazwie userMenu
.
Wskazówka: Zauważ, że dołączamy jawnie klasę
CPortlet
poprzez wywołanie metodyYii::import()
zanim odwołamy się do niej po raz pierwszy. Dzieje się tak, ponieważCPortlet
jest częścią projektuzii
- oficjalnej biblioteki rozszerzeń dla Yii. Ze względu na wydajność, klasy w tym projekcie nie są wymieniane jako klasy podstawowe (ang. core classes). Dlatego też, musimy je zaimportować zanim ich użyjemy po raz pierwszy.
userMenu
¶Następnie, tworzymy widok userMenu
, który jest zapisany w pliku /wwwroot/blog/protected/components/views/userMenu.php
:
<ul> <li> echo CHtml::link('Create New Post',array('post/create')); </li> <li> echo CHtml::link('Manage Posts',array('/admin')); </li> <li> echo CHtml::link('Approve Comments',array('comment/index')) . ' (' . Comment::model()->pendingCommentCount . ')'; </li> <li> echo CHtml::link('Logout',array('site/logout')); </li> </ul>
Info: Domyślnie, pliki widoku dla widżetu powinny się znajdować w podkatalogu
views
katalogu zawierającego klasę widżetu. Nazwa pliku powinna być taka sam jak nazwa widoku.
UserMenu
¶Nadszedł już czas, aby użyć nasz nowo ukończony portlet UserMenu
. Zmienimy plik widoku układu /wwwroot/blog/protected/views/layouts/column2.php
następująco:
...... <div id="sidebar"> if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); </div> ......
W powyższym kodzie wołamy metodę widget()
w celu wygenerowania i wywołania instancji klasy UserMenu
. Ponieważ portlet powinien być wyświetlany tylko dla uwierzytelnionych użytkowników, wywołujemy metodę widget()
jeśli wartość właściwości isGuest
dla aktualnego użytkownika to false (co oznacza, że użytkownik został uwierzytelniony).
UserMenu
¶Przetestujmy to co dotychczas mamy.
http://www.example.com/blog/index.php
. Upewnij się, że nic nie wyświetla się na pasku bocznym tej strony.Login
i wypełnij formularz logowania. Jeśli zakończy się to sukcesem, sprawdź czy portlet UserMenu
pojawił się na pasku bocznym i czy jego tytuł zawiera nazwę użytkownika.UserMenu
. Sprawdź czy akcja wylogowania powiodła się i portlet UserMenu
portlet zniknął.To co stworzyliśmy to portlet, który można wielokrotnie, ponownie używać. Możemy go w prosty sposób użyć ponownie w innych projektach z drobnymi lub bez żadnych modyfikacji. Więcej, zaprojektowanie tego portletu zgadza się ściśle z filozofią mówiącą, że warstwa logiczna i prezentacyjna powinny być rozdzielone. Chociaż nie zwróciliśmy na to uwagi w poprzednich częściach, praktyka taka ma miejsce niemal wszędzie w typowych aplikacjach opartych na Yii.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.