Doymer Consultores

  • Increase font size
  • Default font size
  • Decrease font size
Inicio Blog Joomla! Entendiendo Joomla! 1.5 -Segunda parte
21
Enero
2010

Entendiendo Joomla! 1.5 -Segunda parte

Imprimir PDF

En el artículo anterior expliqué los principios básicos del modelo MVC en el que se basa el entorno de desarrollo (framework en inglés) de Joomla 1.5. En aquella ocasión se hizo hincapié sobre la 'C' del acrónimo MVC y nos quedamos a las puertas de la 'V'.

Para todos aquellos que se quedaron con ganas de más en esta segunda parte vamos a intentar aclarar cómo funciona esta parte del modelo de tal forma que seamos capaces de poder utilizar la flexibilidad que aporta en nuestros propios desarrollos.

En aquella ocasión nos preguntábamos qué era una vista. Pues bien, una vista es, sencillamente, un subconjunto de datos. Es el mismo concepto de vista del lenguaje SQL. Presentamos diferentes partes, grupos, bloques, llámalo como quieras, de nuestros datos con diferentes vistas. Así que podemos tener una vista detallada y una vista resumida, esta última presentando un subconjunto de datos de los presentados en la primera; Una vista de los datos del día y una vista de los datos del mes, etc.

Como podemos tener diferentes vistas en nuestro componente, Joomla! usa la carpeta 'views' dentro del directorio base del componente para mantener las cosas ordenadas. Esta carpeta es sólo un almacén para tus diferentes vistas.

Dentro de la carpeta 'views' tendrás que tener una carpeta por cada vista que desees. ¿Qué hace el entorno de Joomla! con todo esto?. Pues intentar leer un fichero llamado 'view.html.php' que debiera existir en la carpeta de tu vista. ¿Un poco lioso? A ver si me explico...

Cuando tu usuario realiza la petición de página incluimos un parámetro llamado, ¿adivinas?... exacto, 'view' que contenía la vista que deseábamos obtener dentro del modelo MVC. O que debiste incluir ya que lo que no existe es algo así como una vista por defecto. Así que nuestro URL era algo como:

http://mi.sitio.com/index.php?option=com_viajes&view=<mivista>[&task=<mitarea>]

La parte correspondiente a la tarea (task) puede obviarse. Recuerda que si no la incluimos, la tarea por defecto es 'display'. Con esta URL Joomla! va a buscar e importar un fichero localizado en la carpeta <raíz del sitio>/components/com_viajes/views/<mivista>/view.html.php. Si este fichero, o la ruta, no existen entonces Joomla! generará un error. Por el simple mecanismo de cambiar el nombre de la vista asociada a la variable 'view' podemos acceder a diferentes vistas casi sin esfuerzo. Genial, ¿eh?

Además esto tiene mucho sentido. Salvo la información específica que necesitemos en cada ocasión y la forma de presentar el resultado al usuario todas las demás acciones asociadas a una página dada son comunes. ¿Por qué reescribir entonces una y otra vez esa parte común? Vemos que Joomla! posibilita, de esta manera, la reutilización del código base de cada página; algo muy conveniente.

Cada petición de vista requiere también que especifiquemos el formato en el que vamos a servir los datos de la misma. Existen varios formatos bien conocidos como html (el formato por defecto si no especificamos ninguno), (rss-)feed, raw, etc., pero podemos usar formatos propios. Si no se especifica el formato en la URL mediante el parámetro 'format=<miformato>'el valor por defecto usado es de 'html'.

El formato 'html' es especial: hace que el entorno de Joomla! envuelva nuestra respuesta en la plantilla asignada a la página de tal forma que obtenemos una página HTML completa. De esta forma, con muy poco esfuerzo por nuestra parte, obtenemos como respuesta una página completamente cargada con la salida de los módulos y todo lo que hayamos configurado en ella además de nuestros datos, en el centro de la misma, como contenido.

El formato específico que estamos usando es lo que hemos puesto en el centro del nombre del archivo de vista que hemos colocado en nuestra carpeta de vista (el fichero 'view.html.php'). Si usamos un formato diferente como 'raw' nuestro fichero debiera llamarse igualmente 'view.raw.php'.

Como se dijo anteriormente se pueden tener otros formatos aparte de html y J! no aplicará sobre ellos la plantilla seleccionada de nuestro site. Puedes tener un formato 'pdf' para entregar tus datos como documento pdf o incluso un formato 'ajax' para entregar fácilmente respuestas a peticiones ajax con datos en formato JSON o el que se desee. Sólo tienes que construir tu URL como

