Joo Mla Spanish

45
 Programació de components MVC per Joomla! 1.5.x  Autor: Carles Serrats Pl. President Tarradellas, 11  FIGUERES (Girona) Tel. 902 88 92 67  Fax 972 67 19 62

Transcript of Joo Mla Spanish

Page 1: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 1/45

 

Programació decomponents MVCper Joomla! 1.5.x

 Autor: Carles Serrats

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Page 2: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 2/45

 

Página 2

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Índice

 Preámbulo........................................................................................................................ 4 

Conceptos Básicos ........................................................................................................... 4 

 Patrón de diseño MCV .................................................................................................... 4  Implementación del MVC de Joomla! 1.5...................................................................... 5 

 Introducción al concepto de front-end y back-end......................................................... 5 

 Back-end componente MVC con Joomla!...................................................................... 5 

Iniciación. Estructura del directorio..................................................................................... 5 

Punto de entrada..................................................................................................................... 6 

Géneros. 1er Contacto .......................................................................................................... 10 El Controlador...................................................................................................................................10 La Vista.............................................................................................................................................14 Layout...............................................................................................................................................18  

Default..........................................................................................................................................18  Layout. Form................................................................................................................................21 

El Modelo. ................................................................ ................................................................. .......24 La tabla. ............................................................... ...................................................................... .......32 

 Front-end componente MVC con Joomla!................................................................... 34 

Iniciación. Estructura del directorio................................................................................... 34 

Punto de entrada................................................................................................................... 34 El controlador ............................................................ ............................................................... ........36 La vista..............................................................................................................................................36 

Vista. Manifiesto (XML) ................................................................... .......................................... 38 El Layout. ............................................................ ...................................................................... .......39 

Layot. Manifiesto (XML).............................................................................................................40 

Cosas .............................................................................................................................. 41 

Creando URLs personalizadas ............................................................................................ 41 El Alias ................................................................ ...................................................................... .......41 El Slug ............................................................... .............................................................. .................41 

Usar las Librerias de la Base de Datos 1.5.......................................................................... 42 Conseguir el objeto de la base de datos del sistema..........................................................................42 Crear un objeto de base de datos a usar ....................................................................... .....................42 Seleccione un campo de la fila..........................................................................................................42 

La clase Error Handling....................................................................................................... 42 Vista general y Descripción:.............................................................................................................42 Implementación: .......................................................... ..................................................................... 43 

JError Class Static Methods:........................................................................................................43 isError( &$object ): ..................................................................... ............................................ 43 

Descripción: Error........................................................................................................................43 raiseError( $code, $msg, $info = null ): ................................................................... ...............43 

Descripción: Warning .............................................................. .................................................... 43 raiseWarning( $code, $msg, $info = null ):.............................................................................43 

Descripción: Notice......................................................................................................................44 raiseNotice( $code, $msg, $info = null ):................................................................................44 

Uso de los Desarrolladores: .................................................................... .......................................... 45  Niveles de Error:.......................................................... ................................................................ 45 

Error: ...................................................... ................................................................ .................45 Warning:..................................................................................................................................45  

Page 3: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 3/45

 

Página 3

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

 Nota:............................................................... .................................................................. .......45 Consideraciones Especiales: ................................................................... .......................................... 45 

Page 4: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 4/45

 

Página 4

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Preámbulo

Requisitos previos -  comprensión sólida de cómo instalar y configurar Joomla yextensiones de terceros; comprensión básica de la administración de la página Web,incluyendo como instalar y configurar PHP, Apache, y MySQL y el modo de realizarcopias de seguridad y restaurar una Joomla base de datos y página web Joomla;conocimiento práctico de XHTML y CSS, o bien algunos conocimientos de

 programación o voluntad para trabajar duro para aprender los conceptos básicos.

Conceptos BásicosLos componentes son pequeños programas que se instalan en Joomla que permiten lamanipulación de los datos hacia un objetivo particular.

En esta nueva versión se realizo una completa reestructuración del sistema con mejorasen todos los aspectos

Patrón de diseño MCVLa nueva versión 1.5 de joomla! Incluye novedades en la elaboración de componentes,entre ellas la posibilidad de incorporar un patrón de diseño MVC , que a la largafacilitará el mantenimiento de nuestro componente, y lo hará más fácil de extender almismo tiempo que resultará más fácil de leer por otras personas.

Lo primero que hay que tener claro es el funcionamiento del modelo MVC. MVC sonlas siglas de Model View Controller, es decir, modelo vista controlador. Una aplicaciónWeb basada en este patrón separar su código en tres partes diferenciadas:

•  El controlador:  el controlador es el punto de entrada de la aplicación, semantiene a la escucha de todas las peticiones, ejecuta la lógica de la aplicación,y muestra la vista apropiada para cada caso.

•  El modelo: el modelo contiene todo el código relacionado con el acceso a datos.Es importante que sea un código lo más genérico posible y se pueda reutilizar enotras situaciones y proyectos. Nunca incluiremos lógica en el modelo, solamenteconsultas a la base de datos y validaciones de entrada de datos.

•  La vista: la vista contiene el código que representará lo que nosotros veremos por pantalla, en este caso se trata de código html.

El objetivo de usar este patrón de diseño, es separar separa los datos de una aplicación,la interfaz de usuario, y la lógica de control en tres componentes distintos. El patrónMVC se ve frecuentemente en aplicaciones Web, donde la vista es la página HTML y elcódigo que provee de datos dinámicos a la página, el modelo es el Sistema de Gestión

de Base de Datos y el controlador representa la Lógica de negocio.

Page 5: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 5/45

 

Página 5

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Implementación del MVC de Joomla! 1.5El marco de trabajo de Joomla! proporciona una implementación sin archivos deconfiguración. Joomla no proporciona este archivo de configuración, sin embargo tieneotra forma de mapear las acciones del controlador. Joomla le da vital importancia alnombre que le tienes que dar a cada fichero del componente, es importantísimo queasignes bien el nombre del controlador, las vistas y los modelos de tu componente, de locontrario Joomla no sabrá encontrarlos.

Introducción al concepto de front-end y back-end. Nuestro componente tendrá dos partes diferenciadas: el front-end y el back-end.

Front-end :  el front-end es la parte del componente que es visible para elusuario de nuestro sitio Web. Se visualiza donde hayamos incluido la etiqueta

<jdoc:include type=”component” /> en el template. Su código fuente seencuentra en el directorio components dentro del directorio principal de Joomla!.

Back-end : es la parte del componente que se mostrará cuando entremos al sitiocomo administradores. El componente se mostrará donde lo hayamosespecificado en el template del back-end. Su código fuente se encuentra en eldirectorio components dentro del directorio administrador dentro del directorio

 principal de Joomla!.-

Siguiendo el patrón MVC, vamos a crear un componente para joomla 1.5 al quellamaremos películas. El objetivo de esta primera toma de contacto es entender lametodología de trabajo para crear el componente de joomla! 1.5.

Back-end componente MVC con Joomla!

Iniciación. Estructura del directorio.

Lo primero que haremos será ir a la carpeta principal de la parte administrativa deJoomla en nuestro servidor Web. Dentro de esa carpeta localizar el directoriocomponents administrator/components.

Observa que dentro del directorio existen otros directorios que empiezan por com_xxxx. Esta es la primera norma que pone Joomla!: los componentes se deben de ubicar en undirectorio cuyo nombre empiece por com_ seguido del nombre del componente, porejemplo para el componente películas seria com_peliculas.

Cuando llamemos a nuestro componente, lo primero que hace Joomla es buscar elarchivo php que hay dentro con el nombre “admin. nombre componente.php” yejecutarlo. Este es el punto de entrada del componente. Creamos el fichero

 admin.peliculas.php.

Por ahora solo estamos creando la estructura del componente. Lo siguiente es crear el

archivo  controller.php , y de momento también lo dejaremos en blanco. Ahora

Page 6: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 6/45

 

Página 6

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

necesitamos crear los directorios en los que ubicaremos nuestros Modelos, Vistas yControladores.

Creamos los siguientes directorios:

•  assets. Directorio donde alojaremos los archivosauxiliares de css, js, imágenes, etc.…

o  css : Directorio para los csso   js : Directorio para los archivos de javascripto  img : Directorio para las imágenes

•  controllers. Directorio donde alojaremos los archivos para cada controlador.

•  helper. Directorio donde alojaremos archivos de clase para la ayuda en el desarrollo de nuestro componentes,como por ejemplo router.php

•  models: Directorio donde alojaremos los archivos paracada modelo.

•  tables: Directorio donde alojaremos los archivos dedefinición de las tablas de la base de datos

•  views: Directorio donde alojaremos las subcarpetas para cada una de nuestras vistas. Para nuestro ejemplocrearemos las subcarpetas:

o  generos. Directorio para la vista de géneros.  tmpl. Directorio para los templates de la vista listado i

formulario.o  imagehandler. Directorio para la vista de la gestión de imágenes.

  tmpl. Directorio para los templates de la vista listado iformulario.o  películas. Directorio para la vista de las películas

  tmpl. Directorio para los templates de la vista listado iformulario.

o  settings. Directorio para la vista de las configuraciones  tmpl. Directorio para los templates de la vista listado i

formulario.

Cuando creamos las carpetas en Joomla!, debemos incluir una copia de index.html encada uno. El archivo index.html en blanco es un archivo HTML, lo que impide que los

usuarios puedan obtener de un listado de directorio.

Punto de entrada.

Cuando se carga el componente, se ejecuta el punto de entrada a este, admin.peliculas.php, y en el punto de entrada será donde nosotros crearemos unainstancia de nuestro componente.

Introduce el siguiente código en el punto de entrada de tu componente:

Page 7: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 7/45

 

Página 7

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

<?php

 // No permite el acceso directodefined( '_JEXEC' ) or die( 'Restricted access' );

 // Cargamos clases adicionales para la gestión de imágenesrequire_once (JPATH_COMPONENT_SITE . DS . 'helpers' . DS . 'image.class.php' );require_once (JPATH_COMPONENT_ADMINISTRATOR . DS . 'helper' . DS .'peliculas.config.class.php' );

 // Variable global de configuración del componenteglobal $Peliculas_Config;$Peliculas_Config = new PeliculasConfig();$Peliculas_Config->loadconfig();

 // Añadimos el path del directorio de las tablas en el array de búsquedas del joomlaJTable::addIncludePath(JPATH_COMPONENT.DS.'tables');

 // Cargamos el controlador base i la clase base de las vistasrequire_once (JPATH_COMPONENT.DS.'base_controller.php');require_once (JPATH_COMPONENT.DS.'base_view.php');

 //Si viene en la petición, se importa el controlador específico //El controlador específico hereda del controlador base, por eso es necesario //importar también el baseif ( $controller = JRequest::getWord('controller') ) {

$path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';if  (file_exists($path)) {

require_once $path;

} else {$controller = '';

}}

 // Creamos nuestro propio controlador$classname = 'PeliculasController'.$controller;$controller = new $classname( );

 // Ejecutamos la tarea$controller->execute( JRequest::getWord('task'));$controller->redirect();

?>

Vamos a comentar el siguiente código paso a paso:

La primera línea comprueba si esta definida la variable “_JEXEC”, y si no esta definidase muestra un mensaje de error por pantalla mediante la función “die”. Esto es unamedida de seguridad que incluye el marco de trabajo Joomla! y que es recomendableusar en todos nuestros archivos .php que tengamos en el sitio, y que evitara que la genteacceda a las paginas directamente sin hacer antes las comprobaciones de seguridad quelleva incluida Joomla!

Page 8: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 8/45

 

Página 8

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Seguidamente se importan los archivos 'image.class.php' y 'peliculas.config.class.php' que contienen las configuraciones de nuestro controlador.

JPATH_COMPONENT y DS son constantes que define el marco de trabajo de Joomla!

y que contienen el path al componente en el sistema y el separador de directoriosadecuado para el sistema que se este utilizando, “\” para Windows y “/” para sistemasUnix. Utilizar estas constantes nos facilitara el trabajo más adelante y hará nuestrasaplicaciones portables e independientes de la plataforma donde se estén utilizando.

Nombre DescripciónDS Separador de directorio (/)JPATH_ADMINISTRATOR Path del dir. de administración

(/joomla/administrator)JPATH_BASE Path de entrada del directorio base (/joomla)JPATH_CACHE Path del Cache (/joomla/cache)JPATH_COMPONENT Path del Component

(/joomla/components/com_peliculas)JPATH_COMPONENT_ADMINISTRATOR Path del directorio backend del Componente

