Presentazione di modelli di forma sperimentali

Ciao, Community di Discourse Meta!

Siamo entusiasti di presentare una nuova funzionalità sperimentale, i modelli di modulo. Con essi, puoi imporre un modulo strutturato con convalida dei dati come parte del flusso di creazione dell’argomento.

multiple_form_templates

Abilitazione della funzionalità

La funzionalità è nascosta dietro un flag sperimentale a livello di sito. Per abilitarla, basta attivare l’impostazione del sito experimental_form_templates in :wrench: Amministratore ▸ Impostazioni.

Gestione dei modelli

I modelli di modulo possono essere creati, modificati ed eliminati in :wrench: Amministratore ▸ Personalizza ▸ Modelli (/admin/customize/form-templates/).

Lì, vedrai una tabella con un elenco dei modelli esistenti sul forum. Puoi modificare, eliminare e visualizzare in anteprima qualsiasi modello esistente o crearne di nuovi. La tabella mostra anche le categorie in cui ciascun modello è attualmente attivo.

I modelli sono definiti in una struttura YAML. Puoi digitarli manualmente o utilizzare i pulsanti “Aggiungi” in alto, che aggiungeranno un pezzo di codice YAML di esempio alla fine, definendo un certo tipo di input.

Ecco un esempio YAML completo, con tutti i tipi di campo:

- type: input
  id: name
  attributes:
    label: "Nome completo"
    placeholder: "es. Mario Rossi"
    description: "Qual è il tuo nome completo?"
  validations:
    required: true
    minimum: 2
    maximum: 100
- type: textarea
  id: introduction
  attributes:
    label: "Introduzione"
    placeholder: "Una breve introduzione"
    description: "Scrivi una breve introduzione su di te"
  validations:
    required: true
    minimum: 10
    maximum: 500
- type: dropdown
  id: fav-animal
  attributes:
    label: "Animale preferito"
    description: "Seleziona il tuo animale preferito"
    none_label: "Seleziona un'opzione"
  choices:
    - "Cane"
    - "Gatto"
    - "Altro"
  validations:
    required: true
- type: multi-select
  id: comm-channel
  attributes:
    label: "Canali di comunicazione:"
    description: "Seleziona i tuoi canali di comunicazione preferiti:"
    none_label: "Seleziona un'opzione"
  choices:
    - "Email"
    - "Telefono"
    - "Messaggistica"
- type: upload
  id: cat-photo
  attributes:
    label: "Foto del gatto"
    description: "Invia una foto del tuo gatto (o di qualsiasi gatto)"
    file_types: ".jpg, .png"
    allow_multiple: false
- type: checkbox
  id: accept-terms
  attributes:
    label: "Ho letto e accetto i termini"
    description: "Devi accettare i termini per continuare"
  validations:
    required: true

Validazioni

Per ogni campo, puoi aggiungere opzioni di convalida che devono essere superate prima di poter creare il modulo. Per un elenco delle convalide disponibili, fai clic sul pulsante Validazioni sopra l’editor di codice. Questo ti mostrerà la sintassi per ogni opzione di convalida e descriverà il suo utilizzo previsto.

Opzioni di convalida

Chiave Tipo Descrizione
required booleano Richiede che il campo sia completato per inviare il modulo
minimum intero Per i campi di testo, specifica il numero minimo di caratteri consentiti
maximum intero Per i campi di testo, specifica il numero massimo di caratteri consentiti
pattern stringa regex Per i campi di testo, un’espressione regolare che specifica l’input consentito
type stringa Per i campi di input, puoi specificare il tipo di input che dovrebbe essere previsto (text|email|date|number|url|tel|color)

Applicazione di un modello a una categoria

Una volta creato un modello di modulo, vorrai applicarlo a una categoria. Per farlo, vai alle impostazioni della categoria a cui desideri applicare il modello.

