Creare temi

Cosa vede ogni template

Un template non va mai a prendersi nulla. Riceve un insieme di valori pronti all’uso — FolioPress lo chiama il contesto — e stampa ciò che gli serve. Parte dell’insieme è uguale in ogni pagina; il resto dipende dal template che viene renderizzato.

Comune a tutti i template

Variabile Che cos’è

page La pagina o l’articolo visualizzato, già nella lingua corrente (vedi sotto). None nell’archivio dei tag e nella ricerca.

site_title, site_description, footer Dalle Impostazioni del sito, nella lingua corrente. footer è già renderizzato da Markdown.

navigation_menu Il menu configurato nell’amministrazione: un elenco di {title, url, slug, page_id}, ogni url pronto all’uso in questa lingua.

languages Le lingue del sito, indicizzate per codice. Ogni voce: code, name, native_name, short_code, menu_label, flag.

current_language, current_language_code, default_language_code La lingua in corso di rendering (stessa forma di una voce di languages), il suo codice e la lingua principale del sito.

language_switch_urls Indicizzato per codice lingua: l’URL di questa stessa pagina in quella lingua, slug tradotto compreso.

home_url, url_language_code La pagina iniziale nella lingua corrente (/ o /pt-pt) e il prefisso in minuscolo da mettere davanti a qualsiasi URL costruisci tu ('' per la lingua principale).

static_url, media_url Da dove vengono serviti i file di questo tema (/static/<tema>) e dove vivono le immagini caricate.

page_title, meta_description, canonical_url, hreflang_urls, social_image_url, twitter_card_type, json_ld Tutto ciò di cui ha bisogno l’<head>: un titolo di scheda sensato, URL canonico e alternativi per lingua assoluti, un’immagine Open Graph e dati strutturati — tutto precalcolato.

theme_name, theme_info, theme_settings Il nome del tema attivo, il suo theme.yml completo e il suo blocco settings.

t Il traduttore del tema stesso: {{ t('Read more') }} cerca la frase in locales/<lingua>.json (vedi sotto).

request La richiesta FastAPI, per il raro caso in cui ti serva il percorso o un parametro.

L’oggetto page

La stessa forma, che sia una pagina, un articolo o una voce di qualsiasi elenco di articoli:

Campo Note

title, slug, url Nella lingua corrente. url è completo, incluso il prefisso di lingua o il dominio proprio della lingua.

content Già convertito da Markdown in HTML — stampalo con {{ page.content | safe }}.

excerpt, meta_description Le forme brevi, nella lingua corrente.

poster_image_url URL completo dell’immagine di copertina, o None.

gallery, content_gallery Elenchi di immagini: {id, url, title, width, height, original_filename}. Usa image.url direttamente.

tags {slug, title, url} per ogni tag pubblico. I tag privati non sono mai inclusi.

is_post, is_featured, published_at, created_at, updated_at Se è un articolo, se è in evidenza, e le sue date.

id L’id nel database — comodo per ancore e chiavi di cache.

Elenchi di articoli

Template Variabile Contenuto

home.html posts (alias recent_posts), pages, is_home Gli articoli che condividono un tag con la pagina iniziale, in numero e ordine dalla sezione home di theme.yml. Una pagina iniziale senza tag non riceve articoli — assegnale un tag per riempirla.

page.html posts (alias page_posts) Gli articoli che condividono un tag con questa pagina, dalla sezione page. È così che una pagina “Blog” elenca i suoi articoli.

post.html related_posts, is_post Altri articoli che condividono un tag con questo, dalla sezione post.

tag.html tag (title, slug), posts Ogni articolo pubblicato con questo tag, dalla sezione tag.

search.html search_query, search_results, results_count Il termine cercato e le pagine e gli articoli corrispondenti.

Ogni elenco di articoli arriva con una paginazione della stessa forma: has_pagination, current_page, total_pages, has_previous, has_next, previous_page, next_page e pagination_urls con first, previous, next e last — None dove non c’è dove andare. Con has_pagination disattivato in theme.yml, l’elenco viene semplicemente tagliato a posts e gli indicatori restano falsi.

Le lingue e il selettore

Due dei campi lingua vengono calcolati per te. short_code è il solo codice della lingua — EN — a meno che il sito abbia attiva anche un’altra variante della stessa lingua, nel qual caso mantiene la regione: EN-US ed EN-GB. menu_label segue la stessa regola con i nomi: English, oppure English (US) ed English (UK). È esattamente la regola usata dal selettore della lingua dell’amministrazione, così il sito e l’amministrazione non sono mai in disaccordo su un’etichetta. Un selettore completo è quindi breve:

{% if languages | length > 1 %} <button type="button" aria-label="{{ t('Change language') }}"> {{ current_language.short_code }} </button> <ul> {% for lang in languages.values() | sort(attribute='menu_label') %} <li> {% if lang.code == current_language.code %} <span aria-current="true">{{ lang.menu_label }}</span> {% else %} <a href="{{ language_switch_urls[lang.code] }}" hreflang="{{ lang.code }}">{{ lang.menu_label }}</a> {% endif %} </li> {% endfor %} </ul> {% endif %}

language_switch_urls punta già alla stessa pagina in ogni lingua — lo slug tradotto, o la pagina iniziale se quella traduzione non esiste ancora —, quindi un selettore non costruisce mai un URL da solo.

Serve ancora aiuto? Scrivici dal pannello del tuo sito (Assistenza) o a support@foliopress.io.