SlideShare a Scribd company logo
1 of 125
1/125




Desarrollo de componentes, módulos y plugins

                       Joomla 1.5
2/125




1. Visión global
3/125

        El código se estructura en 2 carpetas:
                back_end y front_end
●   Back_end
        –   Joomlaadministrator
        –   components
        –   com_reviews
●   Front_end
        –   Joomla
        –   components
        –   com_reviews
4/125


    ¿Qué es eso de el front_end y el back_end?
●   El front_end contiene el código que ejecutan los usuarios
    que NO son administradores del sitio web
●   El back_end contiene el código que ejecuta el
    administrador (o los administradores) del sitio web
5/125


                      Control de flujo
●   En un componente se ejecuta una y otra vez el mismo
    fichero
●   En cada vez se invocan diferentes funciones
●   La controladora gestiona el flujo
●   El modelo gestiona el acceso a datos
●   La vista gestiona la visualización en pantalla
6/125


          Modificar permisos de directorio
●   Debemos modificar los permisos de la carpeta de nuestro
    sitio web para que el propio Joomla pueda escribir dentro
    de ella
●   Si accedemos en modo administrador Ayuda Permisos
    de directorio...
7/125


             Modificar permisos de directorio
●   Desde la shell, sobre nuestro directorio del sitio web
    escribimos:
         –   sudo chmod -R 777 marudesign/
●   Y ahora, refrescamos la página de permisos:
8/125




2. Iniciación al
 desarrollo de
componentes
9/125


               Estructura del componente
●   Prefijo com_. Si el componente se llama reviews, las
    carpetas contenedoras se llamarán com_reviews
●   Dos carpetas contenedoras. Una para el front end y otra
    para el back end:
        –   componentescom_reviews y
        –   administratorcomponentscom_reviews
●   Fichero main.
        –   El fichero principal del componente se llamará
              reviews.php y admin.reviews.php para el back
              end (El nombre coincide con el nombre del
              componente)
        –   Este fichero tiene que estar ubicado justo en la
             carpeta del componente.
10/125


      Ejecutar el front end del componente
●   index.php?option=com_<nombre_componente>
       –   En joomla siempre se ejecuta el fichero index.php
       –   En el querystring, la variable option designa qué
            componente ejecutar
       –   http:joomlaindex.php?option=com_reviews
       –   Esto invocará al fichero main del componente, que
            en nuestro caso es
            componentscom_reviewsreviews.php
       –   Cualquier cosa que pongamos en este fichero main
            se ejecutará
11/125


         Seguridad: Evitar invocación directa
●   Como vemos, joomla hace un routing de la página solicita,
    no escribimos directamente el fichero .php en la barra de
    direcciones
●   ¿Cómo evitar que un usuario escriba directamente en la
    barra de direcciones la ruta de nuestro fichero .php?
●   En la primera línea debemos escribir este código:
    <?php
            defined( '_JEXEC' ) or die( 'Restricted access' );
            ...
    ?>
●   De esta manera aseguramos que ha accedido vía joomla!
12/125


      Ejecutar el back end del componente
●   administrator/index.php?
    option=com_<nombre_componente>
       –   En joomla siempre se ejecuta el fichero index.php
       –   En el querystring, la variable option designa qué
            componente ejecutar
       –   http:joomlaadministratorindex.php?
             option=com_reviews
       –   Esto invocará al fichero main del componente, que
            en nuestro caso es administrator components
            com_reviews admin.reviews.php
       –   Cualquier cosa que pongamos en este fichero main
            se ejecutará
13/125


               Registrar el componente
●   Registrar el componente implica agregar una línea a la
    tabla del sistema jos_components
14/125


        Creación de barras de herramientas
●   Una barra de herramientas se divide en dos ficheros:
        –   toolbar.reviews.html.php
                ● Se encargará de mostrar/dibujar la barra de
                    herramientas en formato HTML
        –   toolbar.reviews.php
                ●Decide qué barra de herramientas mostrar,
                   por si tenemos más de una
●   Por la simple existencia de estos ficheros, joomla asume
    que tenemos una barra de herramientas asociada a
    nuestro componente
15/125




3. Back-end
16/125


                       Visión global
●   Creación de la tabla de datos
●   Creación del formulario básico de creación/edición de
    registros
●   Procesamiento de los datos e inserción en la tabla
●   Listado de los datos
●   Edición y borrado de datos
17/125


             Creación de la tabla de datos
●   Creamos la tabla en la que vamos a guardar datos
        –   En el ejemplo será jos_reviews, donde se
             almacenan las opiniones de los restaurantes