http://my.site.com/index.php?option=com_&view=&format=ajax

para hacer que el entorno de Joomla! busque y carge un archivo llamado mivista.ajax.php situado en /components/views/ desde donde puedes enviar al cliente cualquier cosa que desees. Es así de fácil.

De cualquier forma, para conseguir esta meta necesitamos algún código dentro del archivo view.<formato>.php. En este momento tenemos el fichero, y ahora necesitamos la clase. Y, afortunadamente, sólo tenemos que extender la clase JView siguiendo las estrictas reglas que hemos comentado anteriormente que debemos seguir. En este caso *DEBEMOS* construir nuestra clase concatenando el nombre del componente con la palabra 'View' y con el nombre de la vista. De esta forma el nombre de nuestra clase será un nombre camelizado con el texto 'View' en el centro. Si nuestro componente se llama 'Viajes' y la vista se llama 'detalle' (URL ...?option=com_viajes&view=detalle) la clase *DEBE* ser la siguiente:

class ViajesViewDetalle extends JView 
{
function display($tpl=null)
{
echo 'blah, blah';
}
}

Dentro de esta clase sólo tenemos generar los datos que deseamos presentar con nuestro componente para este caso específico. Puedes hacer esto generando el código [x]HTML directamente (en este caso ten cuidado de desactivar el intérprete php mediante la secuencia '?>' antes de poner tu código html y de volver a iniciar el intérprete con '<?php' antes del corchete que cierra la función 'display'), o a través de llamadas a 'echo' dentro del código php, o ser más sutil y usar una presentación (un 'layout' -más sobre presentaciones luego-).

¿Puedes tener otras funciones aparte de 'display'? No lo se. Esto es algo que los gurus deben responder. ¿De dónde viene la función 'display'?. De nuevo, no lo se. Espero que algún lector pueda arrojar luz sobre este punto.

 

Pero podemos ir un poco más lejos todavía. Hasta este momento tenemos un entorno distribuido que disecciona nuestra petición de tal forma que nos permite crear archivos muy pequeños y específicos que reaccionan sólo a determinados tipos de solicitudes. De esta forma los archivos que se procesan en cada petición son muy cortos y ajustados a lo que se solicita de tal forma que la respuesta global del sistema es rápida en base a no cargar cantidad de código que no resulta útil para el caso actual (como pasaba en Joomla! 1.0).

Habiendo llegado a este punto podemos diseccionar el sistema algo más y añadir otro nivel de detalle: la presentación final que desamos para los datos que entregamos.

Una presentación es una forma de dar formato a los datos para la vista activa. Un mismo conjunto de datos pueden ser presentados bajo diferentes aspectos visuales de tal manera que el código que usamos para generarlos (dentro de la función 'display' de nuestra clase 'view') no cambia aunque presentemos esos datos de formas diferentes. Nosotros 'inyectamos' los datos de la vista en la plantilla de presentación y usamos el código de la plantilla para formatearlo visualmente antes de enviarselo al usuario (piensa en la distribución de las columnas, el orden de los datos, su posición en la pantalla y cosas así).

Como antes, si no especificamos una presentación estaremos usando la presentación por defecto (el 'default' layout). Con el objeto de usar otras presentaciones necesitamos crear una nueva carpeta, dentro de la vista asociada, llamada 'tmpl' y crear un archivo llamado <mipresentacion>.php, ni más ni menos. Si estamos usando la presentación por defecto este fichero se llama 'default.php'.

La presentación deseada se especifica en la URL mediante el parámetro 'layout=' o puede ser inyectada localmente en la función si nos las ingeniamos para obtener la presentación que deseamos usar a partir de otras fuentes.

Para inyectar una presentación, nuestra clase en la vista debe llamar a 'parent::display()' y pasar el nombre de la plantilla de presentación deseada como parámetro. Así nuestra clase debiera ser algo como:

class View extends JView
{
 function display($tpl=null)
{
  // Prepara los datos
$data1 = ....
$data2 = ....
$moredata[] = array....

// Inyecta los datos
$this->assignRef('variablename', $data1);
$this->assignRef('variablename2', $data2);
$this->assignRef('variablename3', $moredata);

// Inject the layout if not using the request
$this->setLayout('mylayout'); // Inyección local de la presentación
parent:display($tpl);
}
}

