Stiamo introducendo un nuovo type: objects nei tipi supportati per le impostazioni del tema, che può essere utilizzato per sostituire il tipo esistente json_schema, che intendiamo deprecare a breve.
Definizione di un’impostazione del tema di tipo objects
Per creare un’impostazione del tema di tipo objects, prima di tutto definisci una chiave di livello superiore come per qualsiasi altra impostazione del tema, che verrà utilizzata come nome dell’impostazione.
links: ...
Successivamente, aggiungi le parole chiave type, default e schema all’impostazione.
links:
type: objects
default: []
schema: ...
type: objects indica che questa sarà un’impostazione di tipo objects, mentre l’annotazione default: [] imposta il valore predefinito dell’impostazione su un array vuoto. Nota che il valore predefinito può essere impostato anche su un array di oggetti, cosa che dimostreremo una volta definita la schema.
Per definire lo schema, prima di tutto definisci il name dello schema in questo modo:
links:
type: objects
default: []
schema:
name: link
Successivamente, aggiungeremo la parola chiave properties allo schema, che ci permetterà di definire e validare come dovrebbe essere strutturato ogni oggetto.
links:
type: objects
default: []
schema:
name: link
properties:
name: ...
Nell’esempio sopra, stiamo affermando che l’oggetto link ha una proprietà name. Per definire il tipo di dati previsto, ogni proprietà deve definire la parola chiave type.
links:
type: objects
default: []
schema:
name: link
properties:
name:
type: string
La definizione dello schema sopra afferma che l’oggetto link ha una proprietà name di tipo string, il che significa che per la proprietà verranno accettati solo valori di tipo stringa. Attualmente sono supportati i seguenti tipi:
string: Il valore della proprietà è memorizzato come stringa.integer: Il valore della proprietà è memorizzato come intero.float: Il valore della proprietà è memorizzato come numero decimale (float).boolean: Il valore della proprietà ètrueofalse.upload: Il valore della proprietà è l’URL dell’allegato.enum: Il valore della proprietà deve essere uno dei valori definiti nella parola chiavechoices.links: type: objects default: [] schema: name: link properties: name: type: enum choices: - nome 1 - nome 2 - nome 3categories: Il valore della proprietà è un array di ID di categoria validi.groups: Il valore della proprietà è un array di ID di gruppo validi.tags: Il valore della proprietà è un array di nomi di tag validi.
Con lo schema definito, il valore predefinito dell’impostazione può ora essere impostato definendo un array in yaml in questo modo:
links:
type: objects
default:
- name: link 1
title: titolo link 1
- name: link 2
title: titolo link 2
schema:
name: link
properties:
name:
type: string
title:
type: string
Proprietà obbligatorie
Tutte le proprietà definite sono opzionali per impostazione predefinita. Per segnare una proprietà come obbligatoria, basta annotare la proprietà con required: true. Una proprietà può anche essere segnata come opzionale annotandola con required: false.
links:
type: objects
default: []
schema:
name: link
properties:
name:
type: string
required: true
title:
type: string
required: false
Convalide personalizzate
Per determinati tipi di proprietà, esiste un supporto integrato per convalidhe personalizzate che possono essere dichiarate annotando la proprietà con la parola chiave validations.
links:
type: objects
default: []
schema:
name: link
properties:
name:
type: string
required: true
validations:
min: 1
max: 2048
url: true
Convalidhe per i tipi string
min_length: Lunghezza minima della proprietà. Il valore della parola chiave deve essere un intero.max_length: Lunghezza massima della proprietà. Il valore della parola chiave deve essere un intero.url: Convalida che la proprietà sia un URL valido. Il valore della parola chiave può esseretrue/false.
Convalidhe per i tipi integer e float
min: Valore minimo della proprietà. Il valore della parola chiave deve essere un intero.max: Valore massimo della proprietà. Il valore della parola chiave deve essere un intero.
Convalidhe per i tipi tags, groups e categories
min: Numero minimo di record per la proprietà. Il valore della parola chiave deve essere un intero.max: Numero massimo di record per la proprietà. Il valore della parola chiave deve essere un intero.
Risoluzione dell’appartenenza ai gruppi
Le impostazioni degli oggetti possono risolvere le proprietà type: groups in un booleano per l’utente corrente. Questo è utile quando il codice del tema ha bisogno solo di sapere se l’utente corrente è in uno dei gruppi configurati, perché currentUser.groups include solo i gruppi visibili all’utente.
Aggiungi resolve_group_membership: true alla proprietà groups:
menu_sections:
type: objects
default:
- name: sezione 1
groups:
- 1
- 3
schema:
name: menu section
properties:
name:
type: string
groups:
type: groups
resolve_group_membership: true
L’interfaccia utente di amministrazione e il valore dell’impostazione memorizzata utilizzano ancora l’array originale groups. Nell’oggetto settings di runtime del frontend, Discourse rimuove gli ID dei gruppi da ogni oggetto e aggiunge un booleano con lo stesso nome della proprietà preceduto da user_in_:
for (const section of settings.menu_sections) {
if (section.user_in_groups) {
// L'utente è in almeno uno dei gruppi selezionati per questa sezione.
}
}
Questa opzione è valida solo per le proprietà dello schema degli oggetti con type: groups. Funziona anche con schemi di oggetti annidati e con gruppi automatici come logged_in_users e anonymous_users.
Struttura di oggetti annidati
Un oggetto può anche avere una proprietà che contiene un array di oggetti. Per creare una struttura di oggetti annidati, una proprietà può essere annotata anche con type: objects e la relativa definizione schema.
sections:
type: objects
default:
- name: sezione 1
links:
- name: link 1
url: /some/url
- name: link 2
url: /some/other/url
schema:
name: section
properties:
name:
type: string
required: true
links:
type: objects
schema:
name: link
properties:
name:
type: string
url:
type: string
Descrizione dell’impostazione e localizzazione
Per aggiungere una descrizione per l’impostazione nella lingua en, crea un file locales/en.yml con il seguente formato, dato il seguente tipo di impostazione del tema objects.
sections:
type: objects
default:
- name: sezione 1
links:
- name: link 1
url: /some/url
- name: link 2
url: /some/other/url
schema:
name: section
properties:
name:
type: string
required: true
links:
type: objects
schema:
name: link
properties:
name:
type: string
url:
type: string
en:
theme_metadata:
settings:
sections:
description: Questa è una descrizione per l'impostazione del tema sezioni
schema:
properties:
name:
label: Nome
description: La descrizione per la proprietà
links:
name:
label: Nome
description: La descrizione per la proprietà
url:
label: URL
description: La descrizione per la proprietà
Questo documento è sotto controllo di versione - suggerisci modifiche su github.