●   Se trata simplemente de lanzar un script:
        –   CREATE TABLE jos_reviews (...
18/125


              Creación de la clase tabla
●   Asociado a la tabla tendremos una clase que maneja los
    datos de esa tabla
●   Hereda de JTable
●   El fichero se tiene que llamar review.php porque aloja una
    única fila de la tabla
●   Situaremos este fichero bajo la carpeta Tables
●   El nombre de la clase tiene que ser TableReview
●   La clase contiene simplemente cada uno de los campos
    inicializados a null y exactamente con el mismo nombre
    que los campos de la tabla
●   Hay que crear el constructor
19/125


Clase de la tabla
20/125


            Formulario de inserción de datos
●   Dos ficheros:
        –   admin.reviews.php
                ●Lógica del formulario
        –   admin.reviews.html.php
                ●   Visualización HTML del formulario
21/125


     Formulario de inserción de datos: lógica
●   fichero admin.reviews.php
●   En función de la variable $task, que recupera del qs,
    realiza una acción u otra
●   Para la creación de nuevos registros, $task = 'add'
●   Carga el modelo: filas y las listas necesarias
●   Invoca a la vista con los valores cargados, en nuestro
    caso HTML_reviews::editReview que se aloja en el fichero
    admin.reviews.html.php
22/125


Formulario de inserción de datos: lógica
23/125


Formulario de inserción de datos: lógica




                             Al final invocamos a la vista
                            para que muestre el formulario
24/125


      Procesar los datos: detectar tarea save
●   Desde el formulario de inserción de datos se redirige
    a:
        –   admin.reviews.php
        –   option=com_reviews
        –   task=save
●   En su switch, debemos invocar a la función
    saveReviews cuando task=save
25/125

    Procesar datos: recuperar y guardar datos
              función saveReview
●   Los datos del nuevo registro llegan desde un formulario
●   Cargamos esos datos en una nueva row
●   Para ello hacemos:
        –   Creamos una instancia vacía de row
        –   Bindeamos cada uno de sus campos a los valores
              que llegan en $_POST
        –   CUIDADO: Joomla “limpia” esos campos de
             caracteres espúreos
26/125

    Procesar datos: recuperar y guardar datos
              función saveReview
●   Los datos que contienen HTML, como quicktake y review
    los cargamos en crudo.
●   Para ello hacemos:




●   Guardamos la fila en base de datos
27/125

    Procesar datos: recuperar y guardar datos
              funcion saveReview
●   Al terminar, redirigimos el navegador:
28/125


     Listar todos los registros: visión global
●   admin.reviews.php
       –   Capturar el task=showReviews
       –   Crear la función showReviews(), que será la
            lógica de la visualización
●   admin.reviews.html.php
       –   Crear el formulario de visualización bajo la
            función showReviews()
29/125


     Listar todos los registros: capturar task
●   En admin.reviews.php
30/125


          Listar todos los registros: lógica
●   Recuperamos todos los
    registros
●   Los cargamos en $rowsw
●   Invocamos a la vista
31/125


     Listar todos los registros: visualización
●   Simplemente es una table que rellenamos con un for
    recorriendo cada uno de los elementos que hay en $rows
32/125


Listar todos los registros: visualización
33/125


           Editar un registro: visión global
●   1. En admin.reviews.php capturamos task = 'edit' e
    invocamos al handler




●   2. Modificamos la función editReview que utilizamos para
    insertar para que recupere los datos del registro a editar
34/125


          Editar un registro: visión global
●   3. En la visualización de registros, creamos un link sobre
    el nombre que nos lleve a la edición
35/125


      4. Edición de un registro: visión global
●   4. Modificamos el toolbar para que muestre los botones de
    guardar, aplicar y cancelar cuando el task es 'edit'
36/125


                   Eliminar registros
●   1. Capturamos el task = 'remove' en admin.reviews.php:
37/125


                  Eliminar registros
●   2. Función handler removeReviews
38/125




4. Front-end
39/125


                         Visión global
●   El fichero reviews.php hará de router
●   Se encarga de recoger el task que llega del queryString e
    invocar a una función handler u otra
●   reviews.php básicamente es un mega switch, con una
    entrada por cada posible task y una lista de funciones
    handler que gestionan la lógica de cada task
●   Las operaciones básicas serán:
        –   Listar todos los registros
        –   Ver en detalle un registro
        –   Añadir comentarios a un registro
        –   Ver los comentarios
        –   Crear enlaces amigables
40/125


                    Listar los registros
●   1. Capturamos el task
        –   En reviews.php, iniciamos el switch que recoge el
             task y en base al cual invoca a una función
             handler o a otra
41/125


                Listar todos los registros
●   2. Función handler para el task
        –   Ya hemos capturado el task y ya hemos invocado a
             la función manejadora de esta tarea.
        –   Código de la función manejadora
42/125


               Listar todos los registros
●   3. Vista en el fichero revies.html.php
43/125


Listar todos los registros: resultado




          Cada registro muestra su nombre
             y contiene un enlace para
                 la vista en detalle
44/125


            Mostrar un registro en detalle
●   1. Capturamos el task
45/125


             Mostrar un registro en detalle
●   2. Función handler de task='view'
        –   Carga el registro en $row
        –   Invoca a la vista con $row como parámetro
46/125


            Mostrar un registro en detalle
●   3. Vista, muestra el registro que recibe por parámetro
47/125


Mostrar un registro en detalle: resultado
48/125


                  Generar URLs amigables
●   El objetivo es generar enlaces sencillos
●   En lugar de esto:
        –   http://localhost/joomla/index.php?
              option=com_reviews&id=1&task=view&Itemid=1
●   Tener esto:
        –   http://www.dominio.com/reviews/view/1
●   Debemos codificar y decodificar URLs
●   Para ello, activamos el SEF a través del backend
        –   SEF=Search Engine Friendly
49/125


      Generar URLs amigables: activar SEF
●   1. Backend/site/Global
    configuration
50/125


      Generar URLs amigables: activar SEF
●   2. Activar Search Engine
    Friendly URLs
●   3. Activar también Apache
    mod_rewrite, conseguimos
    que en la URL tampoco
    aparezca index.php
51/125


       Generar URLs amigables: activar SEF
●   Renombrar fichero htaccess.txt por .htaccess
●   Este fichero se encuentra en la carpeta raíz del proyecto
    joomla
52/125


       Generar URLs amigables: activar SEF
●   Activar mod_rewrite en Apache2:
Tecleamos lo siguiente en la línea de comandos:
$ sudo a2enmod rewrite
El comando a2enmod (podría ser una abreviatura de Apache2 Enable Module) sirve
para activar módulos que se encuentren en el directorio /etc/apache2/mods-availabley
los pasa al directorio /etc/apache2/mods-enabled.
Ahora lo que sigue es modificar nuestro host donde queremos que aplique el rewrite, en
mi caso sera para todo lo que este dentro de mi localhost, entonces me voy al
directorio /etc/apache2/sites-enabled/ y aquí debe de haber un archivo llamado 000-
default, lo abrimos con vim o nano.
$ sudo vim /etc/apache2/sites-enabled/000-default
Aquí buscamos en las líneas que digan AllowOverride None y las cambiamos
porAllowOverride All. Incluso podemos definir que directorios queremos que aplique es
rewrite y cuales no.
Por último tenemos que reiniciar Apache2:
$ sudo /etc/init.d/apache2 force-reload
Y eso es todo!!!
53/125


        Generar URLs amigables: codificar
●   Las tareas de codificar/decodificar URLs las realizaremos
    en el fichero router.php, que se aloja en la raíz del
    componente (y se tiene que llamar forzozamente así)
●   Dentro de este fichero debe haber una función que se
    llame <mi_componente>BuildRoute(&$query)
        –   En nuestro ejemplo, ReviewsBuildRoute(...)
●   $query es un array asociativo, con la queryString
    parseada
●   Vamos eliminando de ese array las opciones que
    sabemos manejar con unset y vamos insertando en
    $segments los valores
●   Devolvemos $segments
54/125


Generar URLs amigables: codificar
55/125


        Generar URLs amigables: codificar
●   En todos los sitios en los que insertamos un link, hay que
    pasarlo como parámetro a la función JRoute::_
●   Así, en reviews.html.php, en la función showReviews,
    ahora tenemos:
56/125


      Generar URLs amigables: decodificar
●   En el fichero router.php, añadimos la función
    <nombre_componente>ParseRoute($segments)
        –   En nuestro caso ReviewsParseReoute($segments)




●   Listo, ya podemos insertar URLs como
        –   http://www.oursite.com/reviews/view/1
57/125




5. Módulos
58/125


                        Visión global
●   Registrar el módulo
●   Recuperar y obtener parámetros
●   Centralización del acceso a datos y visualización con
    helpers
●   Utilización de layouts
●   Mostrar las últimas reviews
●   Mostrar una review al azar
59/125


                   Registrar el módulo
●   INSERT INTO jos_modules (title, ordering, position,
    published, module, showtitle, params)
    VALUES ('Restaurant Reviews', 1, 'left', 1, 'mod_reviews',
    1, 'style=simplenitems=3nrandom=1');
60/125


     Indicar en qué páginas se debe mostrar
●   En el back-end, vamos a Extensions/Module manager
●   Pinchamos el enlace de nuestro módulo (Restaurant
    reviews)
●   En Menu assignment, marcamos All
●   Guardamos
61/125


            Creación de su estructura básica
●   Directorio del módulo
        –   Joomla/modules/mod_reviews
●   Fichero main dentro del directorio del módulo
        –   mod_reviews.php
●   Inicialmente, el código del main puede ser así:
62/125


            Resultado
●   VACÍO
63/125


               Mostrar los 3 últimos registros



Recuperamos los parámetros
        del módulo




     Cargamos sólo los
     3 primeros registros
64/125


     Desarrollo de algunos Helpers y layouts
●   Helper: Vamos a
    centralizar el
    acceso a datos en
    un clase que
    llamaremos
    helper.php


●   renderReview:
    muestra una única
    review. Crea el link
    y llama al layout de
    una review
65/125


     Desarrollo de algunos Helpers y layouts
●   Layouts
        –   _review.php: muestra una única review
        –   default.php: muestra una lista de reviews
        –   bulleted.php: muestra una lista de reviews
              poniéndole a cada una una viñeta
        –   Cambiamos el main del módulo para que tome los
             helpers y los layouts
66/125


     Desarrollo de algunos Helpers y layouts
●   _review.php: Layout para una única review. Este layout es
    el que invoca renderReview, que es la función del helper
    que muestra una única review
67/125


     Desarrollo de algunos Helpers y layouts
●   default.php: Layout por defecto para mostrar un listado de
    reviews
●   Invoca sucesivamente a renderReview, que a su vez
    llamará a _review, que se encarga de mostra una sola
    review
68/125


     Desarrollo de algunos Helpers y layouts
●   bulleted.php: layout para mostrar un listado de reviews
    con una viñeta acompañando a cada una
69/125


        Desarrollo de algunos Helpers y layouts
  ●   Modificamos el main del módulo, mod_reviews.php, para
      que use los helper y los layouts:




1. Incluye el código del
helper

2. Invoca al método
getReviews del helper
para recuperar la lista
de registros
                             Si no pasamos este parámetro,
                             tomará default.php
3. Incluye el código del
layout bulleted.php
70/125

Desarrollo de algunos Helpers y layouts:
                resultado
71/125


     Desarrollo de algunos Helpers y layouts
●   Podemos cambiar el módulo para que muestre un registro
    al azar, haciéndolo a través de los parámetros del propio
    módulo
72/125




6. Diseño MVC del
     proyecto
73/125


       Modelo: modelar una lista de reviews
●   Crear la carpeta models bajo components/ com_reviews
●   Una clase para recuperar una colección
        –   ModelReviewsAll, Model + <nombre componente>
             + <nombre modelo>
        –   Hereda de JModel
        –   Cada clase modelo se encargará de recuperar los
             datos de base de datos
        –   El fichero se llamará all.php
74/125


Modelo: modelar una lista de reviews
75/125


             Modelo: Modelar una review
●   Fichero review.php bajo models
●   Hereda de JModel
●   Sobreescribimos constructor para recuperar el id.
    Debemos invocar al constructor del padre
●   Tiene un objeto _db que hereda del padre para ejecutar
    consultas
●   El método getList para recuperar una review
76/125


Modelo: Modelar una review
77/125


             Vistas: Estructura de carpetas
●   Carpetas de las vistas
        –   Carpeta views bajo components/com_reviews
        –   A su vez, una subcarpeta para cada tipo de
              visualización, en nuestro caso, una subcarpeta all
              y otra review
        –   Cada subcarpeta alojará la vista que se llamará
             view.html.php
        –   Además, cada subcarpeta debe tener una nueva
             carpeta llamada tmpl, que alojará como mínimo la
             plantilla por defecto default.php
78/125


Vistas: Estructura de carpetas
79/125


      Vistas: vista para ver todas las reviews
●   Vista com_reviews/views/all/view.html.php
●   Hereda de JView
●   La clase se tiene que llamar ReviewViewAll
●   Método display:
        –   Recupera su modelo
        –   Invoca al método getList, para obtener los
              elementos necesarios
        –   Para manipular los datos de la plantilla, utiliza el
             método AssignRef
        –   Invoca al método display del padre con la plantilla
              deseada
80/125


Vistas: vista para ver todas las reviews
81/125


      Vistas: vista para ver todas las reviews
●   Template com_reviews/views/all/default.php
●   Se dedica simplemente a visualizar
●   Maneja un objeto list, que habremos de haber
    suministrado desde la vista (con AssignRef)
●   La lista es una lista de objetos review, que hemos cargado
    con el modelo
82/125


            Vistas: vista para ver una review
●   com_reviews/views/review/view.html.php
●   Hereda de Jview
●   Método display
        –   Recupera el modelo
        –   Dentro del modelo, carga el objeto para la
             visualización
        –   Mediante AssignRef, carga todos los objetos que
             manejará su template
        –   Invoca al método display del padre
83/125


Vistas: vista para ver una review
84/125


          Vistas: vista para ver una review
●   El template o layout default.php se dedicará a mostrar
    mediante HTML uno a uno los campos de una review
●   Mostramos un pequeño fragmento:
85/125


                         Controladora
●   Hereda de JController
●   Fichero controller.php se coloca en la carpeta base del
    componente
●   Debe contener un método display, que se invocará en
    cuanto se ejecute la controladora
●   Contendrá otros métodos para realizar otras acciones
●   El método display...
        –   ...recupera la vista
        –   ...recupera el modelo
        –   ...establece el layout
        –   ...invoca a su vista::display()
86/125


Controladora
87/125


     Iniciar todo: Fichero main del componte
●   Joomla invoca al fichero reviews.php, que es el fichero
    main del componente
●   Carga una instancia de controller
●   Invoca el método execute con lo que haya en el
    queryString en task
●   Si no hay task, ejecuta método display
●   Si en task hay algo, ejecutará el método de la controladora
    que se llame como ese algo
88/125


Iniciar todo: fichero main del componente
89/125


             Codificar/decodificar URLs
●   Debemos retocar el fichero router.php para parsear y
    generar URLs amigables que se ajusten a este nuevo
    esquema
●   La función ReviewsBuildRoute quedaría así:
90/125


             Codificar/decodificar URLs
●   La función ReviewsParseRoute quedaría así:
91/125


               El módulo: corregir links
●   Ya sólo nos falta corregir los enlaces del módulo
    mod_reviews
●   El fichero helper.php, que crea un enlace, modificamos
    $link para que quede así:




                   Actualizamos el enlace para que encaje
                            con el nuevo esquema
92/125


                        Resultado
●   Llegados a esta punto, el front-end funciona exactamente
    igual pero con estructura MVC
93/125


           Reestructuración del back-end
●   Creamos controller.php bajo administrator/ components/
    com_reviews
●   Contendrá una función por cada task, de modo que
    desaparece el mega switch
●   Las funciones dejan de llamarse editReview, saveReview,
    removeReviews y pasan a ser edit, save, remove,...
●   Con registerTask, registramos las tareas o task que va a
    manejar esta controladora
94/125


Reestructuración del back-end
95/125

          Reestructuración del back-end
     Iniciar todo: Fichero main del componte
●   Joomla invoca al fichero admin.reviews.php, que es el
    fichero main del componente
●   Lo modificamos para que utilice la controladora
●   Carga la visualización
●   Carga la controladora
●   Carga las tablas
●   Recuperamos del queryString el task
●   Cambiamos el método default, para que no sea display
    sino showReviews
●   Ejecutamos el task de la controladora
96/125

      Reestructuración del back-end
Iniciar todo: fichero main del componente
97/125


       Paginación: en la carga de registros...
●   En el elemento que carga los registros...
        –   recuperamos la variable limit
        –   recuperamos la variable limitstart
        –   calculamos el número total de registros
        –   lanzamos la consulta con registro inicial y número
              de registros a recuperar
        –   Creamos un objeto JPagination con total, registro
             inicial y número de registros a cargar
        –   A la vista le pasamos las filas cargadas y el objeto
              JPagination
98/125


Paginación: en la carga de registros...
99/125


             Paginación: en la visualización...
●   En la vista...
         –   Simplemente le pasamos el objeto de paginación
               ya configurado
         –   Mostramos un footer en la tabla de visualización de
              registros que muestre los botones de paginación
100/125


Paginación: en la visualización...
101/125




7. Plug-ins
102/125


                  Concepto de plug-in
●   Un plug-in es un trozo de código que se ejecuta cuando
    ocurre algún tipo de evento
103/125


Registrar un plug-in
104/125


                 Fichero main del plugin
●   El fichero main del plugin debe guardarse en Joomla/
    plugins/ content
●   Podemos ponerle el nombre que queramos al fichero
●   En el fichero main tendremos:
        –   Registrar el evento que queremos capturar, con la
             función que se ejecutará cuando tal evento se
             produzca
        –   Función que captura el evento
        –   Funciones auxiliares
105/125

Ejemplo 1: actuar sobre el texto de un artículo
    justo antes de que salga en pantalla
●   Un cliente nos pide que cuando publique un artículo, o una
    noticia,... o cualquier contenido, que si en el texto del
    artículo aparece el nombre de un restaurante,
    automáticamente se reemplace por un hipervículo a la
    crítica sobre ese restaurante
●   Para eso, nuestra función, que se ejecuta justo antes de
    que salga en pantalla el artículo, buscará en su cuerpo, en
    su texto si coincide con el nombre de un restaurante, y
    fabrica el enlace a su crítica, y modifica el texto de dicho
    artículo en memoria para que figure con el hipervínculo
    automáticamente
106/125


          Ejemplo 2: códigos de reemplazo
●   En este nuevo ejemplo, el usuario quiere que si aparece el
    nombre de un restaurante, al final del artículo se incluya la
    información básica del restaurante: precio, dirección,
    teléfono, tarjetas admitidas,...
●   Para eso, el cliente tendrá que escribir donde quiera que
    aparezca esta “caja de información” un “comando” que
    será {review – nombre restaurante}
●   Así que, justo antes de que joomla muestre en pantalla el
    artículo, se ejecutará nuestra función, buscaremos
    mediante expresiones regulares esta llave abrir/llave
    cerrar con la palabra review en medio, y sustituimos ese
    bloque por la información básica del restaurante.
107/125


Ejemplo 2: códigos de reemplazo
108/125

    Ejemplo 3: Capturar el evento de búsqueda
           para añadir otros registros
●   Cuando un usuario utiliza el cuadro de búsqueda
    integrado en Joomla, el sistema sólo busca en los
    artículos, en las noticias,...
●   Si queremos que la búsqueda se realice también dentro
    de las reviews, debemos,...
        –   capturar el evento de búsqueda
        –   hacer una función que lo maneje
        –   buscar dentro de nuestras tablas
        –   mostrar los resultados
109/125

Ejemplo 3: Capturar el evento de búsqueda
       para añadir otros registros
110/125




8. Parámetros de
configuración de
   extensiones
111/125


                Parámetros en los módulos
●   Creamos el fichero mod_reviews.xml justo al lado del
    fichero main de nuestro módulo, bajo
    Joomla/modules/mod_reviews
●   Este fichero tiene una sección global y una sección de
    parámetros
●   La sección global almacena información del módulo:
        –   Nombre del módulo
        –   Autor
        –   Fecha de creación
        –   …
●   La sección de parámetros guarda cada uno de los
    parámetros configurables
112/125


Parámetros en módulos
113/125


               Parámetros en módulos
●   Ya podemos acceder al back-end y configura nuestro
    módulo
114/125


               Parámetros en módulos
●   En el módulo, recuperamos los valores de los parámetros:
115/125


               Parámetros en plugins
●   La cosa cambia un poco
116/125


            Parámetros en componentes
●   La cosa cambia un poco
117/125




9. Agregar campos
   al registro de
      usuarios
118/125


                  Descarga e instalación
●   Descargamos el plugin UserMeta de esta dirección:
        –   http://joomlacode.org/gf/project/usermeta/frs/
●   Desde el back-end de joomla/ extensiones/ instalar-
    desinstalar
●   Localizamos el fichero .zip e instalamos


●   NOTA: NO copiar el fichero .zip dentro del directorio de
    joomla, sino en cualquier carpeta local de nuestro sistema
119/125


               Configuración del plugin
●   Utilizaremos el campo params de la tabla jos_user
●   Desde el back-end, vamos al administrador de plugins, y
    buscamos UserMeta
120/125


               Configuración del plugin
●   En la configuración global/ sistema/ parámetros de
    usuario:
121/125


        Agregamos los campos adicionales
●   Archivo /plugins/system/usermeta/user.xml
●   Modificaremos el primer grupo de parámetros, los que se
    guardan en jos_user
               Parámetros que se guardan    Parámetros que se guardan
              en jos_user en campo params         en otra tabla
122/125


Agregamos campos adicionales

                   Hemos agregado el
                     campo teléfono
123/125

Formulario de registro: mostramos los nuevos
                   campos
●   El formulario de registro se encuentra en
        –   joomla/ templates/ <mi_template>/ html/ com_user/
              register/ default.php
●   Hay plantillas que NO sobreescriben el formulario de
    registro de joomla, de modo que NO existe esta ubicación,
    sino que usan directamente el formulario del sistema, que
    está en
        –   joomla/ components/ com_user/ views/ register/
              tmpl/ default.php
        –   Es el caso de la plantilla ja_purity
●   Si es así, copiamos todo el contenido de esa ubicación del
    sistema y lo volcamos al lugar que le correspondería en
    nuestra plantilla, para NO modificar los archivos del
    sistema
124/125


Resultado
125/125


                    Resultado en BD
●   Y efectivamente, si registramos un usuario, se almacena
    en BD su teléfono

More Related Content

Viewers also liked

Viewers also liked (6)

Joomla 1.5: galería de imágenes rotatoria
Joomla 1.5: galería de imágenes rotatoriaJoomla 1.5: galería de imágenes rotatoria
Joomla 1.5: galería de imágenes rotatoria
 
Joomla 1.5: modificaciones en las plantillas (II)
Joomla 1.5: modificaciones en las plantillas (II)Joomla 1.5: modificaciones en las plantillas (II)
Joomla 1.5: modificaciones en las plantillas (II)
 
Joomla 1.5: galería de imágenes en un artículo
Joomla 1.5: galería de imágenes en un artículoJoomla 1.5: galería de imágenes en un artículo
Joomla 1.5: galería de imágenes en un artículo
 
Ajax: introducción
Ajax: introducciónAjax: introducción
Ajax: introducción
 
Joomla 1.5: instalación y modificación de templates
Joomla 1.5: instalación y modificación de templatesJoomla 1.5: instalación y modificación de templates
Joomla 1.5: instalación y modificación de templates
 
Código limpio
Código limpioCódigo limpio
Código limpio
 

Similar to Joomla 1.5: desarrollo de componentes

Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2Mario IC
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Frameworkricsoc
 
Formación para certificado de administradores
Formación para certificado de administradoresFormación para certificado de administradores
Formación para certificado de administradoresChamilo Association
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Edgar Dueñas
 
Instalación Joomla Ubuntu Hardy Heron
Instalación Joomla Ubuntu Hardy HeronInstalación Joomla Ubuntu Hardy Heron
Instalación Joomla Ubuntu Hardy HeronMae Molina
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelosdokeosla
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...JaenFrankcezco
 
Acceso a base de datos con php
Acceso a base de datos con phpAcceso a base de datos con php
Acceso a base de datos con phpjaumeven
 
Clase 5 controller
Clase 5 controllerClase 5 controller
Clase 5 controllerhydras_cs
 
Cómo crear plugins para Wordpress
Cómo crear plugins para WordpressCómo crear plugins para Wordpress
Cómo crear plugins para Wordpressralcocer
 
Framework kahana
Framework kahanaFramework kahana
Framework kahanaH31D1
 
Joomladay Mallorca 2010 Templates Workshop
Joomladay Mallorca 2010 Templates WorkshopJoomladay Mallorca 2010 Templates Workshop
Joomladay Mallorca 2010 Templates Workshopjoomlaprojects
 

Similar to Joomla 1.5: desarrollo de componentes (20)

Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2
 
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
 
wp-cli
wp-cliwp-cli
wp-cli
 
Formación para certificado de administradores
Formación para certificado de administradoresFormación para certificado de administradores
Formación para certificado de administradores
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Desarrollo de sitios web con php y my sql
Desarrollo de sitios web con php y my sqlDesarrollo de sitios web con php y my sql
Desarrollo de sitios web con php y my sql
 
Instalación Joomla Ubuntu Hardy Heron
Instalación Joomla Ubuntu Hardy HeronInstalación Joomla Ubuntu Hardy Heron
Instalación Joomla Ubuntu Hardy Heron
 
Phpmyadmin
PhpmyadminPhpmyadmin
Phpmyadmin
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelos
 
Performance en Drupal 7
Performance en Drupal 7Performance en Drupal 7
Performance en Drupal 7
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
 
Acceso a base de datos con php
Acceso a base de datos con phpAcceso a base de datos con php
Acceso a base de datos con php
 
Clase 5 controller
Clase 5 controllerClase 5 controller
Clase 5 controller
 
Cómo crear plugins para Wordpress
Cómo crear plugins para WordpressCómo crear plugins para Wordpress
Cómo crear plugins para Wordpress
 
Framework kahana
Framework kahanaFramework kahana
Framework kahana
 
Joomladay Mallorca 2010 Templates Workshop
Joomladay Mallorca 2010 Templates WorkshopJoomladay Mallorca 2010 Templates Workshop
Joomladay Mallorca 2010 Templates Workshop
 
Vistiendo a WordPress
Vistiendo a WordPressVistiendo a WordPress
Vistiendo a WordPress
 

More from Moisés Pérez Delgado

Conceptos básicos de electricidad en mi entorno
Conceptos básicos de electricidad en mi entornoConceptos básicos de electricidad en mi entorno
Conceptos básicos de electricidad en mi entornoMoisés Pérez Delgado
 
Conceptos básicos de electricidad: elementos en mi entorno
Conceptos básicos de electricidad: elementos en mi entornoConceptos básicos de electricidad: elementos en mi entorno
Conceptos básicos de electricidad: elementos en mi entornoMoisés Pérez Delgado
 

More from Moisés Pérez Delgado (20)

02 resistencias y condensadores
02 resistencias y condensadores02 resistencias y condensadores
02 resistencias y condensadores
 
02 croquis y canalizacion
02 croquis y canalizacion02 croquis y canalizacion
02 croquis y canalizacion
 
02 carcasa y fuente
02 carcasa y fuente02 carcasa y fuente
02 carcasa y fuente
 
03 circuitos en cc
03 circuitos en cc03 circuitos en cc
03 circuitos en cc
 
Conceptos básicos de electricidad en mi entorno
Conceptos básicos de electricidad en mi entornoConceptos básicos de electricidad en mi entorno
Conceptos básicos de electricidad en mi entorno
 
Conceptos básicos de electricidad
Conceptos básicos de electricidadConceptos básicos de electricidad
Conceptos básicos de electricidad
 
Conceptos básicos de electricidad: elementos en mi entorno
Conceptos básicos de electricidad: elementos en mi entornoConceptos básicos de electricidad: elementos en mi entorno
Conceptos básicos de electricidad: elementos en mi entorno
 
Naturales temas 01 al 04
Naturales   temas 01 al 04Naturales   temas 01 al 04
Naturales temas 01 al 04
 
Tema 02 elementos del medio natural
Tema 02   elementos del medio naturalTema 02   elementos del medio natural
Tema 02 elementos del medio natural
 
Naturales temas 05 al 07
Naturales   temas 05 al 07Naturales   temas 05 al 07
Naturales temas 05 al 07
 
Matemáticas: Temas 1 a 4
Matemáticas: Temas 1 a 4Matemáticas: Temas 1 a 4
Matemáticas: Temas 1 a 4
 
Tema 1. El planeta Tierra
Tema 1. El planeta TierraTema 1. El planeta Tierra
Tema 1. El planeta Tierra
 
La Tierra
La TierraLa Tierra
La Tierra
 
Cálculo de circuitos: Thévenin
Cálculo de circuitos: ThéveninCálculo de circuitos: Thévenin
Cálculo de circuitos: Thévenin
 
Teoría de circuitos: superposición
Teoría de circuitos: superposiciónTeoría de circuitos: superposición
Teoría de circuitos: superposición
 
Resolución de circuitos con Kirchoff
Resolución de circuitos con KirchoffResolución de circuitos con Kirchoff
Resolución de circuitos con Kirchoff
 
Corriente alterna
Corriente alternaCorriente alterna
Corriente alterna
 
Que sabes de electricidad
Que sabes de electricidadQue sabes de electricidad
Que sabes de electricidad
 
Git: control de versiones
Git: control de versionesGit: control de versiones
Git: control de versiones
 
Qué sabes de word?
Qué sabes de word?Qué sabes de word?
Qué sabes de word?
 

Recently uploaded

texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicaFlor Idalia Espinoza Ortega
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxKarlaMassielMartinez
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 

Recently uploaded (20)

texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamica
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 

Joomla 1.5: desarrollo de componentes

  • 1. 1/125 Desarrollo de componentes, módulos y plugins Joomla 1.5
  • 3. 3/125 El código se estructura en 2 carpetas: back_end y front_end ● Back_end – Joomlaadministrator – components – com_reviews ● Front_end – Joomla – components – com_reviews
  • 4. 4/125 ¿Qué es eso de el front_end y el back_end? ● El front_end contiene el código que ejecutan los usuarios que NO son administradores del sitio web ● El back_end contiene el código que ejecuta el administrador (o los administradores) del sitio web
  • 5. 5/125 Control de flujo ● En un componente se ejecuta una y otra vez el mismo fichero ● En cada vez se invocan diferentes funciones ● La controladora gestiona el flujo ● El modelo gestiona el acceso a datos ● La vista gestiona la visualización en pantalla
  • 6. 6/125 Modificar permisos de directorio ● Debemos modificar los permisos de la carpeta de nuestro sitio web para que el propio Joomla pueda escribir dentro de ella ● Si accedemos en modo administrador Ayuda Permisos de directorio...
  • 7. 7/125 Modificar permisos de directorio ● Desde la shell, sobre nuestro directorio del sitio web escribimos: – sudo chmod -R 777 marudesign/ ● Y ahora, refrescamos la página de permisos:
  • 8. 8/125 2. Iniciación al desarrollo de componentes
  • 9. 9/125 Estructura del componente ● Prefijo com_. Si el componente se llama reviews, las carpetas contenedoras se llamarán com_reviews ● Dos carpetas contenedoras. Una para el front end y otra para el back end: – componentescom_reviews y – administratorcomponentscom_reviews ● Fichero main. – El fichero principal del componente se llamará reviews.php y admin.reviews.php para el back end (El nombre coincide con el nombre del componente) – Este fichero tiene que estar ubicado justo en la carpeta del componente.
  • 10. 10/125 Ejecutar el front end del componente ● index.php?option=com_<nombre_componente> – En joomla siempre se ejecuta el fichero index.php – En el querystring, la variable option designa qué componente ejecutar – http:joomlaindex.php?option=com_reviews – Esto invocará al fichero main del componente, que en nuestro caso es componentscom_reviewsreviews.php – Cualquier cosa que pongamos en este fichero main se ejecutará
  • 11. 11/125 Seguridad: Evitar invocación directa ● Como vemos, joomla hace un routing de la página solicita, no escribimos directamente el fichero .php en la barra de direcciones ● ¿Cómo evitar que un usuario escriba directamente en la barra de direcciones la ruta de nuestro fichero .php? ● En la primera línea debemos escribir este código: <?php defined( '_JEXEC' ) or die( 'Restricted access' ); ... ?> ● De esta manera aseguramos que ha accedido vía joomla!
  • 12. 12/125 Ejecutar el back end del componente ● administrator/index.php? option=com_<nombre_componente> – En joomla siempre se ejecuta el fichero index.php – En el querystring, la variable option designa qué componente ejecutar – http:joomlaadministratorindex.php? option=com_reviews – Esto invocará al fichero main del componente, que en nuestro caso es administrator components com_reviews admin.reviews.php – Cualquier cosa que pongamos en este fichero main se ejecutará
  • 13. 13/125 Registrar el componente ● Registrar el componente implica agregar una línea a la tabla del sistema jos_components
  • 14. 14/125 Creación de barras de herramientas ● Una barra de herramientas se divide en dos ficheros: – toolbar.reviews.html.php ● Se encargará de mostrar/dibujar la barra de herramientas en formato HTML – toolbar.reviews.php ●Decide qué barra de herramientas mostrar, por si tenemos más de una ● Por la simple existencia de estos ficheros, joomla asume que tenemos una barra de herramientas asociada a nuestro componente
  • 16. 16/125 Visión global ● Creación de la tabla de datos ● Creación del formulario básico de creación/edición de registros ● Procesamiento de los datos e inserción en la tabla ● Listado de los datos ● Edición y borrado de datos
  • 17. 17/125 Creación de la tabla de datos ● Creamos la tabla en la que vamos a guardar datos – En el ejemplo será jos_reviews, donde se almacenan las opiniones de los restaurantes ● Se trata simplemente de lanzar un script: – CREATE TABLE jos_reviews (...
  • 18. 18/125 Creación de la clase tabla ● Asociado a la tabla tendremos una clase que maneja los datos de esa tabla ● Hereda de JTable ● El fichero se tiene que llamar review.php porque aloja una única fila de la tabla ● Situaremos este fichero bajo la carpeta Tables ● El nombre de la clase tiene que ser TableReview ● La clase contiene simplemente cada uno de los campos inicializados a null y exactamente con el mismo nombre que los campos de la tabla ● Hay que crear el constructor
  • 20. 20/125 Formulario de inserción de datos ● Dos ficheros: – admin.reviews.php ●Lógica del formulario – admin.reviews.html.php ● Visualización HTML del formulario
  • 21. 21/125 Formulario de inserción de datos: lógica ● fichero admin.reviews.php ● En función de la variable $task, que recupera del qs, realiza una acción u otra ● Para la creación de nuevos registros, $task = 'add' ● Carga el modelo: filas y las listas necesarias ● Invoca a la vista con los valores cargados, en nuestro caso HTML_reviews::editReview que se aloja en el fichero admin.reviews.html.php
  • 22. 22/125 Formulario de inserción de datos: lógica
  • 23. 23/125 Formulario de inserción de datos: lógica Al final invocamos a la vista para que muestre el formulario
  • 24. 24/125 Procesar los datos: detectar tarea save ● Desde el formulario de inserción de datos se redirige a: – admin.reviews.php – option=com_reviews – task=save ● En su switch, debemos invocar a la función saveReviews cuando task=save
  • 25. 25/125 Procesar datos: recuperar y guardar datos función saveReview ● Los datos del nuevo registro llegan desde un formulario ● Cargamos esos datos en una nueva row ● Para ello hacemos: – Creamos una instancia vacía de row – Bindeamos cada uno de sus campos a los valores que llegan en $_POST – CUIDADO: Joomla “limpia” esos campos de caracteres espúreos
  • 26. 26/125 Procesar datos: recuperar y guardar datos función saveReview ● Los datos que contienen HTML, como quicktake y review los cargamos en crudo. ● Para ello hacemos: ● Guardamos la fila en base de datos
  • 27. 27/125 Procesar datos: recuperar y guardar datos funcion saveReview ● Al terminar, redirigimos el navegador:
  • 28. 28/125 Listar todos los registros: visión global ● admin.reviews.php – Capturar el task=showReviews – Crear la función showReviews(), que será la lógica de la visualización ● admin.reviews.html.php – Crear el formulario de visualización bajo la función showReviews()
  • 29. 29/125 Listar todos los registros: capturar task ● En admin.reviews.php
  • 30. 30/125 Listar todos los registros: lógica ● Recuperamos todos los registros ● Los cargamos en $rowsw ● Invocamos a la vista
  • 31. 31/125 Listar todos los registros: visualización ● Simplemente es una table que rellenamos con un for recorriendo cada uno de los elementos que hay en $rows
  • 32. 32/125 Listar todos los registros: visualización
  • 33. 33/125 Editar un registro: visión global ● 1. En admin.reviews.php capturamos task = 'edit' e invocamos al handler ● 2. Modificamos la función editReview que utilizamos para insertar para que recupere los datos del registro a editar
  • 34. 34/125 Editar un registro: visión global ● 3. En la visualización de registros, creamos un link sobre el nombre que nos lleve a la edición
  • 35. 35/125 4. Edición de un registro: visión global ● 4. Modificamos el toolbar para que muestre los botones de guardar, aplicar y cancelar cuando el task es 'edit'
  • 36. 36/125 Eliminar registros ● 1. Capturamos el task = 'remove' en admin.reviews.php:
  • 37. 37/125 Eliminar registros ● 2. Función handler removeReviews
  • 39. 39/125 Visión global ● El fichero reviews.php hará de router ● Se encarga de recoger el task que llega del queryString e invocar a una función handler u otra ● reviews.php básicamente es un mega switch, con una entrada por cada posible task y una lista de funciones handler que gestionan la lógica de cada task ● Las operaciones básicas serán: – Listar todos los registros – Ver en detalle un registro – Añadir comentarios a un registro – Ver los comentarios – Crear enlaces amigables
  • 40. 40/125 Listar los registros ● 1. Capturamos el task – En reviews.php, iniciamos el switch que recoge el task y en base al cual invoca a una función handler o a otra
  • 41. 41/125 Listar todos los registros ● 2. Función handler para el task – Ya hemos capturado el task y ya hemos invocado a la función manejadora de esta tarea. – Código de la función manejadora
  • 42. 42/125 Listar todos los registros ● 3. Vista en el fichero revies.html.php
  • 43. 43/125 Listar todos los registros: resultado Cada registro muestra su nombre y contiene un enlace para la vista en detalle
  • 44. 44/125 Mostrar un registro en detalle ● 1. Capturamos el task
  • 45. 45/125 Mostrar un registro en detalle ● 2. Función handler de task='view' – Carga el registro en $row – Invoca a la vista con $row como parámetro
  • 46. 46/125 Mostrar un registro en detalle ● 3. Vista, muestra el registro que recibe por parámetro
  • 47. 47/125 Mostrar un registro en detalle: resultado
  • 48. 48/125 Generar URLs amigables ● El objetivo es generar enlaces sencillos ● En lugar de esto: – http://localhost/joomla/index.php? option=com_reviews&id=1&task=view&Itemid=1 ● Tener esto: – http://www.dominio.com/reviews/view/1 ● Debemos codificar y decodificar URLs ● Para ello, activamos el SEF a través del backend – SEF=Search Engine Friendly
  • 49. 49/125 Generar URLs amigables: activar SEF ● 1. Backend/site/Global configuration
  • 50. 50/125 Generar URLs amigables: activar SEF ● 2. Activar Search Engine Friendly URLs ● 3. Activar también Apache mod_rewrite, conseguimos que en la URL tampoco aparezca index.php
  • 51. 51/125 Generar URLs amigables: activar SEF ● Renombrar fichero htaccess.txt por .htaccess ● Este fichero se encuentra en la carpeta raíz del proyecto joomla
  • 52. 52/125 Generar URLs amigables: activar SEF ● Activar mod_rewrite en Apache2: Tecleamos lo siguiente en la línea de comandos: $ sudo a2enmod rewrite El comando a2enmod (podría ser una abreviatura de Apache2 Enable Module) sirve para activar módulos que se encuentren en el directorio /etc/apache2/mods-availabley los pasa al directorio /etc/apache2/mods-enabled. Ahora lo que sigue es modificar nuestro host donde queremos que aplique el rewrite, en mi caso sera para todo lo que este dentro de mi localhost, entonces me voy al directorio /etc/apache2/sites-enabled/ y aquí debe de haber un archivo llamado 000- default, lo abrimos con vim o nano. $ sudo vim /etc/apache2/sites-enabled/000-default Aquí buscamos en las líneas que digan AllowOverride None y las cambiamos porAllowOverride All. Incluso podemos definir que directorios queremos que aplique es rewrite y cuales no. Por último tenemos que reiniciar Apache2: $ sudo /etc/init.d/apache2 force-reload Y eso es todo!!!
  • 53. 53/125 Generar URLs amigables: codificar ● Las tareas de codificar/decodificar URLs las realizaremos en el fichero router.php, que se aloja en la raíz del componente (y se tiene que llamar forzozamente así) ● Dentro de este fichero debe haber una función que se llame <mi_componente>BuildRoute(&$query) – En nuestro ejemplo, ReviewsBuildRoute(...) ● $query es un array asociativo, con la queryString parseada ● Vamos eliminando de ese array las opciones que sabemos manejar con unset y vamos insertando en $segments los valores ● Devolvemos $segments
  • 55. 55/125 Generar URLs amigables: codificar ● En todos los sitios en los que insertamos un link, hay que pasarlo como parámetro a la función JRoute::_ ● Así, en reviews.html.php, en la función showReviews, ahora tenemos:
  • 56. 56/125 Generar URLs amigables: decodificar ● En el fichero router.php, añadimos la función <nombre_componente>ParseRoute($segments) – En nuestro caso ReviewsParseReoute($segments) ● Listo, ya podemos insertar URLs como – http://www.oursite.com/reviews/view/1
  • 58. 58/125 Visión global ● Registrar el módulo ● Recuperar y obtener parámetros ● Centralización del acceso a datos y visualización con helpers ● Utilización de layouts ● Mostrar las últimas reviews ● Mostrar una review al azar
  • 59. 59/125 Registrar el módulo ● INSERT INTO jos_modules (title, ordering, position, published, module, showtitle, params) VALUES ('Restaurant Reviews', 1, 'left', 1, 'mod_reviews', 1, 'style=simplenitems=3nrandom=1');
  • 60. 60/125 Indicar en qué páginas se debe mostrar ● En el back-end, vamos a Extensions/Module manager ● Pinchamos el enlace de nuestro módulo (Restaurant reviews) ● En Menu assignment, marcamos All ● Guardamos
  • 61. 61/125 Creación de su estructura básica ● Directorio del módulo – Joomla/modules/mod_reviews ● Fichero main dentro del directorio del módulo – mod_reviews.php ● Inicialmente, el código del main puede ser así:
  • 62. 62/125 Resultado ● VACÍO
  • 63. 63/125 Mostrar los 3 últimos registros Recuperamos los parámetros del módulo Cargamos sólo los 3 primeros registros
  • 64. 64/125 Desarrollo de algunos Helpers y layouts ● Helper: Vamos a centralizar el acceso a datos en un clase que llamaremos helper.php ● renderReview: muestra una única review. Crea el link y llama al layout de una review
  • 65. 65/125 Desarrollo de algunos Helpers y layouts ● Layouts – _review.php: muestra una única review – default.php: muestra una lista de reviews – bulleted.php: muestra una lista de reviews poniéndole a cada una una viñeta – Cambiamos el main del módulo para que tome los helpers y los layouts
  • 66. 66/125 Desarrollo de algunos Helpers y layouts ● _review.php: Layout para una única review. Este layout es el que invoca renderReview, que es la función del helper que muestra una única review
  • 67. 67/125 Desarrollo de algunos Helpers y layouts ● default.php: Layout por defecto para mostrar un listado de reviews ● Invoca sucesivamente a renderReview, que a su vez llamará a _review, que se encarga de mostra una sola review
  • 68. 68/125 Desarrollo de algunos Helpers y layouts ● bulleted.php: layout para mostrar un listado de reviews con una viñeta acompañando a cada una
  • 69. 69/125 Desarrollo de algunos Helpers y layouts ● Modificamos el main del módulo, mod_reviews.php, para que use los helper y los layouts: 1. Incluye el código del helper 2. Invoca al método getReviews del helper para recuperar la lista de registros Si no pasamos este parámetro, tomará default.php 3. Incluye el código del layout bulleted.php
  • 70. 70/125 Desarrollo de algunos Helpers y layouts: resultado
  • 71. 71/125 Desarrollo de algunos Helpers y layouts ● Podemos cambiar el módulo para que muestre un registro al azar, haciéndolo a través de los parámetros del propio módulo
  • 72. 72/125 6. Diseño MVC del proyecto
  • 73. 73/125 Modelo: modelar una lista de reviews ● Crear la carpeta models bajo components/ com_reviews ● Una clase para recuperar una colección – ModelReviewsAll, Model + <nombre componente> + <nombre modelo> – Hereda de JModel – Cada clase modelo se encargará de recuperar los datos de base de datos – El fichero se llamará all.php
  • 74. 74/125 Modelo: modelar una lista de reviews
  • 75. 75/125 Modelo: Modelar una review ● Fichero review.php bajo models ● Hereda de JModel ● Sobreescribimos constructor para recuperar el id. Debemos invocar al constructor del padre ● Tiene un objeto _db que hereda del padre para ejecutar consultas ● El método getList para recuperar una review
  • 77. 77/125 Vistas: Estructura de carpetas ● Carpetas de las vistas – Carpeta views bajo components/com_reviews – A su vez, una subcarpeta para cada tipo de visualización, en nuestro caso, una subcarpeta all y otra review – Cada subcarpeta alojará la vista que se llamará view.html.php – Además, cada subcarpeta debe tener una nueva carpeta llamada tmpl, que alojará como mínimo la plantilla por defecto default.php
  • 79. 79/125 Vistas: vista para ver todas las reviews ● Vista com_reviews/views/all/view.html.php ● Hereda de JView ● La clase se tiene que llamar ReviewViewAll ● Método display: – Recupera su modelo – Invoca al método getList, para obtener los elementos necesarios – Para manipular los datos de la plantilla, utiliza el método AssignRef – Invoca al método display del padre con la plantilla deseada
  • 80. 80/125 Vistas: vista para ver todas las reviews
  • 81. 81/125 Vistas: vista para ver todas las reviews ● Template com_reviews/views/all/default.php ● Se dedica simplemente a visualizar ● Maneja un objeto list, que habremos de haber suministrado desde la vista (con AssignRef) ● La lista es una lista de objetos review, que hemos cargado con el modelo
  • 82. 82/125 Vistas: vista para ver una review ● com_reviews/views/review/view.html.php ● Hereda de Jview ● Método display – Recupera el modelo – Dentro del modelo, carga el objeto para la visualización – Mediante AssignRef, carga todos los objetos que manejará su template – Invoca al método display del padre
  • 83. 83/125 Vistas: vista para ver una review
  • 84. 84/125 Vistas: vista para ver una review ● El template o layout default.php se dedicará a mostrar mediante HTML uno a uno los campos de una review ● Mostramos un pequeño fragmento:
  • 85. 85/125 Controladora ● Hereda de JController ● Fichero controller.php se coloca en la carpeta base del componente ● Debe contener un método display, que se invocará en cuanto se ejecute la controladora ● Contendrá otros métodos para realizar otras acciones ● El método display... – ...recupera la vista – ...recupera el modelo – ...establece el layout – ...invoca a su vista::display()
  • 87. 87/125 Iniciar todo: Fichero main del componte ● Joomla invoca al fichero reviews.php, que es el fichero main del componente ● Carga una instancia de controller ● Invoca el método execute con lo que haya en el queryString en task ● Si no hay task, ejecuta método display ● Si en task hay algo, ejecutará el método de la controladora que se llame como ese algo
  • 88. 88/125 Iniciar todo: fichero main del componente
  • 89. 89/125 Codificar/decodificar URLs ● Debemos retocar el fichero router.php para parsear y generar URLs amigables que se ajusten a este nuevo esquema ● La función ReviewsBuildRoute quedaría así:
  • 90. 90/125 Codificar/decodificar URLs ● La función ReviewsParseRoute quedaría así:
  • 91. 91/125 El módulo: corregir links ● Ya sólo nos falta corregir los enlaces del módulo mod_reviews ● El fichero helper.php, que crea un enlace, modificamos $link para que quede así: Actualizamos el enlace para que encaje con el nuevo esquema
  • 92. 92/125 Resultado ● Llegados a esta punto, el front-end funciona exactamente igual pero con estructura MVC
  • 93. 93/125 Reestructuración del back-end ● Creamos controller.php bajo administrator/ components/ com_reviews ● Contendrá una función por cada task, de modo que desaparece el mega switch ● Las funciones dejan de llamarse editReview, saveReview, removeReviews y pasan a ser edit, save, remove,... ● Con registerTask, registramos las tareas o task que va a manejar esta controladora
  • 95. 95/125 Reestructuración del back-end Iniciar todo: Fichero main del componte ● Joomla invoca al fichero admin.reviews.php, que es el fichero main del componente ● Lo modificamos para que utilice la controladora ● Carga la visualización ● Carga la controladora ● Carga las tablas ● Recuperamos del queryString el task ● Cambiamos el método default, para que no sea display sino showReviews ● Ejecutamos el task de la controladora
  • 96. 96/125 Reestructuración del back-end Iniciar todo: fichero main del componente
  • 97. 97/125 Paginación: en la carga de registros... ● En el elemento que carga los registros... – recuperamos la variable limit – recuperamos la variable limitstart – calculamos el número total de registros – lanzamos la consulta con registro inicial y número de registros a recuperar – Creamos un objeto JPagination con total, registro inicial y número de registros a cargar – A la vista le pasamos las filas cargadas y el objeto JPagination
  • 98. 98/125 Paginación: en la carga de registros...
  • 99. 99/125 Paginación: en la visualización... ● En la vista... – Simplemente le pasamos el objeto de paginación ya configurado – Mostramos un footer en la tabla de visualización de registros que muestre los botones de paginación
  • 100. 100/125 Paginación: en la visualización...
  • 102. 102/125 Concepto de plug-in ● Un plug-in es un trozo de código que se ejecuta cuando ocurre algún tipo de evento
  • 104. 104/125 Fichero main del plugin ● El fichero main del plugin debe guardarse en Joomla/ plugins/ content ● Podemos ponerle el nombre que queramos al fichero ● En el fichero main tendremos: – Registrar el evento que queremos capturar, con la función que se ejecutará cuando tal evento se produzca – Función que captura el evento – Funciones auxiliares
  • 105. 105/125 Ejemplo 1: actuar sobre el texto de un artículo justo antes de que salga en pantalla ● Un cliente nos pide que cuando publique un artículo, o una noticia,... o cualquier contenido, que si en el texto del artículo aparece el nombre de un restaurante, automáticamente se reemplace por un hipervículo a la crítica sobre ese restaurante ● Para eso, nuestra función, que se ejecuta justo antes de que salga en pantalla el artículo, buscará en su cuerpo, en su texto si coincide con el nombre de un restaurante, y fabrica el enlace a su crítica, y modifica el texto de dicho artículo en memoria para que figure con el hipervínculo automáticamente
  • 106. 106/125 Ejemplo 2: códigos de reemplazo ● En este nuevo ejemplo, el usuario quiere que si aparece el nombre de un restaurante, al final del artículo se incluya la información básica del restaurante: precio, dirección, teléfono, tarjetas admitidas,... ● Para eso, el cliente tendrá que escribir donde quiera que aparezca esta “caja de información” un “comando” que será {review – nombre restaurante} ● Así que, justo antes de que joomla muestre en pantalla el artículo, se ejecutará nuestra función, buscaremos mediante expresiones regulares esta llave abrir/llave cerrar con la palabra review en medio, y sustituimos ese bloque por la información básica del restaurante.
  • 108. 108/125 Ejemplo 3: Capturar el evento de búsqueda para añadir otros registros ● Cuando un usuario utiliza el cuadro de búsqueda integrado en Joomla, el sistema sólo busca en los artículos, en las noticias,... ● Si queremos que la búsqueda se realice también dentro de las reviews, debemos,... – capturar el evento de búsqueda – hacer una función que lo maneje – buscar dentro de nuestras tablas – mostrar los resultados
  • 109. 109/125 Ejemplo 3: Capturar el evento de búsqueda para añadir otros registros
  • 111. 111/125 Parámetros en los módulos ● Creamos el fichero mod_reviews.xml justo al lado del fichero main de nuestro módulo, bajo Joomla/modules/mod_reviews ● Este fichero tiene una sección global y una sección de parámetros ● La sección global almacena información del módulo: – Nombre del módulo – Autor – Fecha de creación – … ● La sección de parámetros guarda cada uno de los parámetros configurables
  • 113. 113/125 Parámetros en módulos ● Ya podemos acceder al back-end y configura nuestro módulo
  • 114. 114/125 Parámetros en módulos ● En el módulo, recuperamos los valores de los parámetros:
  • 115. 115/125 Parámetros en plugins ● La cosa cambia un poco
  • 116. 116/125 Parámetros en componentes ● La cosa cambia un poco
  • 117. 117/125 9. Agregar campos al registro de usuarios
  • 118. 118/125 Descarga e instalación ● Descargamos el plugin UserMeta de esta dirección: – http://joomlacode.org/gf/project/usermeta/frs/ ● Desde el back-end de joomla/ extensiones/ instalar- desinstalar ● Localizamos el fichero .zip e instalamos ● NOTA: NO copiar el fichero .zip dentro del directorio de joomla, sino en cualquier carpeta local de nuestro sistema
  • 119. 119/125 Configuración del plugin ● Utilizaremos el campo params de la tabla jos_user ● Desde el back-end, vamos al administrador de plugins, y buscamos UserMeta
  • 120. 120/125 Configuración del plugin ● En la configuración global/ sistema/ parámetros de usuario:
  • 121. 121/125 Agregamos los campos adicionales ● Archivo /plugins/system/usermeta/user.xml ● Modificaremos el primer grupo de parámetros, los que se guardan en jos_user Parámetros que se guardan Parámetros que se guardan en jos_user en campo params en otra tabla
  • 122. 122/125 Agregamos campos adicionales Hemos agregado el campo teléfono
  • 123. 123/125 Formulario de registro: mostramos los nuevos campos ● El formulario de registro se encuentra en – joomla/ templates/ <mi_template>/ html/ com_user/ register/ default.php ● Hay plantillas que NO sobreescriben el formulario de registro de joomla, de modo que NO existe esta ubicación, sino que usan directamente el formulario del sistema, que está en – joomla/ components/ com_user/ views/ register/ tmpl/ default.php – Es el caso de la plantilla ja_purity ● Si es así, copiamos todo el contenido de esa ubicación del sistema y lo volcamos al lugar que le correspondería en nuestra plantilla, para NO modificar los archivos del sistema
  • 125. 125/125 Resultado en BD ● Y efectivamente, si registramos un usuario, se almacena en BD su teléfono