7 minutes reading time (1424 words)

La vía elegante de agregar campos al com_content

La vía elegante de agregar campos al com_content

Hace unos días me ofrecí a traducir este artículo de la Magazine en inglés: "Adding Fields to com_content The Smart Way", escrito por Don Cranford. Mientras lo traducía, me dí cuenta de que faltaban partes para que la explicación fuera "redonda", así que decidí instalar el plugin y usarlo para poder agregar más informaciones al artículo.

Lo que ofrece el plugin es una forma simple de agregar campos adicionales sin necesidad de instalar extensiones gigantescas a Joomla!. Claro que para hacer un plugin o incluso para usar el de Don Cranford hay que tener conocimientos de programación.

 

 

Aquí va el artículo original traducido, con ampliaciones y explicaciones mías.

Artículo original:

Recientemente estuve trabajando en un proyecto donde necesitaba agregar testimonios de los clientes. Quería tener el resultado en formato schema.org/Reviews. Buscando soluciones todo lo que encontraba era más de lo que necesitaba. Mi meta era hacerlo lo más simple posible de usar para el cliente, pero teniendo el resultado en el formato correcto. El procedimiento más fácil para mi cliente fué agregar campos adicionales en la extensión de  artículos (com_content) dentro de Joomla. Por supuesto yo no quería cambiar el código de com_content o la tabla #__content en Joomla. De otra manera produciría dolores de cabeza en el mantenimiento y los upgrades de Joomla. Plugins al rescate!

La arquitectura de los plugin en Joomla es extremadamente flexible y te permite hacer cosas increibles sin cambiar el código central.

Objetivos del plugin

Decidí tener los siguientes objetivos para este plugin:

  • Agregar campos adicionales a los ya existentes en el gestor de artículos para permitirle al cliente entrar datos extra para los testimonios.
  • Los testimonios se guardarán en una categoría específica o en una de sus categorías hijas.
  • El resultado que la página mostrará en el front-end tendrá el formato schema.org/Review.

Los dos primeros objetivos serán cubiertos por el plugin. El tercero se logrará a través de un override del layout.

"Simplificado: primero creamos una categoría donde vamos a guardar nuestros testimonios."

 

Screenshot 018

La estructura del archivo

El plugin tiene que tener la estructura siguiente:

ksextras

|-> ksextras.php

|-> ksextras.xml

|-> extras

|-> ksextras.css

|-> testimonial.xml

|-> language

|-> en-GB

|-> en-GB.plg_content_ksextras.ini

|-> en-GB.plg_content_ksextras.sys.ini

|-> sql

|-> install.mysql.utf8.sql

|-> uninstall.mysql.utf8.sql

|-> update

|-> install.mysql.utf8.sql

 

Siéntete libre de bajar los archivos en mi cuenta de github:

https://github.com/katalystsol/plg_content_ksextras

 

Archivo XML de instalación

https://github.com/katalystsol/plg_content_ksextras/blob/master/plugins/content/ksextras/ksextras.xml

Dado que no tenemos espacio para mostrar en detalle cada parte del archivo, quiero mencionar los puntos más importantes.

El group="content" le comunica a Joomla de qué tipo de plugin se trata y qué mecanismos podemos usar.

Ya que vamos a guardar los datos en una tabla separada, tenemos que incluir la opción con los archivos SQL relacionados. También incluimos las opciones "uninstall" y "update" en el caso de que en el futuro querramos desinstalar o actualizar nuestro plugin. La opción "uninstall" hará correr el SQL para borrar la tabla. Otro archivo puede contener SQL para actualizar el esquema de la tabla.

En el bloque también vamos a fijar algunos parámetros que podemos usar dentro del plugin, así no tenemos que escribir esta información en el código mismo. Estos incluyen la Organización, la compañía a la que le pertenece la website y que está siendo reseñada. Vamos a incluir algunos campos que son necesarios para el formato schema.org/Review. Vamos a ser capaces de fijar una categoría en la que los campos de testimonios se mostrarán y si se incluirán las categorías hijas.

"Así es como se ve el plugin una vez instalado"

Screenshot 016

Screenshot 017

 

Archivo PHP del plugin

El archivo principal del plugin es ksextras.php.

Algunos puntos a destacar:

__construct

En el método __construct queremos usar este plugin sólo para la componente com_content. Así tomaremos el parámetro "option" y si no es com_content terminamos y no procesamos el resto del plugin.

 

onContentPrepareForm

Este método prepara los campos del formulario que queremos agregar en la ventana editora del gestor de artículos. Agregará los campos adicionales en una pestaña separada. El nombre de esta pestaña esta controlada a través del archivo de lenguaje usando la constante “PLG_CONTENT_KSEXTRAS_SLIDER_LABEL” del archivo principal .ini de lenguaje.

Primero comprobaremos si la id de la categoría está fijada. Si no, seguimos adelante y mostramos los campos adicionales ya que el usuario querrá usarlos para la categoría de testimonios. Si la la id de categoría está fijada para otra que la categoría asignada en los parámetros del plugin entonces no mostraremos los campos adicionales.

