Plantillas de tags

Prontus te permite agrupar el contenido de tu sitio usando tags. Puedes, usando distintas plantillas de tag, generar páginas para agrupar el contenido de tu sitio de un modo muy específico. Por ejemplo, puedes crear una plantilla global, pero también puedes especificar distintos estilos, diseños, o incluso formatos de código para distintos tipos de artículo o distintas tags. Además, puedes definir múltiples vistas para una misma tag.

Publicado: Viernes 28 de Septiembre de 2018 por Equipo de desarrollo AltaVoz
Última modificación: Viernes 26 de Octubre de 2018

Las plantillas de tags o "Tagonómicas" son muy semejantes a las plantillas de taxonomía. La diferencia es que funcionan para un solo tag, determinado por su ID - visible en la página Categorías y Tags -> Administrar Tags del panel de administración de Prontus.

Estructura

Estas plantillas son parecidas a las plantillas de portada, su estructura es:

%%LOOP%%
  <div class="titular">
    <a href="%%_FILE%%" target="_top">%%_TXT_TITULAR%%</a> 
  </div> 
%%/LOOP%% 
%%_msg%% Vea más en las siguientes páginas:| %%_HTML_NROS_PAG%% |%%/_msg%% 
<!-- MSG no_results = No se encontraron resultados. -->

Las portadas de tags no tienen una vista de administración como las portadas principales. No puedes especificar la ubicación de un artículo específico dentro de una tag, solamente puedes configurar el orden global de todos los artículos, usando las variables de configuración presentes en Administrar -> Configuración -> Tags. Puedes ordenar por fecha de creación o publicación, o por orden alfabético del titular, especificando además si el orden debe ser ascendente o descendente.

Cuando le asignas una tag a un artículo y lo guardas, Prontus procesa las páginas de esa tag agregándolo. Del mismo modo, Prontus procesa las tags quitando los artículos que ya no pertenecen a ellas.

El formato de la plantilla puede ser otra cosa que no sea HTML. Puedes perfectamente implementar una plantilla en formato JSON, XML, etc. Lo único que importa es que uses la marca LOOP correctamente, y que ubiques la plantilla en el directorio correcto.

La ubicación normal de las plantillas es /[nombre del prontus]/plantillas/tag/port/all/ y su nombre por convención es tagport.html. Al guardar un artículo de la tag con ID 1 Prontus genera documentos en /[nombre del prontus]/site/tag/port/all/tagport_1_1.html, [nombre del prontus]/site/tax/port/all/tagport_1_2.html, etc.

Es posible preparar plantillas definidas para un solo tag, o para un solo tipo de FID. El código es el mismo, pero cambian la ruta y el nombre del archivo. Por ejemplo,

  • para tener una portada que muestre los artículos de cualquier tipo de FID con el tag ID 373, debes crear una plantilla /[nombre del prontus]/plantillas/tag/port/all/tagport_373.html.
  • para crear una plantilla que genere portadas de artículos con el tag 373 para el fid_noticias, debes usar la ruta /[nombre del prontus]/plantillas/tag/port/fid_noticias/tagport_373.html.
  • por último, no es necesario que el formato sea HTML. Si quieres una portada tagonómica en formato XML, por ejemplo para un feed RSS, puedes crear un archivo XML con la estructura que necesites, en la ruta deseada. /[nombre del prontus]/plantillas/tag/port/all/rss.xml.

Puedes reusar código entre múltiples plantillas creando macros. Las macros para plantillas de tags deben estar ubicadas en el directorio /[nombre del prontus]/plantillas/tag/macros/.

La estructura de una plantilla de portada de tag en formato XML puede ser:

<?xml version='1.0' encoding='utf-8'?>
<rss version="2.0">
  <channel>
    <title>[NOMBRE]</title>
    <link>http://www.[DOMINIO].cl/</link>
    <description>[TEXTO]</description>
    <ttl>60</ttl>
        %%LOOP%%
         %%IF(_fid eq fid_general)%%
          <item>
                <pubDate>%%_UTCP%%</pubDate>
                <title>%%_titular.xml%%</title>
                <link>http://%%_SERVER_NAME%%%%_FILEURL%%</link>
                <guid>http://%%_SERVER_NAME%%%%_FILE%%</guid>
                %%IF(_TXT_BAJADA)%%<description>%%_bajada.xml%%</description>%%/IF%%
          </item>
          %%/IF%%
        %%/LOOP%%
  </channel>
</rss>