(/joomla/administrator/components/com_peliculas)

JPATH_COMPONENT_SITE Path del directorio frontend del Componente(/joomla/components/com_peliculas)

JPATH_CONFIGURATION Path de las configuraciones (/joomla)JPATH_INSTALLATION Path de la Instalación (/joomla/installation)JPATH_LIBRARIES Path de las Librerias (/joomla/libraries)JPATH_PLUGINS Path de los Plugins (/joomla/plugins)JPATH_ROOT Path del directorio de entrada del frontend

(/joomla)JPATH_SITE Path del directorio público (/joomla)JPATH_THEMES Path del directorio de templates

(/joomla/templates)

El archivo 'image.class.php' se encuentra en el font-end, dentro de la carpeta 'helpers'

del componente, el archivo contiene las funciones para el tratamiento de las imágenes.El archivo 'peliculas.config.class.php'  se encuentra en la parte administrativa (Back-end) y contiene la clase que tiene las configuraciones de nuestro componente. Comovemos en el ejemplo automáticamente después de importar el archivo creamos unavariable publica $Peliculas_Config, que será visible desde todo nuestrocomponente con la configuración de la aplicación.

Añadimos el path del directorio de las tablas en el array de búsquedas del joomla, deesta manera cuando tengamos que hacer referencia a una tabla, el joomla ya sabrá dedonde la tiene que cargar.

Seguidamente se importa el fichero 'base_controller.php'  donde crearemos nuestraclase base que contendrá el controlador. Todos los controladores que generemos a partirde ahora lo heredaremos de este archivo.

Page 9: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 9/45

 

Página 9

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

<?php // No permitimos el acceso directodefined('_JEXEC') or die();

 // Importamos el controlador de Joomla jimport('joomla.application.component.controller');

 // Iniciamos nuestro propio controlador 'PeliculasController'class PeliculasController extends JController {

function display() {parent::display();

}}?> 

El siguiente archivo 'base_view.php'  lo utilizaremos para generar la clase base paratodas las vistas que generemos a partir de ahora lo heredaremos de este archivo.

<?php // No permite el acceso directodefined( '_JEXEC' ) or die( 'Restricted access' );

 // Cargamos el componente base de vistas jimport( 'joomla.application.component.view' );