Seleziona il menu Modello, quindi a destra, usa l’interruttore per attivare i modelli di modulo. Una volta abilitato, puoi usare il menu a discesa per aggiungere uno o più modelli a una categoria.

Compilazione del modulo

Una volta applicato un modello a una categoria, il modulo del modello apparirà automaticamente quando crei un argomento e selezioni la categoria che ha il modello. Se alla categoria sono assegnati più modelli, vedrai anche un selettore per passare da un modello all’altro tra quelli disponibili.

Durante la compilazione del modulo, rispetterà tutte le convalide specificate nella definizione del modello di modulo e solo dopo che sarà valido potrai premere :heavy_plus_sign: Crea argomento e questo genererà il contenuto dell’argomento da tutti i campi di input.

Infine, dopo l’invio, il contenuto dell’argomento è composto da tutti i campi compilati:

Precompilazione dei valori del modulo

Puoi anche precompilare i valori del modulo chiamando /new-topic con parametri corrispondenti agli ID dei campi definiti nel modello del modulo. Ad esempio, per il modello precedentemente utilizzato come esempio:

/new-topic?name=Mario%20Rossi&favorite-animal=Cat

Roadmap

  • Memorizzare l’output JSON nei dati dell’argomento quando viene creato un argomento
  • Opzione per poter ancora selezionare e utilizzare il compositore a testo libero nelle categorie con modelli di modulo

Come puoi aiutarci

Ci piacerebbe sentire il tuo feedback su questa nuova funzionalità. Se sei un amministratore e desideri provarla sul tuo forum, puoi attivare l’impostazione experimental_form_templates e iniziare subito a usarli!

Per favore, crea nuovi argomenti contrassegnati con form-templates per condividere le tue esperienze, segnalare eventuali bug o fornire suggerimenti.

Grazie per averci aiutato a rendere Discourse migliore!

84 Mi Piace

Questo sembra molto utile e lo abiliterò sicuramente per fare esperimenti.

Una cosa che troverei utile è la possibilità di collegare un campo del modello a un campo personalizzato dell’utente. Ad esempio, in una categoria di supporto, le prime due domande poste dai ragazzi del supporto sono solitamente “Modello dell’attrezzatura” e il relativo “URL del sito web”. Con questa funzionalità del modello posso ora chiedere queste informazioni ogni volta che viene creato un nuovo argomento :smiley:

Queste due informazioni sono generalmente di interesse anche per altri utenti, quindi sono definite come campi utente personalizzati, che a volte vengono compilati. Se i campi del modello potessero essere popolati da un campo utente personalizzato collegato (se ha un valore al suo interno), allora per i frequent flyer potrebbero compilare i loro campi utente e non dover compilare i campi del modello ogni volta. I flyer occasionali possono semplicemente compilare i campi del modello quando hanno bisogno di supporto.

Come ulteriore suggerimento, la ciliegina sulla torta sarebbe che il collegamento funzioni anche al contrario. Se qualcuno inserisce dati nel modello che non sono nel campo utente personalizzato collegato, il campo personalizzato viene aggiornato quando l’argomento viene pubblicato.

13 Mi Piace

Ciao :wave:

Questo è uno dei migliori miglioramenti. Offre così tante opportunità. :heart_eyes:

Alcune note:

  1. Sembra che la stringa form_templates.errors.valueMissing.number sia mancante.

  2. Sembra che la validazione tel non funzioni.

  3. Su mobile, il modello di modulo nel composer non è scorrevole.

  4. Su mobile, quando il modello di modulo è disponibile, i pulsanti del piè di pagina non fanno nulla. Penso che sarebbe bene nasconderli.
    Screenshot 2023-10-17 at 8.04.50

+ Sarebbe utile aggiungere la validazione per impedire numeri negativi al tipo number. Caso d’uso (prezzo) :slightly_smiling_face:

+ Sarebbe anche utile aggiungere la funzionalità di campi condizionali dinamici.


Grazie :slight_smile:

15 Mi Piace

