Un contador de artículos en el gestor de categorías: ¿una posible nueva funcionalidad?

Escrito por | 01 Julio 2015 | Publicado en Julio 2015
De entre todo el montón de gente increíble que conocí en el Joomla & beyond 2015, tuve la oportunidad de conocer a Peter Martin, un crack del mundo Joomla y una gran persona. En una de esas interesantes conversaciones, Peter me platicó su idea de una nueva funcionalidad en Joomla y de cómo había surgido.

En el último día del JAB15, todos nos perdimos por el centro de la ciudad y en camino al increíble Castillo de Praga tuve la fortuna de encontrarme con Peter. Pasamos una gran tarde. Fue cuando me enteré de la idea que de pronto le surgió y del proceso se sigue para terminar como una funcionalidad de nuestro CMS. A continuación presento una adaptación al español de su artículo “Category Item Count: A possible new feature?” de la edición de Junio en la Magazine Joomla en inglés.

 

“¿Cuál es el proceso para que una nueva característica forme parte de Joomla? Esta es la historia de cómo una nueva característica es desarrollada y cómo termina formando parte del CMS. Desde la concepción de la idea, el desarrollo, la opinión y ayuda de la comunidad, las pruebas, y (ojalá) la inclusión en el código del núcleo. La historia que estás a punto de leer es verídica; Solo algunos nombres no fueron cambiados para darle crédito a quienes me ayudaron.

 

“Es una lástima que el Gestor de Categorías de Joomla! ya no tenga un contador de artículos”, me dijo Marc Dechèvre cuando nos reunimos hacia el final de la tarde. Era el final del primer día del Joomla Day Francia 2015 y había sido un gran día: Había conocido mucha gente del mundo Joomla!, había dado mis charlas sin mayores problemas, y teníamos otra jornada de joomladay por delante. Entendí lo que Marc decía y me encontré a mí mismo diciendo, “No debería ser muy difícil de desarrollar…”

 

Marc tenía un excelente punto al respecto. Yo ya me había preguntado lo mismo. Joomla 1.5 tenía una característica genial en el gestor de categorías que incluía el número de artículos que tenía cada categoría. Sería una buena forma de tener una vista general de la cantidad de artículos en cada categoría y los diferentes estados.

 

Joomla Mejoró el Gestor de Categorías.

 

Han habido grandes mejoras en el gestor de categorías desde la versión 1.5: Joomla 1.6 eliminó las Secciones, Introdujo categorías anidadas y agregó etiquetas de idioma. Joomla 3.x hizo el backend completamente responsivo y cambió la experiencia de usuario. El quitar el contador de artículos no fue una mejora desde mi punto de vista, pero el considerar todas las mejoras, me hizo no darle mucha importancia.

 

Cuando llegue a mi hotel, aún era antes de media noche. El primer día del Joomladay Francía había sido divertido y exhaustivo. Aquel “No debería ser muy difícil de desarrollar…” hacía eco en mi cabeza. Decidí internarme en Joomla para tratar de agregar un nuevo contador para la versión en desarrollo de Joomla! 3.4.2

 

El gestor de menús de Joomla tiene un contador similar al que yo quería en el gestor de categorías. Observé el código de la vista HTML del com_menus y desarrollé algo similar en la vista HTML del com_categories. No mostró ningún número por supuesto, no había implementado el contador en el modelo “categorias” del com_categories. Cuando abrí el modelo, algo más que un “caramba” cruzó por mi mente: Agregar un contador podría ser más difícil de lo esperado.

 

Los poderes ocultos del com_categories.

 

Muchos componentes usan categorías para organizar sus elementos: Anuncios, Contactos, Newsfeeds, Weblinks. En el pasado estos componentes tenían su propio código para su propia implementación de categorías. Cuando Joomla 1.6 fue desarrollado, el com_categories se hizo genérico, es decir, que el mismo código fue utilizado para el gestor de categorías para todos los componentes. Esto fue hecho de una forma elegante: Si puedes dirigirte al componente com_categories en el backend utilizando la URL de forma manual, entonces lo puedes usar para crear categorías para cualquier componente. Comparemos las siguientes URLs:

 

Gestor de artículos: Artículos (via Contenido > Gestor de artículos) tiene la URL:

/administrator/index.php?option=com_content&view=articles

 

Gestor de categorías: Artículos(Contenido > Gestor de categorías) tiene la URL:

/administrator/index.php?option=com_categories&extension=com_content

 

Ahora compara con otro componente nativo

.

Gestor de anuncios: Anuncios (via Componentes> Anuncios > Anuncios) tiene la URL:

/administrator/index.php?option=com_banners

 

Gestor de categorias: Anuncios (via Componentes > Anuncios > Categorias) tiene la URL:

/administrator/index.php?option=com_categories&extension=com_banners

 

Ahora veamos un componente nativo que no usa categorías:

Gestor de redirecciones: Redirecciones (via Componentes > Redireción) con la URL:

/administrator/index.php?option=com_redirect

 

Construyamos una URL para abrir el com_categories con la extensión com_redirect:

/administrator/index.php?option=com_categories&extension=com_redirect

