Uso de contextos en Zend Framework

En un proyecto web, habitualmente hacemos llamadas al mismo código pero necesitamos que los resultados se muestren de forma diferente. Zend Framework ofrece varios mecanismos para facilitar esta tarea.

Uno de ellos son las vistas parciales (PartialView) que permiten separar una parte de la presentación y aislarlas del contexto. Esto nos permite reutilizar una porción de html y definir un contexto concreto para cada llamada.

El contexto es otro mecanismo que también nos permite ejecutar un código discriminando la salida. El siguiente ejemplo utiliza AjaxContext, un helper que hereda de ContextSwitch y que se especializa en llamadas Ajax.

Para empezar, tendremos que inicializar el contexto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class ControladorController extends Zeb_Controller_Action{
 
  public function init(){
    $ajaxContext = $this -> _helper -> getHelper('AjaxContext');
    $ajaxContext -> addActionContext('index','html')
                 -> initContext();
    parent::init();
  }
 
  public function indexAction(){
    ...
  }
 
}

addActionContext() nos permite añadir un nuevo contexto a un action (en este caso index). El primer parámetro es el nombre del action y el segundo el tipo de contexto. initContext() inicializa el contexto.

Sólo con estas lineas ya habremos definido e inicializado un nuevo contexto. Toda las llamadas al action index se trataran de la forma habitual, excepto aquellas que cambien de contexto. ¿Y cómo cambiamos de contexto? El siguiente ejemplo de código JavaScript utiliza Mootools para realizar una llamada Ajax activando el contexto:

1
2
3
4
5
6
...
var myRequest = new Request.HTML({
  url : requestUrl,
  update : 'content-div'
}).get({'format':'html'});
...

Donde requestUrl será la url de nuestro action (Controlador – index) y content-div la capa que se actualizará con el resultado de la llamada. El parámetro format es el que activará el cambio de contexto en nuestro action.

Al realizar esta llamada nuestro action ejecutará el código e irá a buscar una view con el formato de nombre /[controlador]/[action].ajax.phtml en lugar del habitual /[controlador]/[action].phtml. Además desactivará los layouts por defecto, siendo la situación ideal para una llamada de este tipo.

Ya está todo preparado. A partir de ahora las llamadas a /controlador/index se gestionarán como siempre, pero cuando realicemos una llamada desde Ajax podremos mostrar sólo una vista parcial. Esta solución es perfecta para mostrar una ficha: al realizar la llamada /controlador/index mostramos la ficha con cabecera, menú, pie, etc.. y al llamar por Ajax cambiamos de vista y sólo mostramos el contenido del elemento para incluirlo en otra vista.

Unas consideraciones finales:

  • AjaxContext añade un tercer contexto html a los dos (json y xml) ofrecidos por ContextSwitch, aunque podemos crear nuestros propios contextos.
  • Una llamada con el parámetro format no cambiará al contexto AjaxContext si no se ha realizado mediante XmlHttpRequest (que es lo que nos interesa)
  • Zend proporciona una serie de métodos para afinar nuestro código y que nos permitirán añadir headers, serializar respuestas Json, activar layouts, etc… en función del contexto

1 comentario

  1. 3 Octubre, 2009 a las 12:47 | Permalink

    He desarrollado mi web basado en mapa de topicos con el Zend Framework: http://www.quesucede.com. El propio motor de mapa de topicos está implementado en PHP. La experiencia con el Zend Framework fue muy productivo y agradable.

Deja tu comentario

Tu correo nunca será compartido. Los campos marcados con * son obligatorios

*
*