Bloques

Un bloque se define mediante 3 archivos almacenados en la carpeta blocks de la aplicación. Esos archivos tienen el mismo nombre de archivo (que es el identificador de bloque) con las extensiones .html, .py y .yaml.

El archivo HTML

El archivo .html contiene el diseño del bloque. Es HTML normal. Los elementos dinámicos están encerrados entre corchetes. Ejemplo:

<p>This is a dynamic message: {message}</p>

Los corchetes serán reemplazados por el valor del elemento correspondiente.

Si el elemento es un elemento BASIC y devuelve un objeto, podemos acceder a sus propiedades. Ejemplo:

<h1>{my_doc.title}</h1>

Del mismo modo, si un elemento BASIC devuelve un diccionario, podemos acceder a sus elementos. Ejemplo:

<p>{info[user]} said: {info[comment]}</p>

Cuando se procesa, el diseño del bloque se envuelve en un elemento HTML <form>.

El diseño puede contener el marcado de patrones de Mockup, se renderizará como se esperaba.

Es posible que algunos patrones de Mockup tengan que representar los corchetes reales en la salida. Doble ellos para escapar de ellos:

<a href="#modal" class="pat-plone-modal"
    data-pat-modal='{{"content": "form"}}'>Display modal</a>

Una vez procesado, si el bloque contiene algunos enlaces con un destino ajax:

<a href="@@rapido/record/1234" target="ajax">Open</a>

la solicitud se cargará en modo AJAX y su contenido reemplazará el contenido del bloque actual.

Plantilla TAL

La plantilla HTML sólo ofrece la inserción de elementos. Si necesitamos más características de plantilla, el archivo .html puede ser reemplazado por un archivo .pt, y podemos usar los comandos TAL.

En el contexto de una Page Template, los elementos de bloque están disponibles en el objeto elements:

def my_title(context):
    return "Chapter 1"
<h1 tal:content="elements/my_title"></h1>

Los elementos se pueden utilizar como condiciones:

def is_footer(context):
    return True
<footer tal:condition="elements/is_footer">My footer</footer>

Si un elemento devuelve un objeto iterable (lista, diccionario), podemos hacer un bucle:

def links(context):
    return [
        {'url': 'https://validator.w3.org/', 'title': 'Markup Validation Service'},
        {'url': 'https://www.w3.org/Style/CSS/', 'title': 'CSS'},
    ]
<ul>
    <li tal:repeat="link elements/links">
        <a tal:attributes="link/url"
            tal:content="link/title"></a>
    </li>
</ul>

El contexto Rapido actual está disponible en el objeto context:

<h1 tal:content="context/content/title"></h1>

El archivo YAML

El archivo .yaml contiene: - los configuraciones de elementos (ver más abajo),

  • la opción target: si se establece en ajax, cualquier acción en el bloque que resulte en un envío de formulario no redirigirá la página actual, solo actualizará el contenido del bloque a través de una llamada AJAX,
  • la view_permission para quién puede ver el bloque (consulte Control de acceso).

El archivo Python

El archivo .py contiene la implementación de cada elemento como una función de Python cuyo nombre es el identificador de elemento y toma context como parámetro.