Esta última URL va al Gestor de Categorías el cual muestra “Gestor de categorias: Redireccionar”. Elige “nuevo” para crear una nueva categoría y observa el título “Gestor de categorías: Añadir un Redireccionar de categoría”. Después de “guardar y cerrar” ¡obtienes una categoría para los elementos de Redirección! Notarás que no puedes usar esa categoría en tus elementos de Redirección pues el componente no usa categorías para almacenar sus elementos.

 

Y, ¿Dije “elegante”?. En realidad quise decir “muy elegante” porque el código está construído de forma tan genial que incluso puedes usarlo para componentes de terceros. Todo lo que necesitas en tu componente es: un campo en la base de datos para almacenar la categoría (ejemplo, catid), un campo catid en los forms .xml, y un método “addSubmenu” en el archivo helper para crear los campos de left menu (con items y categories, por ejemplo). Sin embargo, debido a que es tan genérico, no pude agregar mi contador de artículos con solo un pequeño cambio en el modelo del componente.

 

Regresando al contador de elementos de categorías.

 

El segundo día comencé pensando en lo pequeño del croissant francés que desayuné. En realidad, me encontré meditando sobre las diferencias gastronómicas que tenemos en los diferentes países. Los americanos con sus desayunos fuertes y sus panqueques en la mañana. y ¿quién no conoce el desayuno inglés de tocino, huevos y judías?. Yo acostumbraba el desayuno holandés (nada sofisticado, solo algo de cereal o delgadas rebanadas de pan). Los alemanes tienen rebanadas de pan también pero no pueden ser felices con las rebanadas de carne o queso estilo papel de los holandeses (de hecho, nadie es feliz con eso, ni siquiero los holandeses, pero aún no lo sabemos).

 

Regresando al evento, fuí al Pizza Bugs & Fun room donde expliqué que el problema era un poco más complejo de lo que esperaba, los problemas los comenté con Roland Dalmulder y Viktor Vogel. Roland sugirió una posible solución: una sentencia if  que compruebe “com_content” en el gestor de categorías. De esta manera desarrollaría la característica solo para el com_content. Estuvimos de acuerdo en que quizá esa no era la mejor manera pero al menos me dejaría cerca de una solución.

 

Creé una nueva rama del Git en mi localhost, escribí mi código y creé un nuevo Pull request (PR) en gitHub para que otros usuarios puedan probarlo y dar retroalimentación https://github.com/joomla/joomla-cms/pull/6916

 

Y hubo retroalimentación… (gracias a todos!). Brian Teeman apuntó que la plantilla “Hathor” usa overrides. ¿Hathor? Sí, ya sabes, la otra plantilla para el administrador que no es responsiva y que en mi opinión no muchos utilizan. Decidí no hacer doble trabajo y creé una versión libre de errores para después agregarla a los overrides de “Hathor”.

 

Tobias Zulauf me refirió a Travis, quien no estaba muy feliz con mi código. Travis CI es un servicio open-source para probar tu código con diferentes versiones PHP y probar consistencias en el estilo de código. Travis no estaba contento con que utilizara espacios en lugar de tabuladores. Tuve que hacer algunos cambios en la configuración de mi editor PHPStorm y los espacios se convirtieron en tabuladores reales.

 

Más de la retroalimentación que tuve fue sobre la alineación, el comportamiento responsivo con dispositivos móviles, y la columna para “archivado” que faltaba. Usé este feedback para mejorar mi característica. Incluso incluí algunas otras opciones: Agregué hipervínculos a los contadores, así que puedes navegar fácilmente hacia los artículos, filtrando por la categoría y el estado que seleccionaste.

 

Para el final del segundo día del Joomladay Francia 2015, la nueva característica estaba funcionando. Aunque solo sea para los artículos, estaba feliz con los resultados. Y Marc también…”

 

Ahora solo resta esperar que esta nueva funcionalidad se mejore y se libere. Esperemos nuevas noticias en la edición en inglés de este més de la cual ya les estaré dando cuentas en la edición en español de Agosto. Sobra decir que puedes participar con ideas y sugerencias de código en el link de github:  https://github.com/joomla/joomla-cms/pull/6916

 

Gracias por su amable lectura y nos leemos el próximo mes.

Visto 2928 veces Etiquetado como Desarrollador, Spanish
Luciano Martínez

Luciano Martínez

Desde Ciudad de México. 

Licenciado en Sistemas de Computación Administrativa por la Universidad del Valle México. Programador php desde 2009 y usuario apasionado de Joomla! desde el mismo año. 

Desarrollo sitios web con Joomla desde el 2010. 

Actualmente participo activamente con recomendaciones y ayuda a otros usuarios dentro del JUG de la Ciudad de México en Facebook.

Mi objetivo dentro del Jooma Magazine es aportar artículos sobre las experiencias y retos que he tenido con Joomla y cómo, quizá de la manera menos elegante, he dado con una solución eficaz y que me ha dejado mucho aprendizaje. 

Al pertenecer a esta comunidad, también deseo aprender. Creo firmemente que el aprendizaje es el camino del éxito y es mejor si este aprendizaje es recíproco.