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 enajax
, 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.