Desde aquí tomaremos los campos adicionales del archivo extras/testimonial.xml. Entonces, si hay una id de artículo existente, estamos en el modo editor y necesitamos consultar la base de datos para obtener los datos.

 

onContentPrepareData

Este método nos regresa y prepara los datos.

 

setKSFields

Este método fija un array de campos para ser usado en los datos. Usamos esos campos para llenar datos en el método onContentPrepareForm. Si tu modificas los campos en el archivo de formulario XML (ver más abajo), tendrás que agregar estos campos al array ksfields. Esto es una comodidad para evitar tener que escribir código extra al final del método onContentPrepareData y nos permite pasar por los campos y fijar automáticamente los valores.

Para aprender más sobre los diversos eventos, puedes visitar:

http://docs.joomla.org/Plugin/Events/Content

 

Archivo de formulario XML

En la carpeta "extras" tenemos un archivo JForm XML que define los campos usados por el plugin. Son los campos que se mostrarán en la pestaña en el formulario editor de artículos. Tu puedes agregar o modificar este archivo para cambiar los campos que quieres usar. Asegúrate que el método setKSFields está modificado para los campos de este archivo XML.

Para aprender más sobre los diferentes tipos de campos, puedes visitar:

http://docs.joomla.org/Form_field

 

“Los testimonios no son otra cosa que artículos con campos adicionales que permiten que esa información aparezca en el formato schema.org/Review, un tipo de microformato que es interpretado por los buscadores como Google.”

Screenshot 019

 

“Aquí están los campos adicionales que creamos con el plugin:”

 

Screenshot 020

 

Archivos de lenguaje

Idealmente tu puedes ajustar tu plugin para usar diferentes idiomas. Esto se puede hacer a través de los archivos de lenguaje .ini que se encuentran en language/en-GB/en-GB.plg_content_ksextras.ini.

"Este archivo se puede tomar de base para crear otros idiomas, por ejemplo es-ES.plg_content_ksextras.ini"

 

Uso: Layout Overrides

Para poder usar los campos en tu sitio web tienes que crear un override del layout.

 

Accediendo a los atributos de los artículos / Datos KSExtras

Para acceder a los datos desde tu override del artículo, puedes usar algo similar al código siguiente:

 

$ksattribs = json_decode($this->item->attribs);
$testimonial_by = $ksattribs->testimonial_by;
$author_job_title = $ksattribs->author_job_title;

 

Si estás usando el plugin en un override de módulo, tu código va a ser un poco diferente. En vez de referenciar “$this->item->”, tienes que hacer referencia a “$item->”.

 

$ksattribs = json_decode($item->attribs);
$testimonial_by = $ksattribs->testimonial_by;
$author_job_title = $ksattribs->author_job_title;

 

Accediendo a los parámetros del plugin:

Para obtener los parámetros del plugin, puedes usar algo como:

 

$plgParams = new JRegistry();
$plugin = JPluginHelper::getPlugin('content', 'ksextras');
if ($plugin && isset($plugin->params))
{
   $plgParams->loadString($plugin->params);
}
$this->organization = $plgParams->get('organization', 'org was not found');
$this->organization_type = $plgParams->get('organization_type', 'Organization');

 

Para aprender más acerca de overrides de layouts, puedes visitar:

http://docs.joomla.org/Layout_Overrides_in_Joomla

 

Uno vez que instales el plugin, necesitas primero fijar los parámetros del plugin a través de Extensiones >> Gestor de plugins.

"Don Cranford ha creado ya un override de layout o layout alternativo para los testimonios. Este layout está basado en el formato blog y se puede "instalar" en la carpeta html/com_content/category/ de tu plantilla. Aquí se puede mirar en detalle como está construido el testimonials_item.php (https://github.com/katalystsol/plg_content_ksextras/blob/master/templates/protostar/html/com_content/category/testimonials_item.php) que es el archivo que finalmente genera los testimonios para mostrar en el front-end. Con este layout alternativo se puede crear un item de menu especial para los testimonios. Aquí no aparece bien el nombre del tipo de menu porque la constante de idioma no está definida todavía."

 

Screenshot 021

Screenshot 022

 

"El resultado se ve así:"

 

Screenshot 023

 

"Por supuesto que analizando la estructura del layout podemos usar las diversas clases para modificar el aspecto usando CSS"

 

Conclusión

Hemos cubierto una gran parte de cosas básicas. Estoy seguro que hay muchas formas de mejorar y ampliar este plugin. Así que experimenta y diviértete!


“Este plugin es una muy buena idea y una forma relativamente fácil de entrar en el tema de creación de plugins. Vale la pena echarle un vistazo en detalle a los archivos en github para poder entender mejor el sistema.”

Traducido del inglés - Adding Fields to com_content The Smart Way

0
Впереди золотые времена - вот где происходит само ...
 

Comments

Already Registered? Login Here
No comments made yet. Be the first to submit a comment

By accepting you will be accessing a service provided by a third-party external to https://magazine.joomla.org/