Come già accennato, questo sarà molto utile per i contesti di supporto e mi piacciono in particolare i suggerimenti di @packman sui campi utente personalizzati.

L’aggiunta di modelli di modulo ai gruppi è anch’essa in programma (o potrebbe esserlo)? Dove la messaggistica di gruppo viene utilizzata per il supporto privato, questo sarà particolarmente utile per pre-caricare le domande prima che arrivi un membro dello staff.


A seconda della visibilità del campo personalizzato, ciò potrebbe avere implicazioni sulla privacy. Ad esempio, l’utente potrebbe scegliere di condividere le informazioni tramite un modello di modulo in una categoria privata ma non voler condividere tali informazioni con la comunità più ampia tramite il proprio profilo.

A seconda della natura delle informazioni, potrebbe anche avere un valore appropriato per il proprio profilo e/o la maggior parte dei moduli, ma potrebbe voler fornire un valore diverso in un particolare caso.

Mi piace l’idea di compilare il modulo da quei campi e di poter aggiornare i campi se i valori inseriti differiscono, ma forse dovrebbe essere un prompt. Questo è un mockup molto veloce e grezzo, ma forse qualcosa del genere dopo aver creato l’argomento (solo se un valore differisce e possibilmente solo se non è vuoto):

8 Mi Piace

La mia richiesta di funzionalità per questa fantastica nuova funzionalità, credo, è comune nei forum di supporto software.

Le persone trascurano di specificare la loro versione del software. Questo è tutto. Semplice, ma è la causa di molti, molti post inutili di andirivieni che sono stancanti per le persone che aiutano molte persone (e non vogliamo stancare le persone più importanti della Community).

Quindi vorrei un modulo che chieda:

  • La tua versione di FabulousApp è… (menu a discesa con opzioni)
  • La tua versione di PHP è… (menu a discesa con opzioni)

Ora, supponiamo che qualcuno pubblichi frequentemente sui forum. Queste informazioni non cambiano frequentemente, anche se potrebbero cambiare, diciamo, una volta al mese.

Il modulo dovrebbe mantenere i valori che lo stesso utente ha selezionato nei suoi post precedenti, come valori predefiniti, questa è la mia richiesta di funzionalità. Cosa ne pensi?

5 Mi Piace

Penso che in alcuni casi, avere un campo precompilato possa portare gli utenti a trascurarlo e a non modificarne il valore quando necessario. :thinking:

Puramente speculando, però.

10 Mi Piace

Questi due combinati sono ciò che vorrei vedere per il mio caso d’uso. Con più app, voglio che l’utente sia in grado di selezionare la propria app, quindi selezionare la propria versione da un elenco che corrisponde a quell’app.

Questa è certamente la mia esperienza per le scelte. Con un valore predefinito su un modulo di contatto e-mail, la stragrande maggioranza delle richieste ha quel valore predefinito indipendentemente dall’app o dalla versione che stanno effettivamente utilizzando.

3 Mi Piace

Probabilmente è vero per i valori predefiniti, ma in quello che ho immaginato i valori dei campi sarebbero quelli precedentemente inseriti dall’utente nei suoi campi personalizzati. Questi potrebbero essere vecchi/non aggiornati, ma penso che nel mio caso d’uso ci sarebbero molti meno valori errati rispetto ai valori attualmente mancanti.

2 Mi Piace

Assolutamente. Secondo me queste sono principalmente due categorie di informazioni diverse: stato in un dato momento e preferenza/identità utente/ecc. Quello a cui mi riferivo con la mia esperienza di valori predefiniti riguardava più il primo.

2 Mi Piace