class PeliculasView extends JView {

function DisplayCss() {$document = & JFactory::getDocument();$document->addStyleSheet(

'components/com_peliculas/assets/css/peliculasbackend.css' );}

function Displayfooter() {echo '<center><a href="http://www.cesigrup.com" target="_blank">CESI

Informatica i comunicacions</a></center>';}

}?> 

De esta manera siempre que tengamos una vista podremos lanzar la función “$this->Displayfooter()” y nos mostrara un pie de pagina uniforme para todas las vistas.

Después de importar el controlador, se comprueba si existe el parámetro “controller” en la query string, y si existe establece la variable path aJPATH_COMPONENT/controllers/$controller.php, para luego hacer un require_oncede path, e importar el controlador que se especifica en la petición y que se sitúa en lacarpeta controllers .

Page 10: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 10/45

 

Página 10

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Después de importar el fichero correspondiente a nuestro controlador, lo instanciamos yejecutamos el método execute del controlador, y le pasamos como parámetro un string que contiene el valor del parámetro task  que hayamos establecido en la query string.

Después de esto se ejecuta el metodo redirect() del controlador, que redigirá el flujo del programa a la vista adecuada.

Géneros. 1er Contacto

Empezaremos con nuestro primer contacto en el modelo MVC.

El Controlador.

Lo primero que necesitamos es un controlador para nuestra vista géneros, creamos en lacarpeta controllers, un archivo con nombre generos.php , dentro de este archivo

crearemos la clase que contiene la lógica de negocio de la aplicación para el sistema degeneros.

<?php /** * @package PELICULAS * @version 1.5.0 * @copyright Copyright (C) 2008 CESI Informatica i comunicions. All rights reserved.  * See COPYRIGHT.php for copyright notices and details. */  

// No permite el acceso directo def i ned(   ' _J EXEC'   )   or di e(   ' Rest r i cted access'   ) ;

// Importamos el controlador de Joomla  j i mport ( ' j ooml a. appl i cat i on. component . cont r ol l er ' ) ;

class  Pel i cul asCont r ol l er Gener os ext ends Pel i cul asCont r ol l er{ 

/** * Constructor  */  function  __const r uct ( )  { 

parent : : __const r uct ( ) ;

// Register Extra task $t hi s- >r egi st er Task(   ' add'   , ' edi t '   ) ;$t hi s- >r egi st er Task(   ' appl y' , ' save'   ) ;

/** 

* Lógica para guardar los datos * * @access public * @return void  */  function  save( )  { 

// Comprueba del request la clave de falsificación  J Request : : checkToken( )   or di e(   ' I nval i d Token'   ) ;

$t ask  = J Request: : getVar ( ' t ask' ) ;

// Recuperamos el post y lo saneamos si fuera necesario $post   = J Request: : get (   ' post '   ) ;

$model   = $thi s- >get Model ( ' generos' ) ;

i f   ( $returni d  = $model - >store( $post ) )   { 

Page 11: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 11/45

 

Página 11

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

swi t ch  ( $t ask)  { 

case  ' appl y'   :$l i nk  =

' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os&cont r ol l er=gener os&t ask=edi t &ci d[ ] =' . $returni d;break;

default  :$l i nk  = ' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os' ;break;

} $msg  = J Text : : _ (   ' GENERO GUARDADO'   ) ;

$cache  = &J Factory:: getCache( ' com_pel i cul as' ) ;$cache- >cl ean( ) ;

}  el se  { 

$msg  = ' ' ;$l i nk  = ' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os' ;

$model - >checki n( ) ;

$t hi s- >set Redi r ect ( $l i nk, $msg) ;} 

/** * Logica para publicar el genero * * @access public * @return void  */  function  publ i sh( )  { 

$ci d  = J Request: : getVar (   ' ci d' , array( 0) , ' post' , ' arr ay'   ) ;

i f   ( ! i s_arr ay(   $ci d  )   | | count (   $ci d  )   < 1)   {  J Er r or : : rai seErr or ( 500, J Text : : _ (   ' Sel ecci one un i t em a publ i car '   )   ) ;

$model   = $thi s- >get Model ( ' generos' ) ;

i f ( ! $model - >publ i sh( $ci d, 1) )   { echo  "<scr i pt> al er t ( ' " . $model - >get Er r or( ) . " ' ) ; wi ndow. hi story. go(- 1);

</ scr i pt >\n" ;} 

$t otal   = count (   $ci d  ) ;$msg  = $t otal . ' ' . J Text : : _ (   ' GENERO PUBLI CADO' ) ;

$t hi s- >set Redi r ect (   ' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os' , $msg  ) ;} 

/** * Logica para despublicar un Genero * * @access public * @return void  */  function  unpubl i sh( )  { 

$ci d  = J Request: : getVar (   ' ci d' , array( 0) , ' post' , ' arr ay'   ) ;

i f   ( ! i s_arr ay(   $ci d  )   | | count (   $ci d  )   < 1)   {  J Er r or : : r ai seErr or ( 500, J Text : : _ (   ' Sel ecci one un i t empar a despubl i car '   )   ) ;

$model   = $thi s- >get Model ( ' generos' ) ;

i f ( ! $model - >publ i sh( $ci d, 0) )   { echo  "<scr i pt> al er t ( ' " . $model - >getErr or( ) . " ' ) ; wi ndow. hi story. go(- 1) ;

</ scr i pt >\n" ;} 

Page 12: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 12/45

 

Página 12

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

$t otal   = count (   $ci d  ) ;$msg  = $t otal . ' ' . J Text : : _ (   ' GENERO DESPUBLI CADO' ) ;

$t hi s- >set Redi r ect (   ' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os' , $msg  ) ;} 

/** * Logic to orderup a category  

* * @access public * @return void  */  function  or derup( )  { 

$model   = $thi s- >get Model ( ' generos' ) ;$model - >move( - 1) ;

$t hi s- >set Redi r ect (   ' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os' ) ;} 

/** * Logic to orderdown a category  * 

* @access public * @return void  */  function  or derdown( )  { 

$model   = $thi s- >get Model ( ' generos' ) ;$model - >move( 1) ;

$t hi s- >set Redi r ect (   ' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os' ) ;} 

/** * Logic to mass ordering categories * * @access public * @return void  

*/  function  saveorder ( )  { 

$ci d  = J Request: : getVar (   ' ci d' , array( 0) , ' post' , ' arr ay'   ) ;$order   = J Request: : getVar (   ' order' , array( 0) , ' post ' , ' arr ay'   ) ;

$model   = $thi s- >get Model ( ' generos' ) ;$model - >saveorder ( $ci d, $order ) ;

$msg  = ' New order i ng saved' ;$t hi s- >set Redi r ect (   ' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os' , $msg  ) ;

/** * Logic to delete categories * * @access public * @return void  */  function  remove( )  { 

gl obal   $opt i on;

$ci d  = J Request: : getVar (   ' ci d' , array( 0) , ' post' , ' arr ay'   ) ;

i f   ( ! i s_arr ay(   $ci d  )   | | count (   $ci d  )   < 1)   {  J Er r or : : rai seErr or ( 500, J Text : : _ (   ' Sel ect an i t em t o del et e'   )   ) ;

$model   = $thi s- >get Model ( ' generos' ) ;

$msg  = $model - >del et e( $ci d) ;

$cache  = &J Factory:: getCache( ' com_pel i cul as' ) ;$cache- >cl ean( ) ;

Page 13: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 13/45

 

Página 13

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

$t hi s- >set Redi r ect (   ' i ndex. php?opt i on=' . $opt i on  . ' &vi ew=gener os' , $msg  ) ;} 

/** * logic for cancel an action * * @access public

 * @return void  */  function  cancel ( )  { 

// Check for request forgeries  J Request : : checkToken( )   or di e(   ' I nval i d Token'   ) ;

$cat egory  = & J Tabl e: : get I nst ance( ' pel i cul as_gener os' , ' ' ) ;$cat egory- >bi nd( J Request : : get ( ' post ' ) ) ;$cat egory- >checki n( ) ;

$t hi s- >set Redi r ect (   ' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os'   ) ;} 

/** * Logic to create the view for the edit categoryscreen 

* * @access public * @return void  * @since 0.9 */  function  edi t (   )  { 

 J Request : : set Var (   ' vi ew' , ' generos'   ) ; J Request : : set Var (   ' hi demai nmenu' , 1  ) ; J Request : : set Var (   ' l ayout ' , ' f or m'   ) ;

$model   = $thi s- >get Model ( ' generos' ) ;$user   =& J Fact ory: : getUser ( ) ;

// Error if checkedout by another administrator  i f   ( $model - >i sCheckedOut (   $user - >get( ' i d' )   ) )   { 

$t hi s- >set Redi r ect (   ' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os' , J Text : : _ (   ' EDI TED BY ANOTHER ADMI N'   )   ) ;} 

$model - >checkout ( ) ;

parent : : di spl ay( ) ;} 

} ?> 

Como siempre la primera línea hace una comprobación para ver si se esta accediendodesde Joomla! o se esta haciendo un acceso directo, esta medida de seguridad debe de

estar siempre presente.

La segunda línea se utiliza la función jimport del api de Joomla!, esta función importa laclase abstracta para el controllador.

Observa que la nomenclatura sigue la norma descrita:

 Nombre del compoenente – Controller – Nombre del controlador  

El controlador se mantiene a la escucha de todas las peticiones, se registran 2 tareasadicionales a las programadas por la clase base de joomla, la tarea “add” que ejecutara

la función de “edit”, y la tarea “apply” que ejecutara la función “save”. Para las demásfunciones estándar se ejecuta la lógica de la aplicación, para cada caso.

Page 14: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 14/45

 

Página 14

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

La función save() comprueba si la variable del formulario Token. Recoge los datos del post y carga el modelo géneros. A continuación llamamos la función del modelo“store” que nos almacenara los datos del post. El modelo nos devolverá la id donde ha

guardado los datos y solo tenemos que comprobar si la tarea que teníamos que realizarera la de guardar o aplicar, para redireccionar a la vista correspondiente.

La función publish() y unpublish() realizan la acción de publicar y despublicar unelemento, la funcionalidad de las funciones es la misma. Se recoge el array de ID a

 publicar o despublicar, se carga el modelo y se pasa al modelo el array de ID para publicar y despublicar y se redirecciona a la vista.

La Vista.

Después de crear nuestro controlador, vamos a crear nuestra vista.Vamos al fichero view.html.php en el directorio views/generos.

<?php /** * @package PELICULAS * @version 1.5.0 * @copyright Copyright (C) 2008 CESI Informatica i comunicions. All rights reserved.  * See COPYRIGHT.php for copyright notices and details. */  

// No permite el acceso directo ef i ned(   ' _J EXEC'   )   or di e(   ' Rest r i cted access'   ) ;

// Importamos el controlador de Joomla  j i mport (   ' j ooml a. appl i cat i on. component . vi ew' ) ;

Como siempre la primera línea hace una comprobación para ver si se esta accediendodesde Joomla! o se esta haciendo un acceso directo, esta medida de seguridad debe deestar siempre presente.

La segunda línea se utiliza la función jimport del api de Joomla!, esta función importa laclase abstracta para la vista.

class  Pel i cul asVi ewGeneros ext ends Pel i cul asVi ew { 

Observa la definición de la clase. Como se puede observar tiene un nombre un poco peculiar, establecido por el marco de trabajo Joomla!, y que consiste en poner primeroel nombre del componente que lo llama, seguido de view y seguido del nombre de lavista:

 NombreComponenteViewNombreVista

Esta norma es la que se sigue también para el modelo.

Page 15: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 15/45

 

Página 15

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Lo que vamos a hacer en este caso es sobrescribir el método display y utilizar assignRef   para crear dos “layout”. El del listado y el del formulario.

function  di spl ay( $tpl   = null)  

{ gl obal   $mai nf r ame, $opt i on;

//initialise variables $user   = & J Factory: : getUser ( ) ;$db  = & J Factory: : get DBO( ) ;$document  = & J Factory: : get Document ( ) ;

i f ( $thi s- >get Layout ( )   == ' f or m' )   { $t hi s- >_di spl ayFor m( $tpl ) ;return;

Lo primero que hacemos es comprovar el “layout”, si es “form” lo pasamos a la funcionque nos mostrara el formulario.

 J HTML: : _ ( ' behavi or. tool t i p' ) ;

//get vars $f i l ter_order   = $mai nf r ame- >get User Stat eFromRequest (  

$opt i on. ' . generos. f i l ter_order' , ' f i l t er _order ' , ' g. or deri ng' , ' cmd'   ) ;$f i l ter_order_Di r   = $mai nf r ame- >get User Stat eFromRequest (  

$opt i on. ' . generos. f i l ter_order_Di r ' , ' f i l te r_order_Di r ' , ' ' , ' word'   ) ;$f i l t er _ state  = $mai nf r ame- >get User Stat eFromRequest (  

$opt i on. ' . generos. f i l ter_s tate ' , ' f i l t er _ st at e' , ' * ' , ' word'   ) ;

$search  = $mai nf r ame- >get User Stat eFromRequest (   $opt i on. ' . gener os. sear ch' ,' sear ch' , ' ' , ' s t r i ng'   ) ;

$search  = $db- >get Escaped(   t r i m( J St r i ng: : st r t ol ower (   $search  )   )   ) ;

Obtenemos los valores por defecto del filtrado de datos, asi como el orden y la direccióndel orden. Para obtener estos datos utilizamos la classe global del framework principaldel joomla “mainframe”, con la funcion “getUserStateFromRequest”, esta funcionobtiene el valor de la variable de estado (State) del usuario. El método se comprueba en

 primer lugar la variable especificada en el “request” para ver si un nuevo valor ha sidoespecificado. Si ha sido, entonces el valor de la variable de estado (State) se actualiza yel nuevo valor es devuelto. Si no fuera así, entonces se devuelve el valor almacenado sedevuelve. Si no hay ningún valor especificado en el “request” y existe el valor en lavariable “session”, entonces el valor por defecto es el devuelto.

//create the toolbar   J Tool Bar Hel per: : t i t l e(   J Text: : _ (   ' GENEROS'   ) , ' gener os'   ) ; J Tool Bar Hel per: : publ i shLi st ( ) ; J Tool Bar Hel per: : spacer ( ) ; J Tool Bar Hel per: : unpubl i shLi st ( ) ; J Tool Bar Hel per: : spacer ( ) ; J Tool Bar Hel per: : addNew( ) ; J Tool Bar Hel per: : spacer ( ) ; J Tool Bar Hel per: : edi tL i s t ( ) ; J Tool Bar Hel per: : spacer ( ) ; J Tool Bar Hel per: : del et eLi st ( ) ; J Tool Bar Hel per: : spacer ( ) ; J Tool Bar Hel per: : hel p(   ' Pel i cul as. l i stgeneros' , true  ) ;  

Mediante este sistema, contruimos nuestro titulo y barra de acciones o toolbar.

Page 16: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 16/45

 

Página 16

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

//Get data from the model $r ows  = & $thi s- >get(   ' Data' ) ;

$pageNav  = & $t hi s- >get(   ' Pagi nat i on'   ) ;  

Ahora consultaremos al modelo y obtendremos los datos a listar. Recordemos queJoomla busca un modelo con nombre PeliculasModelGeneros  debido a que no se le

 pasa ningún parámetro a la función getModel() y lo instancia. Si le hubiéramos pasadoel nombre de algún modelo como parámetro, nos hubiera devuelto el modeloespecificado.

Una vez tenemos el modelo ejecutamos el método getData  de este, que devuelve unarray con los datos a listar. Tambien ejecutamos el método getPagination para obtenerel objecto  pageNav  para la paginación. Ambas variables se le pasaran al layout porreferencia mediante assignRef .

Pero antes contruimos una array en la variable lists para poner todos aquellos datos quenecesitemos en la vista como por ejemplo, el texto a buscar, el orden, etc…

//publish unpublished filter  $l i st s[ ' s tate ' ]   = J HTML: : _ ( ' gr i d. s tate ' , $f i l t er _ state  ) ;// search filter  $l i st s[ ' sear ch' ] = $search;

// table ordering  $l i st s[ ' or der _Di r' ]   = $f i l ter_order_Di r ;$l i st s[ ' or der ' ]   = $f i l t er_order ;

$order i ng  = ( $l i st s[ ' or der' ]   == ' g. orderi ng' ) ;  

Y ahora si, passamos todos los datos al layout mediante assignRef .

//assign data to template $t hi s- >assi gnRef ( ' l i s t s '   , $l i st s) ;$t hi s- >assi gnRef ( ' rows' , $rows) ;$t hi s- >assi gnRef ( ' pageNav' , $pageNav) ;$t hi s- >assi gnRef ( ' orderi ng' , $order i ng) ;$t hi s- >assi gnRef ( ' user ' , $user ) ;

parent : : di spl ay( $tpl ) ;} 

Finalmente se ejecuta el método display  de la clase padre, al cual se le puede pasarcomo parámetro el nombre del layout que se quiere visualizar, en nuestro caso no le

 pasaremos ninguno y visualizará el layout con nombre default.php . 

Pero antes de empezar con el layout vamos a terminar con la vista para el caso en quetengamos que cargar el formulario de datos. Para ello contruimos la siguiente funcion.

function  _di spl ayFor m( $tpl   = null)  { 

gl obal   $mai nf r ame;

//Load pane behavior   j i mport ( ' j ooml a. ht ml . pane' ) ;

Page 17: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 17/45

 

Página 17

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

// Initialize variables $document  = & J Factory: : get Document ( ) ;$user   = & J Factory: : getUser ( ) ;$ur i   = & J Factory: : get URI ( ) ;$pane  = & J Pane: : getI nst ance( ' s l i ders ' ) ;

$model   = & $t hi s- >get Model ( ' generos' ) ;$r ow  = & $t hi s- >get( ' I t em' ) ;  

Cargamos el modelo y lo consultamos con la funcion getItem para obtener el objectocon los datos que mostraremos, en nuestro caso la variable $row  contine el genero amodificar.

//create the toolbar  i f   (   $r ow- >i d  )   { 

 J Tool Bar Hel per: : t i t l e(   J Text : : _ (   ' EDI T GENERO'   ) , ' geenr oedi t '   ) ;}  el se  { 

 J Tool Bar Hel per: : t i t l e(   J Text : : _ (   ' ADD GENERO'   ) , ' generoedi t '   ) ;} 

Empezamos a montar nuestra barra de tareas, y comprovamos el valor del $row-id, sitiene cualquier valor, quiere decir que el modelo nos ha cargado los datos y estamosmodificando-los, si por el contrario no tiene valor o es 0 quiere decir que no hay dichogenero y estamos dando de alta uno nuevo.

 J Tool Bar Hel per: : appl y( ) ; J Tool Bar Hel per: : spacer ( ) ; J Tool Bar Hel per: : save( ) ; J Tool Bar Hel per: : spacer ( ) ; J Tool Bar Hel per: : medi a_manager ( ) ; J Tool Bar Hel per: : spacer ( ) ;

 J Tool Bar Hel per: : cancel ( ) ;  

Cargamos el resto de la barra de tareas.

// fail if checked out not by 'me' i f   ( $r ow- >i d)   { 

i f   ( $model - >i sCheckedOut (   $user - >get( ' i d' )   ) )   {  J Er r or : : r ai seWarni ng(   ' SOME_ERROR_CODE' , $r ow- >cat name. '

' . J Text : : _ (   ' EDI TED BY ANOTHER ADMI N'   ) ) ;$mai nf r ame- >r edi rect (  

' i ndex. php?opt i on=com_pel i cul as&vi ew=gener os'   ) ;} 

Si estamos modificando el genero, vamos a consultar al modelo si podemos hacer-lo,mediante el metodo “isCheckedOut ”, este metodo, valida que nadie mas estamodificando este registro y lo bloquea para que los demas sepan que el usuario actual loesta modificando.

// Get the lists // build the html select list for ordering  $quer y  = ' SELECT order i ng AS val ue, nombre AS t ext'  . ' FROM #__pel i cul as_generos'  . ' ORDER BY orderi ng'  ;i f ( $row- >i d)   { 

$l i st s[ ' order i ng' ]   = J HTML: : _ ( ' l i s t . spec i f i corder i ng' , $row, $r ow- >i d, $quer y  ) ;}  el se  { 

$l i st s[ ' order i ng' ]   = J HTML: : _ ( ' l i s t . spec i f i corder i ng' , $row, ' ' , $quer y  ) ;} 

Page 18: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 18/45

 

Página 18

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

$l i st s[ ' publ i shed' ]   = J HTML: : _ ( ' sel ect. bool eanl i st ' , ' publ i shed' ,' cl ass="i nput box"' , $row- >publ i shed  ) ;

// Load the JEditor object $edi t or  =& J Factor y: : getEdi t or( ) ;  

Cargamos el resto de variables en el array de variables $list , que necesitamos para lamodificación.La funcion JHTML::_(‘list.specificordening’) nos montará automáticamente un listboxcon las ordenaciones según la consulta SQL que le passemos, pero esta consulta SQLdebe de devolver 2 valores el “value” y el “text” para que monte bien el listbox.

La funcion JHTML::_(‘select.booleanlist’) nos montará automáticamente un optiongroup para la selección de Si/No.

// Build the page title string  

$t i t l e  = $row- >i d  ? J Text: : _ ( ' Edi t ' )   : J Text : : _ ( ' New' ) ;

// Set page title 

$document - >setTi t l e( $t i t l e) ;  

Modificamos el titulo de la página.

$t hi s- >assi gn( ' act i on' , $ur i - >t oSt r i ng( ) ) ;

$t hi s- >assi gnRef ( ' r ow' , $r ow) ;$t hi s- >assi gnRef ( ' l i s t s ' , $l i st s) ;$t hi s- >assi gnRef ( ' user' , $user ) ;$t hi s- >assi gnRef ( ' pane' , $pane) ;

parent : : di spl ay( $tpl ) ;} } 

Passamos todos los datos al layout mediante assignRef .

Y finalmente se ejecuta el método display de la clase padre, al cual se le puede pasarcomo parámetro el nombre del layout que se quiere visualizar, en nuestro caso no le

 pasaremos ninguno y visualizará el layout con nombre form.php . 

Layout.

Ahora vamos a ver los layouts a las que llama la vista. Un layout es la manera como senos presentan los datos. La vista genera dos maneras de presentar los datos, la rimeradefault, que es un listado de los datos, en este caso es el listado de los generos. Y laostra vista es el formulario que nos permitira añadir o modificar el genero.

Default. Vamos al fichero default.php en el directorio views/generos/tmpl.

<?php 

def i ned( ' _J EXEC' )   or di e( ' Rest r i cted access' ) ;

?> 

Page 19: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 19/45

 

Página 19

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Como siempre la primera línea hace una comprobación para ver si se esta accediendodesde Joomla! o se esta haciendo un acceso directo, esta medida de seguridad debe deestar siempre presente.

<f or m acti on="i ndex. php"   met hod="post "   name="admi nFor m"><t abl e cel l paddi ng="4"  cel l spaci ng="0"  bor der ="0"  wi dt h="100%"   class="admi nl i st" ><t r ><t d><i mg sr c="component s/ com_pel i cul as/ assets/ i mg/ LogoCesi . png"   hei ght ="97"   wi dt h="233"  al t ="CESII nf ormati ca i comuni caci ons. "   al i gn=" l ef t "   / ></ t d><t d class="sect i onname"  al i gn="r i ght"   wi dt h="100%"><f ont st yl e="col or: #C24733; f ont - si ze : 18px;f ont- wei ght : bol d; text- al i gn: l ef t ; ">: : <?php  echo  J Text : : _ (   ' GENEROS'   ) ; ?>: : </ f ont ></ t d></ t r></ t abl e> 

Básicamente el listado esta dentro de un formulario que continene una tabla.

<t abl e class="admi nf or m"><t r ><t d wi dth="100%">  <?php  echo  J Text : : _ (   ' SEARCH'   ) ; ?> 

<i nput t ype="text"   name="sear ch"   i d="s ear ch"   val ue="<?php echo $t hi s- >l i st s[ ' sear ch' ] ; ?>"  class="t ext_area"   onChange="document . admi nFor m. submi t ( ) ; "   / >  <butt on oncl i ck="t hi s. f orm. submi t ( ) ; "><?php echo  J Text : : _ (   ' Go'   ) ; ?></ but t on>  <butt on oncl i ck="t hi s. f orm. get El ement ByI d( ' search' ) . val ue=' ' ; t hi s. f orm. submi t ( ) ; "><?php echo  J Text : : _ (   ' Reset '   ) ; ?> </ but t on>  </ t d>  <t d nowr ap="nowr ap"><?php echo  $thi s- >l i s t s[ ' s tate ' ] ; ?></ t d></ t r></ t abl e> 

Mostramos una tabla de cabecera con el campo “search” para poder buscar y una lista

que previamente hemos preparado en la vista, para filtro de datos.

<t abl e class="admi nl i st "   cel l spaci ng="1"><t head><t r >  <t h wi dth="5"><?php echo  J Text : : _ (   ' Num'   ) ; ?></ t h>  <t h wi dth="5"><i nput t ype="checkbox"  name="t oggl e"   val ue=""   onCl i ck="checkAl l ( <?php echocount ( $t hi s- >r ows ) ; ?>) ; "   / ></ t h>  <t h class=" t i t l e"><?php echo  J HTML: : _ ( ' gr i d. sor t ' , ' GENERO' , ' nombre' , $t hi s->l i s t s[ ' or der _Di r' ] , $thi s- >l i s t s[ ' order ' ]   ) ; ?></ t h>  <t h wi dth="1%"  nowr ap="nowr ap"><?php echo  J Text: : _ (   ' PUBLI SHED'   ) ; ?></ t h>  <t h wi dth="80"><?php echo  J HTML: : _ ( ' gr i d. sor t ' , ' REORDER' , ' g. orderi ng' , $thi s->l i s t s[ ' or der _Di r' ] , $thi s- >l i s t s[ ' order ' ]   ) ; ?></ t h>  <t h wi dth="1%"><?php echo  J HTML: : _ ( ' gr i d. order' , $t hi s- >r ows, ' f i l esave. png' , ' saveorder cat '  ) ; ?></ t h>

  <t h wi dth="1%"  nowr ap="nowr ap"><?php echo  J HTML: : _ ( ' gr i d. sor t ' , ' I D' , ' g. i d' , $thi s->l i s t s[ ' or der _Di r' ] , $thi s- >l i s t s[ ' order ' ]   ) ; ?></ t h></ t r></ t head> 

Preparamos la cabecera de las columnas a listar. Utilizaremos la funcionJHTML::_(‘gris.sort’ para que el propio joomla genere una cabecera que nos permitiraordenar los datos, y mantendra el orden ascendente y descendente.

<t f oot >  <t r >  <t d col span="7"><?php echo  $t hi s- >pageNav- >get Li st Footer( ) ; ?></ t d>  </ t r></ t f oot > 

Page 20: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 20/45

 

Página 20

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Para el pie del listado mostraremos el sistema de paginación proporcionado en lavariable que nos facilita la vista.

<t body>  <?php $k  = 0;f or   ( $i =0, $n=count ( $t hi s- >r ows) ; $i   < $n; $i ++)   { 

$r ow  = $thi s- >r ows[ $i ] ;$l i nk  =

' i ndex. php?opt i on=com_pel i cul as&amp; cont r ol l er=gener os&amp; t ask=edi t &amp; ci d[ ] =' . $row- >i d;$publ i shed  = J HTML: : _ ( ' gri d. publ i shed' , $r ow, $i   ) ;$checked  = J HTML: : _ ( ' gr i d. checkedout ' , $row, $i   ) ;

?>

<t r class="<?php echo "r ow$k"; ?>">  <t d><?php echo  $thi s- >pageNav- >get RowOf f set (   $i   ) ; ?></ t d>  <t d wi dth="7"><?php echo  $checked; ?></ t d>  <t d al i gn=" l ef t ">  <?php 

i f   (   $r ow- >checked_out   && (   $row- >checked_out   ! = $thi s- >user - >get( ' i d' )   )   )   { echo  ht ml speci al chars ( $r ow- >nombr e, ENT_QUOTES, ' UTF- 8' ) ;echo  " ( " . ht ml speci al chars( $row- >al i as, ENT_QUOTES, ' UTF- 8' )   . " ) " ;

}  el se  { ?> <span class="edi t l i nkt i p hasTi p"   t i t l e="<?php echo J Text : : _( ' EDI T GENERO'

) ; ?>: : <?php echo $r ow- >nombre; ?>">  <a href ="<?php echo $l i nk; ?>">  <?php  echo  ht ml speci al chars( $row- >nombr e, ENT_QUOTES, ' UTF- 8' ) ; ?> 

<?php  echo  " ( " . ht ml speci al chars( $r ow- >al i as, ENT_QUOTES, ' UTF- 8' ) . " ) " ; ?> </ a></ span>

  <?php } ?> </ t d>

  <t d al i gn="cent er ">  <?php  echo  $publ i shed; ?> 

</ t d>

  <t d class="order"   col span="2">  <span><?php echo  $thi s- >pageNav- >orderUpI con(   $i , true, ' order up' , ' MoveUp' , $thi s- >order i ng  ) ; ?></ span> 

<span><?php echo  $thi s- >pageNav- >or der DownI con(   $i , $n, true, ' order down' ,' Move Down' , $thi s- >order i ng  ) ; ?></ span> 

<?php  $di sabl ed  = $thi s- >order i ng  ? ' '   : ' "di sabl ed=di sabl ed"' ; ?> 

<i nput t ype="text"   name="order[]"   s i ze="5"  val ue="<?php echo $r ow->order i ng; ?>"  <?php  echo  $di sabl ed; ?>  class="t ext_area"   styl e="t ext - al i gn: cent er"   / >  </ t d>  <t d al i gn="cent er "><?php echo  $row- >i d; ?></ t d>  </ t r>  <?php  $k  = 1  - $k; }  ?> </ t body> 

Para el cuerpo de la tabla preparamos la varibles para cada fila. Observemos que a lavarible $link le passamos el controlador, la tarea “task ” a realizar y el id de la lista.Mostramos cada columna, pero para la columna que contiene el link para editar primerocomprovamos el “checked_out ” para saber si podemos o no modificar el registro.

</ t abl e><p class="copyri ght ">  <?php  echo  $t hi s- >Di spl ayf oot er ( ) ; ?> </ p> <i nput t ype="hi dden"   name="boxchecked"   val ue="0"  / ><i nput t ype="hi dden"   name="opt i on"   val ue="com_pel i cul as"  / ><i nput t ype="hi dden"   name="contr ol l er"   val ue="gener os"   / ><i nput t ype="hi dden"   name="vi ew"   val ue="gener os"   / ><i nput t ype="hi dden"   name="task"   val ue=""   / >

Page 21: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 21/45

 

Página 21

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

<i nput t ype="hi dden"   name="f i l te r_order"   val ue="<?php echo $t hi s- >l i st s[ ' or der ' ] ; ?>"   / ><i nput t ype="hi dden"   name="f i l te r_order_Di r"   val ue=""   / ></form> 

Acavamos la tabla y passamos las variables como hidden (ocultas) que necesitamos, el

controlador, la vista, la tarea y los filtros para la ordenación.

Layout. Form.

Vamos al fichero form.php en el directorio views/generos/tmpl.

<?php /** * @package PELICULAS * @version 1.5.0 * @copyright Copyright (C) 2008 CESI Informatica i comunicions. All rights reserved.  * See COPYRIGHT.php for copyright notices and details. */  

def i ned( ' _J EXEC' )   or di e( ' Rest r i cted access' ) ; ?> 

Como siempre la primera línea hace una comprobación para ver si se esta accediendodesde Joomla! o se esta haciendo un acceso directo, esta medida de seguridad debe deestar siempre presente.

 J HTML: : _ ( ' behavi or . t ool t i p' ) ; j i mpor t ( ' j ooml a. ut i l i t i es . date' ) ;

gl obal   $mai nf r ame;// Initialize variables $db  =& J Fact ory: : get DBO( ) ;$nul l Dat e  = $db- >get Nul l Dat e( ) ;?> 

Cargamos las librerias de fechas y de tooltip.Los tooltips son pequeños textos que aparecen cuando el usuario pasa el ratón sobrealgunos elementos. Este método crea un tooltip que aparece al pasar sobre una imagen.

<script language="j avascr i pt "   t ype="t ext / j avascr i pt ">function  submi t but t on( pr essbut t on)   { 

var  f orm = document . admi nForm;i f   ( pressbut t on == ' cancel ' )   { 

submi t f orm(   pr essbut t on ) ;return;

// do field validation i f   ( f or m. nombre. val ue == "") { 

al er t (   "<?php echo J Text : : _( ' ADD NAME GENERO' ) ; ?>"  ) ;}  el se  { 

submi t f orm(   pr essbut t on ) ;} 

} </script> 

Escribimos un codigo javascript para la validación del formulario, recordar que aunquetengamos codigo javascript para mostrar un mensaje utilizamos la funcionJText::_(‘mitexto’).

Page 22: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 22/45

 

Página 22

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Y empezamos con el formulario:

<f or m act i on=" i ndex. php"   met hod="post "   name="admi nFor m"  i d="admi nFor m"><t abl e cel l spaci ng="0"  cel l paddi ng="0"  border="0"  wi dt h="100%"><t r >

<t d><i mg sr c="component s/ com_pel i cul as/ assets/ i mg/ LogoCesi . png"   hei ght ="97" wi dt h="233"  al t ="CESI I nf or mat i ca i comuni caci ons. "   al i gn=" l ef t "   / ></ t d>

<t d class="sect i onname"  al i gn="r i ght "   wi dt h="100%"><f ont st yl e="col or :#C24733; f ont - si ze : 18px; f ont - wei ght : bol d; t ext - al i gn: l ef t ; "><?php echo  $t hi s->r ow- >i d  ? ' : : ' . J Text : : _ (   ' EDI T CATEGORY'   ) . ' : : '   : ' : : ' . J Text : : _ (   ' ADD CATEGORY'  ) . ' : : ' ; ?></ f ont >

</ t d></ t r ></ t abl e>

 Ponemos una pequeña cabecera que nos indicara cuando estamos modificando unregistro y cuando estamos añadiendo un dato nuevo.

<t abl e cel l spaci ng="0"  cel l paddi ng="0"  border="0"  wi dt h="100%"><t r >

<t d val i gn="t op"><f i el dset class="admi nf or m"><l egend><?php echo  J Text : : _ (   ' Detai l s '   ) ; ?></ l egend>

<t abl e class="admi nt abl e"><t r >

<t d class="key"><l abel f or ="Nombr e" >

<?php  echo  J Text : : _ (   ' Nombre'   ) ; ?>:</ l abel >

</ t d>

<t d><i nput class="text_area"  t ype="text"   name="nombr e"   i d="nombr e"  

val ue="<?php echo $t hi s- >r ow- >nombre; ?>"   s i ze="50"   maxl engt h="100"  t i t l e="<?php echo J Text : : _( ' TI PTI TLEFI ELD' ) ; ?>"  / >

</ t d></ t r >

<t r ><t d nowr ap="nowr ap"  class="key">

<l abel f or ="al i as"><?php  echo  J Text : : _ (   ' Al i as'   ) ; ?>:

</ l abel ></ t d><t d col span="2">

<i nput class="text_area"  t ype="text"   name="al i as"  i d="al i as" 

val ue="<?php echo $t hi s- >r ow- >al i as; ?>"   si ze="50"   maxl engt h="255"  t i t l e="<?php echo J Text : : _( ' TI PNAMEFI ELD' ) ; ?>"  / >

</ t d></ t r >

Como vemos para acceder al dato cargado utilizamos el $this->row->

<t r ><t d class="key">

<?php  echo  J Text : : _ (   ' Publ i shed'   ) ; ?>:</ t d>

<t d col span="2"><?php  echo  $t hi s- >l i s t s[ ' publ i shed' ] ; ?> </ t d>

Page 23: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 23/45

 

Página 23

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

</ t r ><t r >

<t d class="key"><l abel f or ="order i ng">

<?php  echo  J Text : : _ (   ' Or der i ng'   ) ; ?>:

</ l abel ></ t d><t d col span="2">

<?php  echo  $t hi s- >l i s t s[ ' or der i ng' ] ; ?> </ t d>

</ t r ></ t abl e>

  </ f i el dset ></ t d>

Asi mismo utilizamos el mismo sistema para mostrar los datos que previamente hemoscargado en la variable lists : $this->lists[‘mivariable’]

<t d val i gn="t op"   wi dth="320"  sty l e="paddi ng: 7px 0 0 5px"><t abl e wi dt h="100%"  sty l e="border : 1px dashed si l ver ; paddi ng: 5px; margi n- bot t om:10px; ">

<?php i f   (   $r ow- >i d  )   { ?> <t r ><t d>

<st r ong><?php echo  J Text : : _ (   ' Genero I D'   ) ; ?>: </ st r ong></ t d><t d>

<?php  echo  $r ow- >i d; ?> </ t d></ t r ><?php }  ?>

<t r ><t d><st r ong><?php echo  J Text : : _ (   ' Hi t s '   ) ; ?></ st r ong>

</ t d><t d><?php  echo  $r ow- >hi t s ; ?>

</ t d></ t r >

<t r ><t d><st r ong><?php echo  J Text : : _ (   ' Cr eat ed'   ) ; ?></ st r ong>

</ t d><t d><?php i f   (   $r ow- >cr eat ed  == $nul l Date  )   { 

echo  J Text : : _ (   ' New document '   ) ;}  el se  { 

echo  J HTML: : _ ( ' dat e' , $r ow- >creat ed,

 J Text : : _ ( ' DATE_FORMAT_LC2' )   ) ;} ?> 

</ t d></ t r >

<t r ><t d><st r ong><?php echo  J Text : : _ (   ' Modi f i ed'   ) ; ?></ st r ong>

</ t d><t d><?php i f   (   $r ow- >modi f i ed  == $nul l Dat e  )   { 

echo  J Text : : _ (   ' Not modi f i ed'   ) ;}  el se  { 

echo  J HTML: : _ ( ' dat e' , $r ow- >modi f i ed, J Text : : _ ( ' DATE_FORMAT_LC2' ) ) ;

} ?> </ t d></ t r >

Page 24: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 24/45

 

Página 24

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

</ t abl e>

</ t d></ t r ></ t abl e>

Utilizamos una segunda tabla a la derecha para mostrar los datos del documento, el Id sies una modificación, la fecha de creación, y la fecha de modificación.

 Nos fijamos que cuando trabajamos con fechas utilizamos la funcionJHTML::_(‘date’, mivariblefecha, formato)

Formatos de fecha:DATE_FORMAT_LC=%A, %d %B %YDATE_FORMAT_LC1=%A, %d %B %YDATE_FORMAT_LC2=%A, %d %B %Y %H:%M

DATE_FORMAT_LC3=%d %B %YDATE_FORMAT_LC4=%d.%m.%yDATE_FORMAT_JS1=y-m-d

<?php  echo  J HTML: : _ (   ' f orm. t oken'   ) ; ?> <i nput t ype="hi dden"   name="opt i on"   val ue="com_pel i cul as"   / ><i nput t ype="hi dden"   name=" i d"   val ue="<?php echo $t hi s- >r ow- >i d; ?>"   / ><i nput t ype="hi dden"   name="cont rol l er"   val ue="generos"   / ><i nput t ype="hi dden"   name="vi ew"   val ue="generos"   / ><i nput t ype="hi dden"   name="task"   val ue=""   / ></ f or m><p class="copyr i ght "><?php  echo  $t hi s- >Di spl ayf oot er ( ) ; ; ?></ p><?php //keep session alive while editing  

 J HTML: : _ ( ' behavi or . keepal i ve' ) ;?> 

Para asegurar una seguridad del formulario utilizamos la funcionJHTML::_(‘form.token’)  que se debe utilizar en conjuncion con elJRequest::checkToken() en el controlador.

Ponemos las variables que necesitamos en hidden, el nombre del componente, elcontrolador, la vista, la tarea, y el ID.

La funcion JHTML::_(‘behavior.keepalive’) añade las funciones javascript y el codigonecesario para las sesiones para la edición.

El Modelo.

El modelo contiene todo el código relacionado con el acceso a datos.

Recordamos las funciones que devemos implementar:

Vista generalgetData() : Devuelve un array con todos los datos a listar

getPagination() : Devuelve el objecto de paginación.

Page 25: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 25/45

 

Página 25

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Vista del formulariogetItem( ): Devulve el datos cargado en una variable.

Acciones generales desde el controladorpublish() : Publica o despublica el elemento.move() : Canvia el orden de un unico elemento arriba o abajosaveorder() : Guarda el orden de los ítems seleccionadosdelete() : Elimina un registro.checkout() : Bloquea un registro.checkin() : Desbloquea un registro.isCheckedOut() : Comprueba si el registro esta bloqueado.

Creamos al fichero generos.php en el directorio models.

<?php /** * @package PELICULAS * @version 1.5.0 * @copyright Copyright (C) 2008 CESI Informatica i comunicions. All rights reserved.  * See COPYRIGHT.php for copyright notices and details. */  

// No permite el acceso directo def i ned( ' _J EXEC' )   or di e( ' Rest r i cted access' ) ;

// Importamos el modelo de Joomla 

 j i mpor t ( ' j ooml a. appl i cati on. component . model ' ) ;

Como siempre la primera línea hace una comprobación para ver si se esta accediendodesde Joomla! o se esta haciendo un acceso directo, esta medida de seguridad debe deestar siempre presente.

La segunda línea se utiliza la función jimport del api de Joomla!, esta función importa laclase abstracta para el Modelo.

class  Pel i cul asModel Generos ext ends J model{ 

var  $_dat a  = null;var  $_t otal   = null;

var  $_pagi nati on  = null;var  $_ i d  = null;

/** * Constructor  */  function  __const r uct ( )  { 

par ent : : __const r uct ( ) ;

gl obal   $mai nf r ame, $opt i on;

$l i mi t   = $mai nf r ame- >get User Stat eFr omRequest (   $opt i on. ' . l i mi t ' , ' l i mi t ' , $mai nf r ame->get Cf g( ' l i st _l i mi t ' ) , ' i nt ' ) ;

$l i mi tst art   = $mai nf r ame- >get User Stat eFromRequest (   $opt i on. ' . l i mi t s t ar t ' , ' l i mi t s t ar t ' , 0,' i nt '   ) ;

$thi s- >set St at e( ' l i mi t ' , $l i mi t ) ;$thi s- >set St at e( ' l i mi t s t ar t ' , $l i mi tst art ) ;

Page 26: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 26/45

 

Página 26

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

$arr ay  = J Request: : getVar ( ' ci d' , 0, ' ' , ' arr ay' ) ;$thi s- >set I d( ( i nt ) $arr ay[ 0] ) ;

}

function  set I d( $i d)  { 

$thi s- >_i d = $i d;$thi s- >_data = null;

Observa que la nomenclatura sigue la norma descrita:

 Nombre del compoenente – Model – Nombre del modelo 

La función __construct() es la primera que se ejecuta al crear la clase. Utilizamos lafuncion “getUserStateFromRequest” para recoger las variables del limites de pagina, ycon la funcion “setState” la asignamos a la variable de session, asi podremos disponer

de ella más adelante con la funcion “getState”.

Recogemos el array “cid” y lo asignamos a la variable interna _id.

function  getData( )  {

i f   ( empt y( $thi s- >_data) )  { 

$quer y  = $thi s- >_bui l dQuer y( ) ;$t hi s- >_data = $thi s- >_get Li st ( $query, $thi s- >getStat e( ' l i mi t s t ar t ' ) , $t hi s-

>get St ate( ' l i mi t ' ) ) ;} return  $thi s- >_dat a;

}

function  get Tot al ( )  { 

// Lets load the content if it doesn't already exist i f   ( empt y( $thi s- >_t otal ) )  { 

$quer y  = $thi s- >_bui l dQuer y( ) ;$t hi s- >_total = $t hi s- >_get Li st Count ( $query) ;

} return  $thi s- >_total ;

function  get Pagi nati on( )  { 

// Lets load the content if it doesn't already exist i f   ( empt y( $thi s- >_pagi nati on) )  { 

 j i mport ( ' j ooml a. ht ml . pagi nat i on' ) ;$t hi s- >_pagi nat i on = new  J Pagi nat i on(   $t hi s- >getTot al ( ) , $t hi s-

>get St ate( ' l i mi t s t ar t ' ) , $t hi s- >get St ate( ' l i mi t ' )   ) ;} return  $thi s- >_pagi nati on;

La función “getData()” comprueba si la variable $datos esta vacia, y si lo esta, entoncesalmacena en ella los datos de la tabla en la variable.Para ello utiliza el metodo“getList()” . Este método es heredado por la clase padre y lo que hace es devolver unalista de objetos con los resultados de la consulta. Cada objeto de la lista tendrá tantas

 propiedades como campos tenga la tabla consultada.Por lo tanto en la variable $datos se

almacena.

Page 27: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 27/45

 

Página 27

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

La función “getTotal()” comprueba si la variable $total esta vacia, y si lo esta, entoncesalmacena en ella el total de datos listados en la tabla. Para ello utiliza el metodo“getListCount()”. Este método es heredado por la clase padre. Y utilizamos la mismaconsulta Query que utilizamos en la funcion “getData()”.

La función “getPagination” comprueba si la variable $pagination esta vacia, y si lo esta,entonces devuelve el objecto JPagination, fijemonos que utliza la funcion “getTotal()”

 para saber el total de registros listados.

function  _bui l dQuery( )  { 

// Get the WHERE and ORDER BY clauses for the query  $wher e  = $t hi s- >_bui l dCont ent Wher e( ) ;$or der by = $t hi s- >_bui l dCont ent Or der By( ) ;

$query  = ' SELECT g. * '  . ' FROM #__pel i cul as_generos AS g'  . $wher e 

. $or der by ;

return  $quer y;} 

function  _bui l dCont ent Or derBy( )  { 

gl obal   $mai nf r ame, $opt i on;

$f i l t er_order   = $mai nf r ame- >get User Stat eFromRequest (   $opt i on. ' . generos.f i l ter_order' ,$f i l t er_order_Di r   = $mai nf r ame- >get User Stat eFromRequest (   $opt i on. ' . generos. f i l t er_order_Di r ' ,

' f i l te r_order_Di r ' , ' ' , ' word'   ) ;

$or der by  = ' ORDER BY ' . $f i l ter_order . ' ' . $f i l ter_order_Di r . ' , g. orderi ng' ;

return  $or der by;} 

function  _ bui l dCont ent Wher e( )  { 

gl obal   $mai nf r ame, $opt i on;

$f i l t er _ state  = $mai nf r ame- >get User Stat eFromRequest (   $opt i on. ' . generos. f i l te r_state' ,' f i l t er _ st at e' , ' ' , ' word'   ) ;

$search  = $mai nf r ame- >get User Stat eFromRequest (   $opt i on. ' . gener os. sear ch' , ' sear ch' , ' ' ,' s t r i ng'   ) ;

$search  = $t hi s- >_db- >get Escaped(   t r i m( J St r i ng: : st r t ol ower (   $search  )   )   ) ;

$wher e  = array( ) ;

i f   (   $f i l t er _ state  )   { i f   (   $f i l t er _ state  == ' P'   )   { 

$wher e[ ]   = ' g. publ i shed = 1' ;}  el se  i f   ( $f i l t er _ state  == ' U'   )   { 

$wher e[ ]   = ' g. publ i shed = 0' ;} 

i f   ( $search)   { $wher e[ ]   = ' LOWER( g. nombre) LI KE \'%' . $sear ch. ' %\'  ' ;

$wher e  = (   count (   $wher e  )   ? ' WHERE '   . i mpl ode(   ' AND ' , $wher e  )   : ' '   ) ;

return  $wher e;} 

Con la funcion “_buildQuery” contruimos la consulta Query para ello utilizaremos 2funciones:

Page 28: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 28/45

 

Página 28

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

“buildContentWhere” contruye la parte del where de la consulta.“buildContentOrderBy” construye la parte del order by.

function  &get I t em(   )  { 

i f   ( $thi s- >_l oadDat a( ) )  { }  el se  {$thi s- >_i ni t Data( ) ; } 

return  $thi s- >_dat a;} 

function  _l oadData( )  { 

// Lets load the content if it doesn't already exist i f   ( empt y( $thi s- >_data) )  { 

$quer y  = ' SELECT *'  . ' FROM #__pel i cul as_gener os'  . ' WHERE i d = ' . $t hi s- >_i d;

$t hi s- >_db- >set Quer y( $quer y) ;$t hi s- >_data = $thi s- >_db- >l oadObj ect ( ) ;return  ( bool ean)   $thi s- >_dat a;

} return  true;

function  _ i ni tData( )  { 

$user   = & J Factory: : getUser ( ) ;

// Lets load the content if it doesn't already exist i f   ( empt y( $thi s- >_data) )  { 

$genero  = new  st dCl ass( ) ;$genero- >i d  = 0;$genero- >nombr e  = null;$genero- >publ i shed  = null;$genero- >order i ng  = null;$genero- >cr eat ed_by  = null;$genero- >cr eated  = null;$genero- >modi f i ed_by  = null;$genero- >modi f i ed  = 0;$genero- >aut hor _i d  = $user - >i d;$genero- >aut hor _i p  = null;$genero- >checked_out   = 0;$genero- >checked_out_t i me  = 0;$t hi s- >_data = $genero;return  ( bool ean)   $thi s- >_dat a;

} return  true;

La funcion “getItem” devuelve un único registro de la variable interna _data, para ello,utilizamos la funcion “loadData” que ejecuta una consulta SQL para comprovar queexista el dato a cargar, la funcion “loadData” devuelve TRUE si lo ha encontrado y locarga en la variable interna _data. Si el registro no existe utilizamos la funcion“initData” que nos devuelve un objecto inicializao.

function  publ i sh( $ci d  = array( ) , $publ i sh  = 1)  { 

$user   =& J Factor y: : getUser ( ) ;

i f   ( count (   $ci d  ) )  { 

$ci ds  = i mpl ode(   ' , ' , $ci d  ) ;

$quer y  = ' UPDATE #__pel i cul as_generos'  

Page 29: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 29/45

 

Página 29

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

. ' SET publ i shed = '   . ( i nt )   $publ i sh 

. ' WHERE i d I N ( ' . $ci ds  . ' ) '  

. ' AND ( checked_out = 0 OR ( checked_out = '   . ( i nt )   $user - >get( ' i d' ) . ') ) ' ;

$t hi s- >_db- >set Quer y(   $quer y  ) ;i f   ( ! $t hi s- >_db->query( ) )   { 

$t hi s- >set Er r or ( $t hi s- >_db->get Err orMsg( ) ) ;return  false;} 

} return  true;

La funcion publish, modifical el registro (los registros) del array cid para publicar-lo odespublicar-lo.

function  move( $di rect i on)  { 

$r ow  =& J Tabl e: : get I nst ance( ' pel i cul as_gener os' , ' ' ) ;

i f   ( ! $r ow- >l oad(   $t hi s- >_i d )   )   { $t hi s- >set Er r or ( $t hi s- >_db- >get Err orMsg( ) ) ;return  false;

i f   ( ! $r ow- >move(   $di rect i on  ) )   { $t hi s- >set Er r or ( $t hi s- >_db- >get Err orMsg( ) ) ;return  false;

return  true;} 

La funcion move, primero crea una instacia de tabla. Las definiciones de tablas lastendremos en el directorio tables. Asi podemos utilizar las funciones de load() para

comprovar si el registro existe, y utilizar las funcion heredada de la instacia table paramover-lo en la direccion que devemos.

function  saveorder ( $ci d  = array( ) , $order )  { 

$r ow  =& J Tabl e: : get I nst ance( ' pel i cul as_gener os' , ' ' ) ;// update ordering values f or (   $i =0; $i   < count ( $ci d) ; $i ++ )  { 

$r ow- >l oad(   ( i nt )   $ci d[ $i ]   ) ;

i f   ( $r ow- >or der i ng  ! = $order [ $i ] )  { 

$r ow- >order i ng  = $order [ $i ] ;i f   ( ! $r ow- >store( ) )   { 

$t hi s- >setError ( $thi s- >_db- >get Err orMsg( ) ) ;return  false;

} } 

return  true;} 

La funcion saveorder guarda el nuevo orden para todos los registros del array $cid, paraello instanciamos la tabla, y desde un bucle de todos id vamos ordenando cada uno deellos.

Page 30: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 30/45

 

Página 30

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

function  del et e( $ci d)  { 

$ci ds  = i mpl ode(   ' , ' , $ci d  ) ;

$query  = ' DELETE FROM #__pel i cul as_generos'  

. ' WHERE i d I N ( ' . $ci ds  . ' ) ' ;

$thi s- >_db- >set Quer y(   $quer y  ) ;

i f ( ! $thi s- >_db- >query( ) )   { $t hi s- >set Er r or ( $t hi s- >_db- >get Err orMsg( ) ) ;return  false;

} } 

La funcion delete, eliminara los registros de la tabla que esten en el array de $cids

function  checkout ( $ui d  = null)  { 

i f   ( $thi s- >_i d)  { // Make sure we have a user id to checkout the group with  i f   ( i s_nul l ( $ui d) )   { 

$user   =& J Fact ory: : getUser ( ) ;$ui d  = $user - >get( ' i d' ) ;

} // Lets get to it and checkout the thing...  $i tem= & J Tabl e: : get I nst ance( ' pel i cul as_gener os' , ' ' ) ;return  $i t em- >checkout ( $ui d, $thi s- >_i d) ;

} return  false;

Con la funcion “checkout” bloquearemos el registro que queremos modificar.

Comprovamos que tenemos un id, comprovamos que tenemos el usuario (uid = UserId),si no tenemos el usuario lo cargamos de la clase maestra JFactory.Instanciamos la tabla, y utilizamos la funcion checkout federada de la clase para

 bloquear el registro. Si ha sido satisfactorio, devuelve TRUE, sino devolvera FALSE.

function  checki n( )  { 

i f   ( $thi s- >_i d)  {  $i tem= & J Tabl e: : get I nst ance( ' pel i cul as_gener os' , ' ' ) ;

return  $i t em- >checki n( $thi s- >_i d) ;} return  false;

Con la funcion “checkin” desbloquea el registro, instanciamos la tabla y utilizamos lafuncion de la clase base de Jtable “checkin” para desbloquear el registro.

function  i sCheckedOut (   $ui d=0  )  {  i f   ( $thi s- >_l oadDat a( ) )  

{  i f   ( $ui d)   { return  ( $t hi s- >_dat a- >checked_out   && $thi s- >_dat a->checked_out   ! = $ui d) ;

}  el se  { return  $thi s- >_dat a->checked_out ;

} }  el sei f    ( $thi s- >_i d < 1)   { 

return  false;}  el se  { 

 J Er r or : : r ai seWarni ng(   0, ' Unabl e t o Load Dat a' ) ;

return  false;} } 

Page 31: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 31/45

 

Página 31

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

La funcion “isCheckedOut” comprueba si esta bloqueado el registro, para elloutilizamos la funcion que antes hemos creado “loadData” para cargar el registro. Unavez cargado comprovamos el campo checked_out.

function  store( $dat a)  { 

gl obal   $mai nf r ame;

 j i mport ( ' j ooml a. ut i l i t i es . date ' ) ;

$conf i g = & J Fact or y: : get Conf i g( ) ;$t zof f set = $conf i g- >get Val ue( ' conf i g. of f set ' ) ;$user   = & J Factory: : getUser ( ) ;

$r ow  = & $thi s- >getTabl e( ' pel i cul as_gener os' , ' ' ) ;

// bind it to the table i f   ( ! $r ow- >bi nd( $dat a) )   { 

 J Er r or : : rai seEr ror ( 500, $t hi s- >_db->get Err orMsg( )   ) ;

return  false;} 

i f   ( ! $r ow- >i d)   { $r ow- >order i ng  = $row- >getNext Or der( ) ;

// Are we saving from an item edit? i f   ( ! $r ow- >i d)   { 

// Es nuevo $dat e  = new  J Date( $r ow- >cr eated, $t zof f set ) ;$r ow- >modi f i ed  = $nul l Date;$r ow- >modi f i ed_by  = ' ' ;

$r ow- >cr eated  = $date- >t oMySQL( ) ;$r ow- >cr eat ed_by  = $user - >get( ' i d' ) ;

}  el se  {  // es Modificacion $dat e  = new  J Date( $r ow- >modi f i ed, $t zof f set ) ;$r ow- >modi f i ed  = $dat e- >t oMySQL( ) ;$r ow- >modi f i ed_by  = $user - >get( ' i d' ) ;

// Make sure the data is valid  i f   ( ! $r ow- >check( ) )   { 

$t hi s- >set Er r or ( $r ow- >get Er r or( ) ) ;return  false;

// Store it in the db i f   ( ! $r ow- >store( ) )   { 

 J Er r or : : rai seEr ror ( 500, $t hi s- >_db->get Err orMsg( )   ) ;return  false;

return  $row- >i d;} 

} / / end of cl ass J model  ?> 

La funcion “store” guarda el registro. Importamos las funciones de fecha, y cargamos elusuario actual. Instanciamos la tabla de la clase Jtable. Asignamos los datos a la tabla, alinstanciar la tabla por defecto esta vacia, por eso utilizamos la funcion “bind” que nosasigna los valores a cada campo.

Comprovamos el id, porque si es 0, quiere decir que es un registro nuevo, y los nuevostienen como ordenación la ultima posición.

Page 32: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 32/45

 

Página 32

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Comprovamos el id, porque si es 0, quiere decir que es un registro nuevo, los nuevostienen la fecha de modificacion a null, y la fecha de creación a la fecha actual delsistema. Si ya existe el id quiere decir que es una modificación, asi que deveremos

 poner la fecha de modificación del sistema.

Ahora utilizamos las funciones de la clase JTable para validar los datos con la funcion“check” y si son correctos los guardamos con la funcion “store”, de esta manera podemos devolver el ID que se le ha asignado.

La tabla.

Como hemos visto anteriormente en el modelo, utilizamos una instancia de tabla para ladefinición de campos, validación y trabajo con los datos de la tabla.

Creamos al fichero peliculas_generos.php en el directorio tables.

<?php // No permite el acceso directo def i ned( ' _J EXEC' )   or di e( ' Rest r i ct ed access' ) ;

class  pel i cul as_generos extends J Tabl e{ 

var  $i d  = null;var  $nombr e  = null;var  $al i as  = null;

var  $state  = 0;var  $hi t s  = 0;

var  $met a_keywor ds  = null;var  $meta_descr i pt i on  = null;var  $publ i shed  = null;var  $cr eat ed  = null;var  $creat ed_by  = null;var  $modi f i ed  = null;var  $modi f i ed_by  = null;var  $checked_out   = 0;var  $checked_out _t i me  = 0;var  $or der i ng  = null;

/** * @param database A database connector object */  

function  pel i cul as_gener os( & $db)   { par ent : : __const r uct ( ' #__pel i cul as_gener os' , ' i d' , $db) ;

// overloaded check function function  check( )  { 

// Not typed in a category name? i f   ( t r i m(   $t hi s- >nombr e  )   == ' ' )   { 

$t hi s- >_err or = J Text: : _ (   ' ADD NAME GENEROS'   ) ; J Er r or : : r ai seWarni ng( ' SOME_ERROR_CODE' , $t hi s- >_er r or ) ;return  false;

$al i as  = J Fi l t er Out put : : st r i ngURLSaf e( $t hi s- >nombr e) ;

Page 33: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 33/45

 

Página 33

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

i f ( empt y( $t hi s- >al i as)   | | $t hi s- >al i as  === $al i as  )   { $t hi s- >al i as  = $al i as;

/** check for existing name */  

$query  = ' SELECT i d FROM #__pel i cul as_generos WHERE nombre = ' . $t hi s->_db- >Quot e( $t hi s- >nombr e) ;$t hi s- >_db- >set Quer y( $query) ;

$xi d  = i nt val ( $t hi s- >_db- >l oadResul t ( ) ) ;i f   ( $xi d  && $xi d  ! = i nt val ( $t hi s- >i d) )   { 

 J Er r or : : r ai seWarni ng( ' SOME_ERROR_CODE' , J Text : : spr i nt f  ( ' GENERONAME ALREADY EXI ST' , $t hi s- >nombr e) ) ;

return  false;} 

return  true;} 

?> 

Las variables que pongamos en la clase son la estructura de la tabla. Siempre devemos poner las variables:

var  $al i as  = null;

var  $publ i shed  = null;var  $cr eat ed  = null;var  $cr eat ed_by  = null;var  $modi f i ed  = null;var  $modi f i ed_by  = null;

var  $checked_out   = 0;var  $checked_out _t i me  = 0;var  $or der i ng  = null;

La función películas_generos debe de tener el mismo nombre que la clase, y crea laclase según la tabla “#__peliculas_generos”.

Con la función “check” comprobamos los datos antes de guardar-los. Comprobamosque tengamos un nombre. Asignamos un alias con la función “stringURLSafe” que nosconvierte un nombre en una URL, ejemplo: Nombre: Películas de terror => películas-de-terror.

Y por último comprobamos que en la tabla no tengamos ningún otro registro con elmismo nombre.

Page 34: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 34/45

 

Página 34

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Front-end componente MVC con Joomla!

Iniciación. Estructura del directorio.Lo primero que haremos será ir a la carpeta principal de Joomla en nuestro servidorweb. Dentro de esa carpeta localizar el directorio components .Observa que dentro del directorio existen otros directorios que empiezan por com_xxxxEsta es la primera norma que pone Joomla!: los componentes se deben de ubicar en undirectorio cuyo nombre empiece por com_ seguido del nombre del componente, porejemplo para el componente películas seria com_peliculas.

Cuando llamemos a nuestro componente, lo primero que hace Joomla es buscar elarchivo php que hay dentro con el mismo nombre que el componente y ejecutarlo. Este

es el punto de entrada del componente. Creamos el fichero peliculas.php.

Lo siguiente es crear el archivo controller.php.

Ahora necesitamos crear los directorios en los que ubicaremosnuestro Modelo (models) y nuestras Vistas (views).

Dentro del directorio views, hay que crear un directorio por cadavista y el directorio tiene que tener el nombre de la vista; crea eldirectorio generos dentro del directorio views.

Dentro del directorio views/generos creamos el directorio tmpl ,aquí es donde se guardarán los layouts de la vista. El layout es elfichero final que se mostrará por el navegador.

Creamos el fichero views/generos/view.html.php , este ficherotambién es necesario.

Ahora creamos el fichero generos.php dentro de models.

Punto de entrada

Joomla! 1.5 sabe qué componente tiene que cargar porque busca en la query string de la petición el parámetro “option”, del cual obtiene el nombre del componente a cargar. Esdecir, nosotros para llamar a nuestro componente peliculas, introduciremos en joomla laURL acabada con index.php?option=com_peliculas. Esto muestra la pagina principal denuestro componente, que por defecto carga la vista con el mismo nombre delcomponente, es decir, la vista con nombre “peliculas”.

Cuando se carga el componente, se ejecuta el punto de entrada a este, peliculas.php, yen el punto de entrada será donde nosotros crearemos una instancia de nuestrocomponente.

Creamos al fichero peliculas.php en el directorio com_peliculas.

Page 35: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 35/45

 

Página 35

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

<?php // No permite el acceso directo def i ned(   ' _J EXEC'   )   or di e(   ' Rest r i ct ed access'   ) ;

r equi r e_once  ( J PATH_COMPONENT_SI TE. DS. ' hel per s' . DS. ' i mage. cl ass. php' ) ;r equi r e_once  ( J PATH_COMPONENT_SI TE. DS. ' hel per s' . DS. ' out put . cl ass. php' ) ;r equi r e_once  ( J PATH_COMPONENT_SI TE. DS. ' hel per s' . DS. ' r out e. php' ) ;r equi r e_once ( J PATH_COMPONENT_ADMI NI STRATOR. DS. ' hel per ' . DS. ' pel i cul as. conf i g. c l ass. php' ) ;

gl obal   $Pel i cul as_Conf i g;$Pel i cul as_Conf i g  = new  Pel i cul asConf i g( ) ;$Pel i cul as_Conf i g- >l oadconf i g( ) ;

// Set the table directory   J Tabl e: : addI ncl udePath( J PATH_COMPONENT_ADMI NI STRATOR. DS. ' t abl es' ) ;

// Cargamos el controlador  

r equi r e_once  ( J PATH_COMPONENT. DS. ' cont rol l er . php' ) ;

// Create the controller  $cl assname  = ' Pel i cul asCont rol l er ' ;$cont r ol l er   = new  $cl assname( ) ;

// Perform the Request task $cont r ol l er - >execute(   J Request : : get Var ( ' t ask' , null, ' def aul t ' , ' cmd' )   ) ;

// Redirect if set by the controller  $cont r ol l er - >r edi r ect ( ) ;?> 

La primera línea comprueba si esta definida la variable “_JEXEC”, y si no esta definidase muestra un mensaje de error por pantalla mediante la función “die”. Esto es unamedida de seguridad que incluye el marco de trabajo Joomla! y que es recomendableusar en todos nuestros archivos .php que tengamos en el sitio, y que evitara que la genteacceda a las paginas directamente sin hacer antes las comprobaciones de seguridad quelleva incluida Joomla!

Seguidamente se importan archivos, librerias de clase que utilizaremos para mostrarimágenes o rutas de acceso. Asi como tambien importamos desde la administración laclasse base para las configuraciones, y inicializamos una variable pública con lasconfiguraciones de nuestro componente.

Si deseamos trabajar con tablas importamos els path del directorio de las definiciones delas tablas.

Ahora importamos el archivo controller.php donde crearemos nuestra clase quecontendrá el controlador.

JPATH_COMPONENT y DS son constantes que define el marco de trabajo de Joomla!y que contienen el path al componente en el sistema y el separador de directoriosadecuado para el sistema que se este utilizando, “\” para Windows y “/” para sistemasUnix. Utilizar estas constantes nos facilitara el trabajo más adelante y hará nuestrasaplicaciones portables e independientes de la plataforma donde se estén utilizando.

Page 36: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 36/45

 

Página 36

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Instanciamos nuestro controlador, y ejecutamos el método execute del controlador, y le pasamos como parámetro un string que contiene el valor del parámetro task quehayamos establecido en la query string.

Después de esto se ejecuta el metodo redirect() del controlador, que redigirá el flujo del programa a la vista adecuada.

El controlador

Vamos al fichero controller.php y copiamos el siguiente codigo:

<?php // No permite el acceso directo def i ned(   ' _J EXEC'   )   or di e(   ' Rest r i ct ed access'   ) ;

 j i mpor t ( ' j ooml a. appl i cat i on. component . cont r ol l er ' ) ;

class  Pel i cul asCont r ol l er ext ends J Cont r ol l er{ 

/** * Display the view  */  function  di spl ay( )  { 

par ent : : di spl ay( ) ;} 

} ?> 

Esta vez lo único que hemos hecho es crear la clase que hará la función de controlador,y es obligatorio que herede de JController.Hemos sobrescrito el metodo display, perolo único que hacemos es ejecutar el metodo display de la clase padre, es decir, que

 básicamente no hacemos nada.

El controlador da paso a la vista correspondiente, que en este caso es la que se llamegeneros.

La vista

Después de crear nuestro controlador, vamos a crear nuestra vista.

Vamos al fichero view.html.php en el directorio views/generos y copiamos el siguientecódigo:

<?php // No permite el acceso directo def i ned(   ' _J EXEC'   )   or di e(   ' Rest r i ct ed access'   ) ;

 j i mpor t (   ' j ooml a. appl i cat i on. component . vi ew' ) ;

class  Pel i cul asVi ewGeneros ext ends J Vi ew{ 

function  di spl ay(   $t pl =null  )  

Page 37: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 37/45

 

Página 37

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

{ gl obal   $mai nf r ame;gl obal   $Pel i cul as_Conf i g;

$document   = & J Fact ory: : get Document ( ) ;

$menu  = & J Si t e: : get Menu( ) ;$i t em   = $menu- >get Act i ve( ) ;$par ams  = & $mai nf r ame- >get Par ams( ) ;

$document - >addSt yl eSheet ( J URI : : base( ) . ' component s/ com_pel i cul as/ asset s/ css/ pel i cul as. css' ) ;

$num_gen_page  = $par ams- >def ( ' num_gen_page' , 15) ;

// get variables $l i mi t star t = J Request : : getVar ( ' l i mi t s t ar t ' , 0, ' ' , ' i nt ' ) ;$l i mi t   = J Request : : getVar ( ' l i mi t ' , $num_gen_page, ' ' , ' i nt ' ) ;

$r ows  = & $t hi s- >get ( ' Dat a' ) ;

$t ot al   = & $t hi s- >get ( ' Tot al ' ) ;

$par ams- >def (   ' page_t i t l e' , $i t em- >name) ;

//pathway  $pat hway  = & $mai nf r ame- >get Pat hWay( ) ;$pat hway- >set I t emName( 1, $i t em- >name) ;

//Set Page title $mai nf r ame- >set PageTi t l e(   $par ams- >get ( ' page_t i t l e' )   ) ;$mai nf r ame- >addMet aTag(   ' t i t l e'   , $par ams- >get ( ' page_t i t l e' )   ) ;

// Create the pagination object  j i mpor t ( ' j ooml a. ht ml . pagi nat i on' ) ;

$pageNav  = new  J Pagi nat i on( $t ot al , $l i mi t star t , $l i mi t ) ;

$t hi s- >assi gnRef ( ' r ows'   , $r ows) ;$t hi s- >assi gnRef ( ' par ams'   , $par ams) ;$t hi s- >assi gnRef ( ' pageNav'   , $pageNav) ;$t hi s- >assi gnRef ( ' i t em'   , $i t em) ;$t hi s- >assi gnRef ( ' Pel i cul as_Conf i g'   , $Pel i cul as_Conf i g) ;$t hi s- >assi gnRef ( ' paget i t l e'   , $paget i t l e) ;

par ent : : di spl ay( $t pl ) ;} 

} ?> 

Como siempre la primera línea hace una comprobación para ver si se esta accediendodesde Joomla! o se esta haciendo un acceso directo, esta medida de seguridad debe deestar siempre presente.

La segunda línea se utiliza la función jimport del api de Joomla!, esta función importa laclase abstracta para la vista.

Empezamos directamente con el metodo display. Definimos las variables globalesmainframe y nuestra variable de configuraciones.

Obtenemos el objecto document, y el menú, concretamente el menú activo.

Page 38: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 38/45

 

Página 38

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Mediante la variable document y la funcion addStyleSheet indicamos al joomla que enla cabecera del html (head) debe de cargar un css adicional para este componente.

Obtenemos el número de registros por página de la configuración de la vista. Esta

configuración esta disponible en el XML del directorio views/generos/tmpl/default.xml.

Miramos si tenemos algun parámetro de los limites de paginación y si no lo tenemos loinicializamos.

Ahora vamos a obtener los datos del modelo, no se lo hemos definido en ningun sitio,asi que el joomla cogera por defecto del objecto PeliculasModelGeneros. Podriamoshaber definido el modelo al que acceder mediante $model = & $this->getmodel(); yobtener los datos por $model->get(‘Data’); pero asi ahorramos operaciones alcomponente, devido a que por defecto ya es lo que hace.

Obtenemos el titulo de la página de los parámetros del sistema (opción disponiblecuando se define un enlace de menú desde la parte administrativa), para poder asignar al

 pathway el nombre que deseamos poner, en este caso el propio nombre de la página.

Ponemos el nombre de la página en el title del HTML mediante la función setPageTitley también ponemos un Metatag con el mismo nombre con la función addMetaTag.

Importamos la librería de la clase pagination para obtener el objeto de la paginación.

Asignamos las variables al layout y lanzamos el metodo display que nos llamara allayout defautl del directorio tmpl.

Vista. Manifiesto (XML)

En el directorio de la vista vamos a crear el fichero  metadata.xml. Este ficheronos dara las definiciones del listado para que lo podamos incorporar desde el apartadoadminitrativo de menus. Son simplemente una descripción de lo que muestra el listado.

<?xml ver si on="1. 0"   encodi ng="utf -8"?> <metadata> 

<layout  t i t l e="Li st ado de Generos"> <message> 

<! [ CDATA[ LI STADO DE GENEROS] ] > </message> 

</layout> <state> 

<name>LI STADO DE GENEROS</name> <description>LI STADO DE GENEROS</description> <params> 

<param   name="num_gen_page"   t ype="text"   s i ze="3"  def aul t ="15"  l abel ="generos por pagi na"  descr i pt i on="PARAMGENPAGE"   /> 

</params> </state> 

</metadata> 

Page 39: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 39/45

 

Página 39

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Tambien podremos definir alguna variable de configuración como por ejemplo“num_gen_page” que nos servira para decidir cuantos registros por pagina devemosmostrar.

El Layout.

En el directorio views/generos/tmpl vamos a crear el al fichero default.php ycopiamos el siguiente código:

<?php // No permite el acceso directo def i ned(   ' _J EXEC'   )   or di e(   ' Rest r i ct ed access'   ) ;?> 

<di v i d="cs i Li s ta"   sty l e="margi n: 0px; ">

<?php  echo  PELI CULASOutput : : header (   J Text : : _ (   ' LI STADO DE GENEROS'   )   ) ; ?> 

<t abl e wi dth=' 100%'   border=' 0'   cel l spaci ng=' 1'   cel l paddi ng=' 4'  val i gn=' mi ddl e' >

<t f oot ><t r >

<t d><?php echo  $t hi s- >pageNav- >getPagesLi nks( ) ; ?></ t d></ t r >

</ t f oot >

<t body><?php $l i nea=1;f or each  ( $t hi s- >r ows  as  $r ow)   :

$l i necol or   = ( $l i nea  % 2)   + 1;

//Link to categoria details $detai l l i nk  = J Rout e: : _ (   ' i ndex. php?vi ew=pel i sxgenero&i d=' . $r ow- >sl ug  ) ;

echo  "<t r cl ass=' sect i ont abl eent r y" . $l i necol or . " ' ><t d wi dt h=' 100%'val i gn=' t op' >" ;

echo  "<i mgsr c=' " . J URI : : base( ) . "/ component s/ com_pel i cul as/ asset s/ i mages/ f i l m. png'al i gn=' absmi ddl e' hspace=' 6' hei ght =' 25' wi dt h=' 25' bor der =' 0' al t =' " . $t hi s->escape( $row- >nombr e) . " ' / ></ a>" ;

echo  "<a hr ef =' "   . $detai l l i nk  . "' >" . $t hi s- >escape( $r ow- >nombr e) . "</ a>" ;echo  "&nbsp; <span cl ass=' smal l ' >( " . $r ow- >assi gnedpel i s. " ) </ span><br / >" ;echo  "</ t r >" ;

$l i nea++;endf oreach;?> </ t body></ t abl e>

</ di v>

<! - - pagi nat i on- - ><p class="pagescount er"><?php  echo  $t hi s- >pageNav- >get PagesCount er ( ) ; ?></ p>

<! - - copyr i ght - - ><p class="copyr i ght "><?php  echo  PELI CULASOutput : : f oot er (   ) ; ?></ p>

El fichero no tiene mucho secreto. Ponemos una cabecera que tenemos definidaen el fichero helpers/output.class.php.

Page 40: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 40/45

 

Página 40

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Creamos una tabla donde incorporamos un bucle de todos los datos a listar, y losvamos poniendo en las celdas de la tabla, con su correspondiente link. 

Layot. Manifiesto (XML)En el directorio del layout vamos a crear el fichero  default.xml. Este fichero nos

dara las definiciones del layoutpara que lo podamos incorporar desde el apartadoadminitrativo de menus. Son simplemente una descripción de lo que muestra el listado.

<?xml ver si on="1. 0"   encodi ng="utf -8" ?> <metadata> 

<view  t i t l e="Gener os" > <message> 

<! [ CDATA[ LI STADO DE GENEROS] ] > </message> 

</view> 

</metadata> 

Page 41: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 41/45

 

Página 41

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Cosas

Creando URLs personalizadasEl Alias

El primer paso es la generación de lo que llamamos Alias. El Alias es usado en la URLen vez del título (el título es el texto que tu quieres tener en la URL). El alias debe ser“URI seguro”, lo que quiere decir que los caracteres acentuados UTF-8 son substituidos

 por sus equivalentes en ASCII-7, los espacios en blanco por guiones, etcétera.El alias puede ser definido por el usuario, pero debes asegurarte que el requisito antesmencionado de la URL segura se cumple. Una buena manera de hacerlo es usuar elmetodo JTable::check() durante el proceso de guardado.

f uncti on check( ){

 j i mpor t ( ' j ooml a. f i l ter . out put ' ) ;$al i as = J Out putFi l t er : : st r i ngURLSaf e( $t hi s- >t i t l e ) ;i f ( empt y( $t hi s- >al i as ) | | $t hi s- >al i as === $al i as ) {

$t hi s- >al i as = $al i as;}/ * Al l your ot her checks */r et ur n true;

}

El Slug 

Continuando con el mismo ejemplo, el “slug” – “1-bienvenido-a-joomla” tiene dos partes. La primera parte es el identificador de artículo (id) y el segundo es el alias, estosestán separados por un guión. Durante la consulta a la base de datos los dos elementosse combinan en el modelo:

$quer y = ' SELECT a. *' .' CASE WHEN CHAR_LENGTH ( a. al i as) THEN CONCAT_WS( \ ' : \ ' , a. i d,

a. al i as) ELSE a. i d END as sl ug, ' .

[ . . . ] ;

Después de este paso “el slug” es usado en vez de la id..

Page 42: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 42/45

 

Página 42

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Usar las Librerias de la Base de Datos 1.5 

Conseguir el objeto de la base de datos del sistema 

La manera más facil de conseguir el objeto de la base de datos es consiguiendo el objetode la base de datos del sistema devuelto por la clase JFactory. El metodo staticoJFactory::getDBO() devulve una instancia simple del objeto de la base de datos delsistema, sin importar el alcance y es la recomendación para conseguir este objeto.

/ / Thi s get s t he dat abase obj ect usi ng t he J Fact or y cl ass$db = & J Fact or y: : get DBO( ) ;

Crear un objeto de base de datos a usar  

Joomla! 1.5 introduce el concepto de manejadores de dase de datos que permitirán

conseguir el objeto de las base de datos para diferentes fuentes de base de datos.

/ / Cr eat e a new dat abase obj ect$myDB = new J Dat abase: : get I nst ance( $opt i ons ) ;

Seleccione un campo de la fila.

 Necesitamos fijar nuestra consulta SQL al objeto de la base de datos. Para hacer estonosotros usaremos el metodo setQuery.

/ / Set our quer y to the dat abase obj ect .$db- >set Quer y( ' SELECT nombre FROM t abl a WHERE i d = 22' ) ;

Finalmente llamamos al metodo loadResult().

/ / Use t he l oadResul t ( ) met hod t o get onl y t he f i r st val ue f r om t he f ir st r ow of t he r esul t set .$name = $db- >l oadResul t ( ) ;

La clase Error Handling

Vista general y Descripción:

En el Joomla 1.5 tenemos una nueva clase Error es JError class. Class está basado en patErrorManager que provee métodos estáticos para manejar la condición de error enJoomla. Previamente, no había un método consistente que maneje y muestre errores.Esta clase permite al desarrollador mostrar códigos de error y mensajes de error alusuario como también información interna para ayudar a solucionar el problema defallas. Colocando un cierto código de error por una cierta condición de error, se puedeentender mejor que sucede cuando un usuario se queja de cierta clase de error.

Page 43: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 43/45

 

Página 43

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Implementación:

JError Class Static Methods:

isError( &$object ):

Código PHP:

/** * method for checking whether the return value of a pat application method

is a pat * error object. * * @static * @access public * @param mixed &$object * return boolean $result Verdadero si el argumento es un

 patError-object, falso en caso contrario. */  function  i sErr or (   &$obj ect   )   { 

return  pat Err orManager : : i sErr or ( $obj ect ) ;}

Descripción: Error

 raiseError( $code, $msg, $info = null ):

Código PHP

/** * envuelto por {@link raise()} método donde no tiene que especificar el * nivel de error – a {@link patError} objeto con nivel de error E_ERROR

será retornado. *

* @static * @access public * @param string $code El código de error para esta aplicación-

interna. * @param string $msg El mensaje de error, también puede ser

mostrado al usuario si es necesario. * @param mixed $info Opcional: Información adicional al error

(usualmente información relevante para los desarrolladores que los

usuarios no ven, como una base de datos DSN). * @return object $error patError object configurado * @see patErrorManager  */  function  &r ai seEr r or (   $code, $msg, $i nf o  = null  ) { 

return  pat Err orManager : : rai se(   E_ERROR , $code, $msg, $i nf o  ) ;}

Descripción: Warning

 raiseWarning( $code, $msg, $info = null ):

Page 44: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 44/45

 

Página 44

Pl. President Tarradellas, 11  FIGUERES (Girona)Tel. 902 88 92 67  Fax 972 67 19 62

Código PHP:

/** * envuelto por {@link raise()} método donde no tiene que especificar el * nivel de error – a {@link patError} objeto con el nivel de error

E_WARNING será mostrado. * * @static * @access public * @param string $code El código de error de aplicación-

interna para este error  * @param string $msg El mensaje de error, puede ser mostrado

al usuario si es necesario. * @param mixed $ifo Opcional: Información adicional al error

(usualmente información relevante para los desarrolladores que los

usuarios no ven, como una base de datos DSN). * @return object $error patError object configurado 

* @see patErrorManager  */  function  &r ai seWarni ng(   $code, $msg, $i nf o  = null  ) { 

return  pat Err orManager : : rai se(   E_WARNING, $code, $msg, $i nf o  ) ;} 

Descripción: Notice

 raiseNotice( $code, $msg, $info = null ):

Código PHP

/** * wrapper for the {@link raise()} method where do you do not have to

specify the * error level – a {@link patError} object with error level E_NOTICE will

be returned. *

* @static * @access public * @param string $code The application-internal error code for

this error  * @param string $msg The error message, which my also be shown

the user if need be. * @param mixed $info Optional: Additional error information

(usually only developer-relevant information that the user should never

see, like a database DSN). * @return object $error The configured patError object * @see patErrorManager  */  function  &r ai seNot i ce(   $code, $msg, $i nf o  = null  ) { 

return  pat Err orManager : : rai se(   E_NOTICE, $code, $msg, $i nf o  ) ;} 

Page 45: Joo Mla Spanish

7/18/2019 Joo Mla Spanish

http://slidepdf.com/reader/full/joo-mla-spanish 45/45

 Pl. President Tarradellas, 11  FIGUERES (Girona)

Tel. 902 88 92 67  Fax 972 67 19 62

Uso de los Desarrolladores:

Niveles de Error:

 Error:

El nivel de error más serio es E_ERROR. Cuando aparece este tipo de error, elmanejador del error parará la ejecución del script y mostrará el número del error y elmensaje en la pantalla. Ejemplos de cuando este error debe ser usado es cuandocontinúa una ejecución del script que puede causar la pérdida de la integridad de datos oun bucle infinito.

Warning:

El nivel intermedio de error es E_WARNING. Cuando este error aparece, el manejadordel error mostrará un mensaje de advertencia con el número de error y el mensaje en pantalla permitirá al script continuar con la ejecución. Ejemplos de este caso pueden serusado cuando se espera un dataset previsto no fue recuperado.

 Nota:

El nivel de error más bajo es E_NOTICE. Este tipo de error se comporta de la mismamanera que lo hace E_WARNING, pero implica un problema menos serio.

Consideraciones Especiales:

Porque la clase de JError envuelve solamente una cierta funcionalidad de la clase del patErrorManager, hay del patErrorManager que no se ponen en ejecución en JError.JError, sin embargo, se pone en ejecución de manera tal que permitiera que undesarrollador utilizara los plenos poderes del patErrorManager que juzgue necesarios.