viernes, 13 de abril de 2012

Gestión de home pages por roles

Cuando se esta trabajando en un proyecto donde cada rol debe tener una home page diferente, se implementan de esta manera.

Organización:
Crear tantos roles como home pages diferentes se van a utilizar. Llamar a cada rol home_<identificador>
Por ejemplo:

home_administrador
home_operador
home_supervisor

Luego se le asignan estos roles a los usuarios. Si se asigna mas de un rol home_ a un usuario, la página inicial será cualquiera de las asignadas.

Template homepage.htm (carpeta /www/templates)
Ejemplo de un template sencillo, parte del body.


<body onload="onPageLoad()">
<div id="main">
<a class="logo" href="/servi/index.php"></a>
        <div id="appmenu"></div>
        
        <div id="user"><com:homepage.comp.mini_who/></div>
<div id="tools">
          <com:homepage.comp.who_servi/>
          <div class="version"><com:includes.homepage.comp.soft_version/></div>
          <com:homepage.comp.gestionadora_sidebar/>
      </div>
  </div>

<div id="contenido">  
            <com:homepage.comp.dynhome/>
</div>
</body>

En el template, solo hay que incluir el componente para mostrar las paginas home dinamicas.

La implementación de cada pagina, se hace en la carpeta /www/includes/homepage/comp
Por cada rol creado, hay que hacer un archivo PHP que se llame igual que el rol, mas otro mas llamado home_default.php que se usará en aquellos casos donde el usuario no tenga un rol home_<?> asignado.

Cada archivo, aparte de llamarse como el rol, debe instanciar una clase que se llame como el rol, y declarar el método Render(). 

Ejemplo archivo home_despacho.php

<?php
if(!class_exists('home_despacho'))
{
class home_despacho
{
public function Render($context)
{
                        $html = 'Mi contenido de homepage;
                        
                        $content["home_despacho"] = $html;
$content["upload"] = "";
return array( $content, array() );
}
}
}
?>


El método Render() debe retornar un array con contenido y errores (que a su vez son dos arrays).

El array de contenido llamado "$content" debe incluir por lo menos un elemento, con el nombre del rol.


No hay comentarios:

Publicar un comentario