Para definir el número de artículos a desplegar por portada tagonómica debes editar el archivo de configuración [nombre del prontus]/cpan/][nombre del prontus]-tag.cfg, y definir este valor en el parámetro TAGPORT_ARTXPAG. Puedes manipular el comportamiento general de ésta y otras variables relacionadas con las plantillas de tags desde el panel de administración de Prontus, en la sección "Tags". Puedes ver más información al respecto en el artículo respectivo.

Puedes filtrar contenido (como en las plantillas de taxonomía), mediante marcas Prontus reservadas, para excluir portadas específicas, o áreas de esa portada, y para especificar tipos de FID a mostrar:

%%_EXCLUDE_PORT_AREA=1,2%%
%%_EXCLUDE_PORT=inicio.xml%%
%%_FIDS=fid_galeria,fid_audio%%

En el ejemplo, estarías excluyendo de esa portada de tag los artículos de tipo galería o audio, y los que se encuentren en la portada inicio en las áreas 1 ó 2. Tal como en las plantillas de lista, la marca reservada _EXCLUDE_PORT_AREA permite especificar más de un área de una portada.

Nota: debes hacer referencia al archivo XML de la portada, en este caso inicio.xml, y no al HTML. Puedes aprender más sobre los archivos XML de portada en el artículo Plantillas de portada.

Generación de portadas

La generación de portadas de tags se produce cada vez que se guarda un artículo. Para cada tag se gatilla un proceso que genera las portadas correspondientes. Este proceso se ejecuta en paralelo, generando la primera página de cada portada de tag primero. Puedes evitar que se regeneren las tags deshabilitando la opción REGENERACION_TAX_TAG en Administrar -> Configuración -> Configuración Global, si no quieres que Prontus genere en ningún caso portadas de tags, ya sea temporal o permanentemente. Por ejemplo, si estás haciendo ediciones a muchos artículos, tal vez prefieras deshabilitar la opción REGENERACION_TAX_TAG mientras trabajas, y rehabilitarla y regenerar todo al terminar de trabajar.

Prontus implementa chequeos para controlar la performance del sistema con la librería lib_maxrunning.pm. En particular, se controla que no haya más de una instancia del proceso prontus_regenera_tagport. A su vez, el proceso prontus_regenera_port controla que no se instancien más de 15 procesos hijos prontus_cron_tagport, si se da esa eventualidad, frena con un sleep por 2 segundos hasta que los procesos hijos sean menos de 15 nuevamente. Si se debe invocar sleep por más de 5 ciclos, se gatilla un proceso prontus_cron_tagport de todos modos, y el conteo vuelve a comenzar.

Si tienes acceso a la interfaz de línea de comandos del ambiente donde está instalado Prontus, puedes usar el script prontus_regenera_tagport.cgi, que permite regenerar todas las portadas de tags. Su uso es

<path a perl> <path al webroot>/cgi-cpn/prontus_regenera_tagport.cgi <prontus_id> [fid_a_actualizar]

El parámetro fid_a_actualizar es opcional: es el nombre de un FID específico. Por ejemplo:

/usr/bin/perl /var/www/site.cl/cgi-cpn/prontus_regenera_tagport.cgi mi_prontus fid_noticia
Marcas de sección, tema y subtema

Prontus te permite usar las marcas _tag y _tag_nom en las plantillas de portada de tag fuera de las marcas LOOP. Puedes usar las marcas IF con estas nuevas marcas reservadas.

Múltiples loops

Aunque lo común es que una plantilla de tags contenga una sola marca LOOP, e itere una vez por cada artículo publicado con esa tag, es posible, si lo necesitas, usar múltiples loops. En este caso, tu plantilla se verá así:


%%LOOP1%%
  <div class="titular">
   <a href="%%_FILE%%">%%_TXT_TITULAR%%</a>
  </div>
%%/LOOP%%

%%LOOP2%%
  <div class="titular titular-alternativo">
   <a href="%%_FILE%%">%%_TXT_TITULAR%%</a>
   %%_txt_bajada%%
  </div>
%%/LOOP%%
Paginado

Es posible configurar dos tipos distintos de paginación, el modo estándar, que muestra el total de páginas dentro de la tag; y otro mostrando la página actual, un número configurable de páginas hacia adelante y hacia atrás, y la primera y última páginas. Por ejemplo, al visitar la página 8 de una portada de tag, un usuario vería la siguiente lista de enlaces:

1 ... 5 6 7 (8) 9 10 11 ... 20

