Basados en el análisis de requerimientos, necesitamos tres portlets diferentes: el portlet de "menú de usuario", el portlet de "nube de etiquetas" y el portlet de "comentarios recientes". Vamos a desarrollar estos portlets extendiendo el widget CPortlet que provee Yii.
En esta sección, vamos a desarrollar nuestro primer portlet concreto - el portlet de menú de usuario que despliega una lista de items de menú que son accesibles solamente a usuarios autenticados. El menú contiene cuatro items:
UserMenu
¶Creamos la clase UserMenu
para representar la parte lógica del portlet de menú de usuario. La clase es guardada en el archivo /wwwroot/blog/protected/components/UserMenu.php
con el siguiente contenido:
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');
}
}
La clase UserMenu
extiende de la clase CPortlet
desde la librería zii
. Sobrecarga los métodos init()
y renderContent()
de CPortlet
. El primero configura el título del portlet para que sea el nombre del usuario actual; el segundo genera el cuerpo del portlet mostrando una vista llamada userMenu
.
Consejo: Notar que debemos incluir explícitamente la clase
CPortlet
llamando aYii::import()
antes de que hagamos referencia por primera vez. Esto se debe a queCPortlet
es parte del projectzii
-- la librería oficial de extensiones para Yii. Por cuestiones de rendimiento, las clases en este proyecto no son listadas como clases del núcleo. Por ello, debemos importarla antes de usarla por primera vez.
userMenu
¶Luego, creamos la vista userMenu
que es guardada en el archivo /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('post/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: Por defecto, los archivos de vista para un widget deben ser ubicados en el subdirectorio
views
conteniendo el archivo de clase del widget. El nombre del archivo debe ser el mismo que el nombre de la vista.
UserMenu
¶Es hora de hacer uso de nuestro recién creado portlet UserMenu
. Modificamos el archivo de vista del diseño /wwwroot/blog/protected/views/layouts/column2.php
como sigue:
...... <div id="sidebar"> if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); </div> ......
En lo anterior, llamamos al método widget()
para generar y ejecutar una instancia de la clase 'UserMenu'. Como el portlet debe ser mostrado solamente a usuarios autenticados, llamamos a widget()
solamente cuando la propiedad isGuest
del usuario actual es falsa (significando que el usuario está autenticado).
UserMenu
¶Vamos a probar lo que hemos hecho hasta ahora.
http://www.example.com/blog/index.php
. Verifica que no se muestre nada en la sección de la barra lateral de la pagina.Login
e ingresa los datos en el formulario para ingresar. Si el ingreso es exitoso, verifica que el portlet UserMenu
aparezca en la barra lateral y el portlet tenga el nombre de usuario como su título.Logout
en el portlet UserMenu
. Verifica que la acción de logout sea exitosa y que el portlet UserMenu
desaparece.Lo que creamos es un portlet que es altamente reusable. Podemos fácilmente reusarlo en un proyecto diferente con pocas o ninguna modificación. Más aún, el diseño de este portlet sigue de cerca la filosofía en que la lógica y la presentación deben estar separadas. Mientras no mencionamos esto anteriormente, esta práctica es usada casi en todos lados de una aplicación Yii típica.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.