Open2b versione 7.5

Macro

Una macro è una parte di codice a cui viene dato un nome per poterla poi richiamare in un'altra parte del template. Per dichiarare una macro si usa l'istruzione macro. Ad esempio la seguente istruzione:

{% macro title %}Un bellissimo libro{% end %}

definisce una macro chiamata title. Una macro è una funzione e come tale per essere chiamata si usano le parentesi tonde ( e ):

{{ title() }}
Un bellissimo libro

Nel codice della macro è possibile accedere, oltre che alle variabili globali, anche alle variabili e macro dichiarate nello stesso file prima della dichiarazione della macro. Ad esempio:

{% var prodotto = "tablet" %}
{% macro title %}Un bellissimo {{ prodotto }}{% end %}
{{ title() }}
Un bellissimo tablet

Una variabile dichiarata invece all'interno di una macro non è visibile fuori dalla macro stessa.

Macro endless

Se una macro non ha parametri e nel file non ci sono altre istruzioni dopo la dichiarazione della macro, si può evitare di scrivere {% end %} o {% end macro %} alla fine della macro. La macro termina alla fine del file.

Le macro endless si scrivono senza la parola chiave macro e con la prima lettera maiuscola:

{% Main %}

Nel seguente esempio, Macro è una macro endless che quindi si estende fino alla fine del file.

{% extends "layout.html" %}
{% Main %}

<ul>
  {% for product in products %}
  <li><a href="{{ product.URL }}">{{ product.Name }}</a></li>
  {% end for %}
</ul>

Il precedente esempio è del tutto equivalente a scrivere

{% extends "layout.html" %}
{% macro Main %}

<ul>
  {% for product in products %}
  <li><a href="{{ product.URL }}">{{ product.Name }}</a></li>
  {% end for %}
</ul>

{% end macro %}

Macro con parametri

Una macro può avere dei parametri, come ogni altra funzione. Questi sono dichiarati tra parentesi tonde ( e ), separati da una virgola , e oltre al nome del parametro ne deve essere indicato il tipo.

La seguente istruzione dichiara una macro, chiamata image, con tre parametri.

{% macro image(url string, width int, height int) %}
  <img src="{{ url }}" width="{{ width }}" height="{{ height }}">
{% end %}

Una macro deve essere chiamata con lo stesso numero di argomenti, nello stesso ordine e dello stesso tipo dei parametri indicati nella sua dichiarazione.

{{ image("picture.jpg", 400, 500) }}
<img src="picture.jpg" width="400" height="500">

Un tipo può essere omesso se il parametro successivo ha lo stesso tipo. La precedente dichiarazione può essere quindi riscritta in questo modo:

{% macro image(url string, width, height int) %}
  <img src="{{ url }}" width="{{ width }}" height="{{ height }}">
{% end %}

La sintassi degli argomenti di una macro è lo stesso delle funzioni di Go con l'unica differenza che le macro non hanno parametri di ritorno.

Chiamare una macro dichiarata in un altro file

Per chiamare una macro dichiarata in un altro file, come ad esempio un file che dichiara macro utili in varie parti del template, bisogna prima importarne il file con l'istruzione import.

{% import "/imports/images.html" %}

{{ Image("offer.png", 200, 200) }}
<img src="offer.png" width="200" height="200">

Le macro dichiarate in altri file devono avere la prima lettera del nome in maiuscolo perché possano essere importate.