El tipo de paginación y -en caso de elegir el modo breve- el número de páginas a mostrar son configurables desde la sección Administrar -> Configuración -> Tags del panel de administración de Prontus. Las variables relevantes se describen en el artículo sobre Configuración de Tags, y son TAGPORT_TIPO_PAGINACION y TAGPORT_PAGCORTA_MAXPAGS. Al modificar esta configuración sobre un Prontus ya activo deberás regenerar las portadas de tags. Para esto puedes visitar la página Administrar -> Mantenimiento -> Regeneración del panel de administración de Prontus. Este es un proceso relativamente oneroso.

Paginación Custom

Las plantillas de tags también soportan el sistema de paginación que usan las portadas taxonómicas, como puedes leer en el artículo correspondiente.

Puedes configurar el paginado directamente en la plantilla, con las siguientes opciones:

  • HTML de cada número de página:
    <!-- CONFIG HTML_NRO_PAG = <a class="pag_number" href="%%lnk%%">%%cnro_pag%%</a> -->
  • HTML de la página actual:
    <!-- CONFIG HTML_PAG_ACTUAL = <span class="current_pag">%%cnro_pag%%</span> -->
  • Separador que aparece al utilizar páginación tipo Google:
    <!-- CONFIG HTML_SEPARADOR = <span>...</span> -->
  • Mensaje a mostrar si no hay artículos con ese tag:
    <!-- MSG no_results = No se encontraron resultados. -->
Multivistas

Si están habilitadas las multivistas, la estructura de directorios es un poco diferente a la de artículos y portadas normales. Si habilitaste una vista llamada "movil", deberás ubicar las plantillas de esa vista en los subdirectorios /[nombre del prontus]/plantillas/tag/port/all-movil/, /[nombre del prontus]/plantillas/tag/port/fid_noticia-movil/, etc., no en /[nombre del prontus]/plantillas/tag/port-movil/all/ como podrías suponer.

Plantillas paralelas

No puedes asignar específicamente plantillas paralelas, pero puedes poner múltiples plantillas en los directorios mencionados antes, y Prontus generará portadas de tags paginadas para cada una de ellas. Ten cuidado, ¡esto puede implicar la creación de muchos archivos! Por ejemplo, si ubicas las plantillas tagport.html y rss_tag.xml en el directorio /[nombre del prontus]/plantillas/tag/port/all/, Prontus generará para cada tag dos series de archivos: tagport_1_1.html, tagport_1_2.html, tagport_2_1.html, tagport_2_2.html, ..., rss_tag_1_1.xml, rss_tag_1_2.xml, rss_tag_2_1.xml, rss_tag_2_2.xml, ... en /[nombre del prontus]/site/tag/port/all/.

Portadas de tags filtradas por tipos de artículos

Prontus permite filtrar los artículos en las portadas de tags, análogamente a la funcionalidad disponible para las portadas de taxonomía. Esta funcionalidad se aplica a un directorio de plantilla con un nombre especial. Para aprovechar esta funcionalidad debes realizar los siguientes pasos:

  1. Crear un directorio en plantillas de tagport, /[nombre del prontus]/plantillas/tag/port que comience con el prefijo fil_, como el siguiente:
    /< prontus_id >/plantillas/tag/port/fil_ejemplo
  2. En este directorio se debe crear un archivo llamado filtros.cfg, el cual permite configurar las siguientes variables:
    TAGPORT_FIDS = 'fid_foto,fid_formulario'
    TAGPORT_PLANTILLAS = 'tagport.html'
    TAGPORT_FECHA_DESDE = '20150602'

Donde:

  • TAGPORT_FIDS corresponde a los tipos de FID que deseamos incluír en el filtro, separados por comas.
  • TAGPORT_PLANTILLAS hace referencia a una o mas plantillas que se usarán para las salidas. Por ejemplo, si en 'all' existen 4 plantillas distintas, solo se usará la indicada en la configuración minimizando el número de archivos creados. Cuando se agrega más de una plantilla, deben separarse con comas.
  • TAGPORT_FECHA_DESDE especifica la fecha de publicación más antigua a considerar. El formato usado debe ser AAAAMMDD. Por ejemplo, 20180513.

Si el archivo de configuración no existe, el comportamiento será igual al de la plantilla 'all' sin filtrar. Por lo demás, el uso de las plantillas y la estructura de archivos es igual al de las demás plantillas de taxonomía y de tags.

Artículos Relacionados