Notas de Plone

How-to, tutorial y formacion en español

Cómo gestionar los templates dentro de Plone4

with 2 comments

Gracias a Denys Mishunov para sus valiosos consejos.

Plone 4 será una pequeña revolución para el mundo de nuestro CMS preferido, trayendo muchímas mejorías y una reforma del código fuente (también gracias a python 2.6). Tenemos no obstante que recordar que un cambio así de grande significa un cambio de nuestro enfoque al desarollo dentro de plone.

En primer lugar lo que ha sido prácticamente reinventado es el main_template.pt, el template de los templates, por eso tienes que ser muy claro que si has construido un portal modificando (argh!) este fichero te esperan muchas horas de trabajo más para una migración plone3 -> plone4.

Aquí tienes un pequeño listado de los slot que han sido reformados:

  • content-title: el slot que automatiza el nombre de la view llamada;
  • content-description: el slot que automatiza el campo description de la view/objecto llamado;
  • content-core: el slot puesto después la description y hace el render del contenido principal de el objecto visualizado y/o la view, por ejemplo puede visualizar un texto si estamos llendo un objeto «página» o puede visualizar el listado de los objetos contenido dentro la carpeta si estamos en un objeto «foldership»
  • main: como en plone3. Eso para garantizar una retrocompatibilidad del código ya escrito y para imprimir en vídeo el contenido de view que no tienen necesidad de viewlet-managers adjuntos.

Viewlet mangers

Todos los viewlet-managers, puestos en los propios template, para gestionar viewlets en la columna del contenido en plone3, ahora se pueden activar en el main_template utilizando los slots. Eso significa que si tenemos nuestro propios objetos que necesitan la activación de viewlet-manager tendrá que poner la gestión de esos en los slots ya existentes en el main_template.

Un bueno inicio para comprender mejor lo que escribí es leer el código fuente de document_view.pt, que utiliza la columna  para gestionar una pequeña porción de código relacionado a la lógica del objecto.

Los templates como view de un objecto

En plone3 se utiliza el main slot como contenedor para todo lo que está relacionado a la columna del contenido. Esta manera de hacer cosas habitualmente lleva a confusión en la lectura de la columna principal: puede ser que los elementos comparezcan en puestos de layout inesperados.

Plone4 simplifica todo. En primer lugar, como ya he escrito, si quieres poner viewlets-manager no estás obligado a ponerlo en tu template porque puedes utilizar los slots del nuevo main_template. Y además, si no necesitas poner títulos o descripción particulares puedes dejar todos los slots «content-title» y «content-description».

Aquí tienes un ejempo de cómo de corto puede ser el código para una view de un objeto en Plone4 (se extrapola desde document_view.pt):

<metal:content-core fill-slot="content-core">
    <metal:content-core define-macro="content-core">
        <metal:field use-macro="python:context.widget('text', mode='view')">
            Body text
        </metal:field>
    </metal:content-core>
</metal:content-core>

7 líneas para imprir el contenido de ATDocument (poniéndolo en el template de nuestro sitio)! 🙂

Otros templates

Dado de que en Plone4 puedes dejar de poner código y cosas dentro tu templates, puede ser que necesites escribir código adicional.

Un pequeño listado de consejos  sobre este tema:

  • el título del contenido necesita de una css class «documentFirsHeading»;
  • si quieres utilizar un vistazo del título y/o de la descripción estándar puedes dejar a los slots «content-title» + «content-description»;
  • las descripciones de los objetos necesita una css class «documentDescription»;
  • todo lo que quieras poner después del titulo y/o la descripción debería ponerse dentro el div <div id=»content-core»>;
  • los enlaces con <a class=»link-parent»> se ponen dentro <div id=»content-core»>;
  • si necesitas un portal message dentro del template tienes que ponerlo antes del título y preferiblemente dentro del viewlet-manager llamado «plone.abovecontenttitle»;
  • si quieres poner algo dentro de un slot tienes que utilizar los tags metal como <metal:myslot> (y no dentro de los divs como hacen muchas personas). Por ejemplo:
    <metal:content-core fill-slot=”content-core”>
    Content core
    </metal:content-core>
    Eso es importante porque te permite:

    • reducir el número de div vacíos después del rendering;
    • leer el código fuente con mucha facilidad porque un metal con nombre puede tener más sentido para ti y para otros desarolladores. Con plone3 mas de los 50% de los templates utilizan y llaman el main slot por los tag div creando anidación de código html (inutil).

Contenidos relacionados

Plone4 no llama más de manera explícita una macro para los contenidos relacionados en el main_template. En esta versién estos contenidos se gestionan por una viewlet asignada a plone.belowcontentbody viewlet-manager.

Desactivar las columnas de la maqueta estandar

Para unificar las formas de desactivar cosas en Plone, con la nueva versión las columnas de la maqueta se pueden desactivar de la misma manera que los bordes: a través de la variable REQUEST.

Entonces ahora puedes utilizar este código:

<metal:block fill-slot="top_slot"
             tal:define="disable_column_one python:request.set('disable_plone.leftcolumn',1);
                         disable_column_two python:request.set('disable_plone.rightcolumn',1);" />

Código en plone3 para hacer lo mismo:

<metal:left fill-slot="column_one_slot" />
<metal:right fill-slot="column_two_slot" />

Written by vito80ba

febrero 15, 2010 a 11:06 am

Publicado en plone

Tagged with

2 respuestas

Subscribe to comments with RSS.

  1. ¡Cuánto vamos a aprender sobre Plone con el maestro Falco! 🙂

    Gallego

    febrero 17, 2010 at 10:41 am

  2. Hola Vito, ya me he suscrito a tu Twitter, muy interesante tu blog de plone en español. Por cierto que fastidio tener que hacer esta migración por culpa del main template. Plone tienen que facilitar el tema de los templates.

    Un abrazo y gracias por el post y por al ayuda que siempre nos das.

    Samuel

    febrero 17, 2010 at 12:53 pm


Deja un comentario