Due richieste!

  1. Un campo di codice che racchiuda automaticamente il contenuto con ```
    • Potrebbe avere un menu a discesa per la lingua, con un’impostazione predefinita.
  2. Un attributo che consenta agli utenti di duplicare un campo (immagino un pulsante + sotto quel campo).
    • Immagina se un utente volesse pubblicare due blocchi di codice o più immagini. Può inserirne uno, fare clic su + e aggiungerne un altro.
16 Mi Piace

Questa è una nuova fantastica funzionalità e potenzialmente ben programmata per un progetto su cui sto lavorando.

Dopo averci giocato brevemente, ho due domande:

  1. Attualmente, quando l’utente modifica un post di un argomento creato tramite un modello di modulo, viene visualizzato solo l’editor di post predefinito.
    Sono previsti piani per visualizzare anche l’editor del modello di modulo durante la modifica di un post?

  2. Ci sarà un’opzione per aggiungere tipi di input personalizzati?
    Sto pensando a una mappa in cui un utente può selezionare la propria posizione lasciando cadere un segnaposto sulla mappa. Quindi sarebbe utile avere la possibilità di definire tali tipi di campi personalizzati.

4 Mi Piace

Questo è il momento perfetto per il mio caso d’uso! Mi stavo chiedendo se ci fossero piani per consentire in futuro la personalizzazione di come un modello di modulo viene visualizzato in un argomento.

ad esempio. Nell’immagine seguente il tipo di campo checkbox viene visualizzato come testo on:

Qualcuno sarebbe in grado in futuro di mappare i tipi di campo del modulo a un output personalizzato?

ad esempio. Nel mio caso, voglio che una casella di controllo selezionata/on venga mappata alla formattazione della casella di controllo, [x], e la mancanza di una selezione/stato off a []

Potrei dover iniziare a imparare il ruby e a fare esperimenti su questo progetto, questo aggiornamento dei moduli mi ha dato molte idee interessanti. Grazie per l’ottimo lavoro ragazzi!

3 Mi Piace

Questo è un ottimo modo per imporre un certo comportamento in una particolare categoria (il mio punto dolente erano i post di lavoro, dove tutti pubblicavano come volevano :smiley: )!

Sarebbe bello avere alcune funzionalità aggiuntive:

  • la possibilità di “passare a nessun modello” (opzionale). Questo potrebbe essere limitato per utenti, per livello, per gruppo ecc.; Una specie di “fidati di me, so quello che sto facendo!”
  • più campi sulla stessa riga (pensa a nome + cognome). Una correzione sufficientemente buona sarebbe consentire agli amministratori di impostare un nome di classe per il modello di modulo;
  • un ripetitore (cioè raggruppare un insieme di campi e consentire agli utenti di aggiungerne altri);
7 Mi Piace

Sarebbe utile avere la possibilità di:

  • Incollare contenuti in un campo di caricamento[1].
  • Aggiungere un compositore oltre all’area di testo, dove gli utenti hanno accesso alla normale suite di funzionalità.[2]

  1. La funzionalità di caricamento nei post di Discourse è ottima. Questa è più difficile da usare, richiedendo ad esempio che le immagini siano già salvate sul disco. ↩︎

  2. Se voglio che un utente selezioni un menu a discesa oltre a un post, con l’approccio attuale (un’area di testo) diminuisco drasticamente la loro capacità di creare il loro post normalmente; niente incollaggio di immagini, niente barra di modifica, ecc. ↩︎

9 Mi Piace

Ho provato il modulo qui per segnalare un bug relativo al tema. Ecco il mio feedback:

  • Il modulo in sé è un’ottima idea :+1:
  • La mancanza di uno strumento di formattazione è una grande pecca.
    • Anche se la sintassi markdown è basilare, selezionare e utilizzare la barra degli strumenti è spesso più facile/veloce. Aiuta a creare un messaggio leggibile.
    • Questo può funzionare se la segnalazione è un problema semplice ma avanzato; potresti dover nascondere i dettagli o inserire una tabella.
  • La mancanza di caricamento inline non è conveniente.
    • Ad esempio, mostrare un problema passo dopo passo, prima/dopo i risultati, ecc.
    • In caso di più screenshot, devi spiegare a quali screenshot si dovrebbe fare riferimento.
  • Come Thomas, incollare un’immagine sarebbe gradito. Mi ci è voluto un po’ per capire dove venivano salvati i miei screenshot. :smile:
  • Input condizionale: quando si seleziona “altro”, sarebbe bello che apparisse un campo di inserimento per quello.

Nel complesso, molto bello! Non vedo l’ora di vedere come verrà migliorato. :slight_smile:

9 Mi Piace

Se hai più moduli abilitati per una singola categoria, non è intuitivo che ci sia un menu a discesa per selezionare un modulo. Quando crei un nuovo argomento, popola automaticamente il primo modello di modulo, che di nuovo, se non sai cosa stai guardando, non ti renderesti conto che potrebbero esserci altri moduli.

Quando deselezioni il modulo, vedi il testo “Seleziona modelli di modulo” che mi è chiaro che c’è un elenco di moduli da cui scelgo. Il composer mostra ancora il modulo anche se non ne è stato selezionato nessuno. È qui che seconderei, @iamntz, riguardo all’opzione di passare a nessun modello.

6 Mi Piace

Voglio solo aggiungere alla mia precedente risposta e fornire un po’ più di contesto al nostro caso d’uso specifico. Stiamo cercando di implementarlo nella nostra categoria Site Feedback. Idealmente, vogliamo modelli di modulo per cose come la richiesta di tag e mantenere il compositore predefinito (nessuna opzione di modello), se il modulo non esiste o non fa il lavoro correttamente.

Quindi, ciò che stiamo immaginando sarebbe creare un nuovo argomento nella categoria e vedere questo:

Da lì, vedere “Seleziona modelli di modulo”, dove da lì è possibile comporre normalmente o vedere che i moduli esistono in questa categoria per richieste/feedback standardizzati. :slight_smile:

Posso vedere l’argomento secondo cui alcuni utenti non vedranno o non utilizzeranno il modello di modulo, se possono comporre, ma stavo cercando di rimanere all’interno dello stile attuale con il testo segnaposto all’interno del campo invece di un’etichetta al di fuori del campo. Ma è per questo che potrebbe essere una funzionalità opzionale che gli amministratori abilitano/disabilitano. :upside_down_face:

4 Mi Piace

Se il pulsante di selezione fosse chiaramente evidenziato, sarebbe molto più facile incoraggiare gli utenti a fare clic su di esso, simile al tuo pulsante Crea argomento

3 Mi Piace

Dopo aver giocato di più con i moduli, abbiamo scoperto che una soluzione per un’opzione “nessun modello” sarebbe creare un semplice modulo di “risposta libera” che possa fungere da “nessun modello” (come si vede nello screenshot qui sotto).

Aggiungendo a questa idea, se non volessimo cambiare il colore per evidenziare il menu a discesa, penso che aggiungere una freccia verso il basso sarebbe un utile indicatore che c’è una selezione a discesa, proprio come il menu a discesa delle categorie.

Abbiamo scoperto che i moduli sono ordinati alfabeticamente. Sarebbe fantastico avere la possibilità di riordinare i moduli o la possibilità di selezionare il modulo predefinito che dovrebbe apparire quando si crea un nuovo argomento.

Inutile dire che ci piace ciò che questa funzionalità ha da offrire, e saremmo entusiasti di tali miglioramenti. :slight_smile:

6 Mi Piace

Forse mi è sfuggito, ma c’è un modo per inserire un collegamento ipertestuale in un modulo? Ad esempio, supponiamo di avere una casella di controllo per i termini e le condizioni. Nella descrizione sarebbe utile avere un collegamento ipertestuale ai termini e alle condizioni effettivi.

È già possibile?

C’è anche un modo per popolare automaticamente il campo del titolo quando l’utente crea un nuovo post, ad esempio con il suo nome utente, o anche solo con un titolo predefinito?

8 Mi Piace