De esta manera Joomla! buscará un archivo llamado 'mylayout.php' en la carpeta 'tmpl' de la vista asociada. Dentro de este fichero tienes un objeto '$this' que tiene acceso a las variables que hemos inyectado (por medio de la función assignRef) sólo con referenciarlas ('$this->variablename', '$this->variablename1', etc) y que pueden ser usadas para construir la respuesta [x]HTML *FINAL* que entregar al usuario.

Por último indicar que también podemos usar lo que podríamos llamar 'plantillas de presentación' ('layout templates'). El archivo que Joomla! buscará en la carpeta de presentaciones (tmpl) esta compuesto por el nombre de la presentación concatenado mediante un guión bajo (underscore) con el valor de la variable $tpl. Si $tpl es 'null' como en el ejemplo anterior el nombre final es simplemente mylayout.php pero, si $tpl vale plantilla1 por ejemplo, entonces el nombre final será mylayout_plantilla1.php siendo posible de esta manera ajustar de forma más fina el grado de precisión en la entrega de los datos solicitados mediante archivos más simples, pequeños y específicos.

Share
Última actualización el Domingo 07 de Febrero de 2010 12:55  

Comentarios  

 
0 # Oscar Flores 08-05-2011 00:24
Esto es mejor que he encontrado en la web!! una basta explicacion mas que solo codigo y codigo!!
Responder | Responder con una citación | Citar
 
 
0 # Jesús Nieto 04-10-2012 20:48
Muy útil me ha ayudado bastante, gracias!
Responder | Responder con una citación | Citar
 
 
0 # Angel Ladrero 05-10-2012 09:39
No soy demasiado seguidor de Joomla pero me gusta ver como va evolucionando.
Buen trabajo de verdad.
Responder | Responder con una citación | Citar
 
 
0 # Jorge 14-01-2013 19:52
HOla, estoy intentando llamar a una nueva vista, pero por mucho que lo intento, siempre me sale la vista pro defecto (default.php).

En el controler hago lo siguiente:
$view =& $this->getView("users", $viewType);
$view->setLayout("addEdit");
$view->displayAdd();

En el display hago:
$this->loadTemplate('addEdit');
parent::display ($tpl);

y tengo dos vistas en el tmpl: Una llamada default y otra addEdit.php. Que hago mal?? muchas gracias por su ayuda

Jorge
Responder | Responder con una citación | Citar
 
 
0 # Librado Sanchez 09-09-2016 21:34
Agradezco tu aporte, me ha servido de mucho; sin embargo; sigo sin saberdonde encontrar el query que llena los datos de mi view.raw.
Responder | Responder con una citación | Citar
 
 
0 # Administrador 11-09-2016 11:17
En un desarrollo MVC las definiciones y consultas de datos se realizan en la parte M (model) del mismo. Debieras tener una carpeta 'models' dentro de la cual está el código necesario para la inserción y extracción de datos en las tablas asociadas al componente.
Responder | Responder con una citación | Citar
 
 
0 # Tracee 26-03-2017 20:47
Las semillas de lino asimismo ayudan a supervisar
el nivel de azúcar en tu sangre, a fin de que tu energía no baje de pronto tras comer.
Responder | Responder con una citación | Citar
 

Escribir un comentario

El propietario de esta página no se hace responsable de las opiniones de sus lectores en los comentarios, así como puede o no estar de acuerdo con lo que en ellos se diga.

Usa el juego limpio en tus comentarios

Por favor, no realices comentarios ofensivos o insultantes. Tampoco generes comentarios con publicidad o Spam. No utilices los comentarios para 'enchufar' tu sitio. Los enlaces que pongas podrán ser eliminados. Pretendemos crear un espacio de comunicación entre el autor y los lectores.

Todos agradeceremos el correcto uso de la ortografía, pues no todos somos capaces de entender mensajes 'codificados' tipo SMS. Además te rogamos uses signos de puntuación, si puede ser, para mejorar la comprensión de tu mensaje.
No escribas sólo en mayúsculas ya que en Internet escribir con mayúsculas equivale a GRITAR y no por gritar se te va a hacer más caso sino, probablemente, al contrario.

Reserva de Edición

Nos reservamos el derecho de no incluir comentarios que sean ofensivos, desagradables, que ataquen a terceros (racistas, homófobos, etc) o que no tengan que ver con el sitio o con el tema de que se trata.
Los datos suministrados al emitir tu comentario son privados y de tu propiedad y no serán usados para ningúna acción comercial ni de otro tipo.


Código de seguridad
Refescar


Archivo

Powered by ArtTree