Il blocco gutenberg Campo del form è un blocco personalizzato del wordpress Gpci framework; nella maggior parte dei casi verrà utilizzato insieme a un blocco form ma è anche possibile utilizzarlo indipendentemente, ad esempio per avviare funzioni javascript basate sugli input o i click dell'utente. Il blocco è composto da un div html che racchiude label e campo ed è indicato utilizzare il gruppo di controlli posizionamento con proprietà css display:flex per definire istantaneamente la direzione e la posizione dei componenti. Con questo blocco è possibile anche generare uno o più campi calcolati da campi wordpress (come titolo e riassunto) o campi metabox in modo analogo a MB Frontend Submission.
Controlli del campo del form
Dopo avere inserito il blocco è necessario configurarlo per definire il campo. Alcuni attributi sono comuni a tutti i tipi di campo, altri invece sono specifici per tipo (come textarea e select). Va specificato che quasi tutti i controlli specifici per questo blocco sono relativi al campo e non al div contenitore come nel caso del gruppo di controlli attributi. Essenzialmente questo blocco può essere usato in questi modi:
- configurare un campo html completamente personalizzabile
- generare uno o più campi dinamicamente da campi wordpress
- generare uno o più campi dinamicamente da campi metabox
E' importante anche specificare alcune cose:
- se generati dei campi metabox non verrà replicato lo stesso codice html di MB Frontend Submission ma il codice sarà il più possibile simile a quello generato normalmente da questo blocco
- se generati dei campi metabox solo alcuni tipi di campo e parametri metabox sono supportati (se un tipo di campo non è supportato verrà generato un ErrorMessage, stessa cosa per alcuni parametri come cloneable)
- i campi supportati dei campi metabox sono gli stessi dei campi html
- i parametri attualmente supportati dei campi metabox sono:
- hide_from_front
- required (per ora verrà anche aggiunto uno span con asterisco alla label)
- class
- columns
- prepend
- append
- attributi html
- fare attenzione con gli altri parametri (soprattutto quelli relativi a salvataggi personalizzati in quanto genereranno incongruenze) - se generati dei campi dinamici (sia wodpress che metabox) con i valori iniziali impostati automaticamente (vedere controllo sotto) all'id del campo e del contenitore verrà aggiunto il post id corrente
- i campi personalizzati predefiniti del framework per ora non saranno mai generati
Controlli comuni
I controlli comuni a tutti i tipi di campo sono tutti visibili nella barra laterale InspectorControl dinamicamente in base alle scelte:
Tipo di campo
E' possibile scegliere la configurazione del campo scegliendo tra:
Html
il campo sarà singolo e completamente personalizzabile come elemento html tramite i controlli dedicati.
Campi wordpress (post)
il campo diventerà uno o più campi wordpress relativi ai post scelti singolarmente tramite i controlli dedicati.
Campi wordpress (commenti)
il campo diventerà uno o più campi wordpress relativi ai commenti scelti singolarmente tramite i controlli dedicati.
Campi metabox (post)
Il campo diventerà tutti i campi metabox registrati a determinato post type. Questa opzione serve a generare automaticamente i campi personalizzati per creare o modificare un post.
Campi metabox (user)
Il campo diventerà tutti i campi metabox registrati agli utenti. Questa opzione serve a generare automaticamente i campi personalizzati per creare o modificare un utente.
Gruppi metabox
Il campo diventerà tutti i campi metabox calcolati dai gruppi metabox specificati: inserire gli id delle metabox separandoli con una virgola. Questa opzione serve a generare liberamente campi dalle metaboxes specificate per eseguire azioni personalizzate.
Campi metabox
Il campo diventerà uno o più campi metabox scelti singolarmente da una metabox: inserire l'id della metabox che contiene i campi e gli id dei campi da generare separando tutti gli argomenti con una virgola. Esempio: ordini,nome,cognome dove ordini è l'id della metabox mentre nome e cognome sono 2 campi contenuti. Questa opzione serve a generare liberamente campi dalla metabox specificata per eseguire azioni personalizzate.
I controlli riservati ai campi dinamici (quindi non i campi html) sono:
Post type
Se selezionato un post type i campi saranno generati solo se registrati al post type selezionato. Per i campi wordpress (esempio titolo e riassunto) verrà controllato se il post type ha il supporto per il campo corrispondente, mentre per i campi metabox appare solo per la scelta campi metabox (post).
Auto imposta i valori iniziali
Se attivato auto imposta i valori iniziali dei campi generati ai valori corrispondenti (serve nei form di modifica), inoltre all'id del campo e del contenitore verrà aggiunto il post ID corrente.
Ordina in colonne
Se attivato genera attorno ai campi html aggiuntivo per replicare indicativamente il comportamento del componente aggiuntivo MB Columns. E' sufficiente che i campi abbiano il parametro columns assegnato, il componente può anche essere disattivato. Se un campo non ha il parametro columns assegnato gli sarà assegnata una larghezza di 12 colonne.
I controlli riservati ai campi wordpress relativi ai post sono:
Titolo del post
Selezionare se si vuole aggiungere un campo testuale per l'inserimento del titolo, sarà possibile anche modificare label, placeholder e aggiungere required.
Contenuto del post
Selezionare se si vuole aggiungere un campo di tipo textarea per l'inserimento del contenuto, sarà possibile anche modificare label, placeholder e aggiungere required. Sarà anche possibile aggiungere TinyMce come per il campo html.
Riassunto del post
Selezionare se si vuole aggiungere un campo di tipo textarea per l'inserimento del riassunto, sarà possibile anche modificare label, placeholder e aggiungere required.
I controlli riservati ai campi wordpress relativi ai commenti sono:
Contenuto del commento
Selezionare se si vuole aggiungere un campo di tipo textarea per l'inserimento del contenuto, sarà possibile anche modificare label, placeholder e aggiungere required. Sarà anche possibile aggiungere TinyMce come per il campo html.
I controlli riservati al campo html sono:
Nome
Stringa che verrà usata come attributo name. Per poter usare il valore spedito tramite un form questo campo è obbligatorio. Come regola generale utilizzare lettere, trattini medi/bassi e numeri e iniziare con una lettera.
Tipo di valore
Eventuale conversione dinamica relativa l'attributo id. Utilizzare se il campo è all'interno di un ciclo query.
Id
Stringa che verrà usata come attributo id, aggiornerà automaticamente anche l'attributo ancora del blocco (in avanzate). Compilare se la label viene visualizzata ( per l'attributo for ) oppure il campo è all'interno di un ciclo query ( in questo caso convertire a valore dinamico ). Come regola generale utilizzare lettere, trattini medi/bassi e numeri e iniziare con una lettera.
Label
Stringa che verrà usata come contenuto del tag label: compilare sempre in quanto se nascosta verrà usata come attributo aria-label.
Nascondi label
Nasconde la label.
Tag
Selezionare il tag del campo compilabile.
Type
Compare se il tag lo richiede, selezionare l'attributo type per completare ad esempio il tag input.
Dati crittografati
Compare solo se il campo è un input type hidden. Se attivato aggiunge automaticamente l'attributo data-to-encrypt all'input in modo che il form contenente il campo crittografi automaticamente il valore. Questo controllo evita semplicemente di doverlo fare manualmente con il controllo attributi. In questo caso probabilmente (ma non necessariamente) il nome del campo sarà un campo wordpress (come post_title) o un campo personalizzato, impostarne il valore utilizzando il controllo valore iniziale.
Placeholder
Compare solo se inerente. Se compilato, aggiungerà l'attributo placeholder al tag del campo.
Disabled
Se true, aggiungerà l'attributo disabled al tag del campo.
Required
Se true, aggiungerà l'attributo required al tag del campo e farà comparire il controlli successivi per Oninvalid.
Tipo di messaggio
Scegliere come verrà visualizzato il messaggio tra le seguenti scelte:
- fumetto - classico messaggio del browser per campo invalido ma con un messaggio personalizzato. In questo caso verrà anche aggiunto automaticamente un attributo oninput per il ricontrollo automatico del campo
- alert - il messaggio verrà visualizzato in un alert
- codice personalizzato - inserire direttamente il codice javascript per visualizzare il messaggio secondo le proprie preferenze
Oninvalid
Inserire qui il messaggio o il codice javascript per far visualizzare un'eventuale notifica di campo invalido all'utente.
Larghezza
Se compilato, verrà aggiunto al tag del campo un attributo style contenente la proprietà width definita. Questo controllo ha associato un gruppo di pulsanti con alcuni valori comuni preassegnati, è comunque sempre scrivibile manualmente.
Valore iniziale
Conversione dinamica: assegnerà automaticamente al campo un valore predefinito.
Controlli specifici per tipo di campo
Vari tipi di campo hanno attributi aggiuntivi richiesti o utili al loro funzionamento. Questi controlli compaiono soltanto per i tipi di campo inerenti dopo agli altri in un pannello dedicato. Tenere presente che per tutti gli attributi non ancora integrati qui è sempre possibile settarli manualmente utilizzando il gruppo di controlli attributi.
Checkbox
I controlli aggiuntivi per gli input di tipo checkbox sono:
Checked
Se attivata la checkbox sarà spuntata di default.
Date
I controlli aggiuntivi per gli input di tipo date sono:
Min
Inserire l'eventuale data minima selezionabile nel formato YYYY-MM-DD.
Max
Inserire l'eventuale data massima selezionabile nel formato YYYY-MM-DD.
Step
Inserire l'eventuale intervallo in giorni selezionabili partendo dalla data minima (oppure odierna se non specificata). Se ad esempio selezioniamo un lunedì come data minima e impostiamo 7 come step potremo selezionare soltanto i lunedì nel selettore data.
Textarea
I controlli aggiuntivi per le textarea sono:
Rows
Setta l'attributo rows.
Cols
Setta l'attributo cols.
TinyMce
Se attivato: la textarea viene sostituita un editor TinyMCE generato dalla funzione wp_editor. E' importante notare che per ora solo la textarea viene sostituita non il wrapper del blocco.
Parametri di configurazione
Se attivato TinyMce è possibile settare qui i parametri di configurazione tramite una conversione dinamica (così da poter utilizzare globali php, funzioni, shortcodes o direttamente una stringa php). Ci sono alcune cose da precisare:
- questi parametri rappresentano il parametro
$settingsdella funzione wp_editor, quindi dovrà ritornare un array associativo con queste chiavi - è obbligatorio assegnare un id alla textarea oppure ci saranno errori javascript nel frontend, in quanto questo id sarà il valore del parametro
$editor_id - al parametro
$contentinvece come valore predefinito sarà assegnato il risultato del valore iniziale spiegato prima
Se non settato nessun parametro verranno utilizzati dei parametri di default. Potrebbero cambiare ma al momento sono:
[
'wpautop' => true,
'media_buttons' => false,
'default_editor' => '',
'drag_drop_upload' => false,
'textarea_name' => /*attributo name oppure id textarea*/
'textarea_rows' => /*valore attributo rows oppure 20*/,
'tabindex' => '',
'tabfocus_elements' => ':prev,:next',
'editor_css' => '',
'editor_class' => '',
'teeny' => false,
'tinymce' => [
'language' => 'it',
'browser_spellcheck' => false,
'resize' => 'vertical'
'menubar' => false,
'branding' => false,
'toolbar1' => 'formatselect, bold, italic, bullist, numlist, blockquote, alignleft, aligncenter, alignright, link, wp_more, spellchecker, fullscreen, wp_adv',
'toolbar2' => 'strikethrough, hr, forecolor, pastetext, removeformat, charmap, outdent, indent, undo, redo, wp_help',
'plugins' => 'charmap, colorpicker, hr, lists, media, paste, tabfocus, textcolor, fullscreen, wordpress, wpautoresize, wpeditimage, wpemoji, wpgallery, wplink, wpdialogs, wptextpattern, wpview, image'
],
'quicktags' => [
'buttons' => 'strong,em,underline,ul,ol,li,link,code'
]
]
Notare che il parametro name sarà automaticamente sovrascritto, anche se impostato nei parametri, in modo da essere uguale a quello impostato nel blocco.
Chiavi/valori tinymce
Lista ricavata dal filtro tiny_mce_before_init:
Select
I controlli aggiuntivi i select sono:
Multiple
Aggiunge l'attributo multiple.
Opzioni statiche
E' possibile aggiungere opzioni a piacere cliccando sul pulsante aggiungi option. Per ogni opzione settare il value, il nome visibile e, se desiderato, anche l'attributo selected. L'attributo selected sarà applicato solo all'ultima opzione con l'attributo (per select senza attributo multiple) e a tutti i tag option (per select con attributo multiple)
Opzioni dinamiche
Le opzioni dinamiche possono essere attivate insieme alle statiche ma al momento compariranno sempre per ultime. Se attivate le opzioni dinamiche comparirà il controllo origine riempimento in cui è possibile decidere come le opzioni saranno configurate selezionando tra:
Campo metabox
Riempire i due campi seguenti:
- Id metabox: scrivere l'id dellla metabox (gruppo di campi) che contiene il campo personalizzato
- Id campo: scrivere l'id del campo personalizzato (il select) da cui ottenere le opzioni
Nome funzione
Scrivere nel campo apposito il nome della funzione senza argomenti, la funzione deve generare tutti i tags option desiderati. Esempio:
Nome funzione: ListaUtenti
function ListaUtenti() {
$users = get_users();
$option = '';
foreach( $users as $user ){
$option .= '<option value="'.$user->ID.'">'.$user->display_name.'</option>';
}
return $option;
}
Php
Scrivere nella textarea Il codice php per ritornare i tag option. Il codice sarà processato via eval quindi attenzione a cosa si scrive qui. Esempio (stesso risultato di prima):
$users = get_users();
$option = '';
foreach( $users as $user ){
$option .= '<option value="'.$user->ID.'">'.$user->display_name.'</option>';
}
//ritornare sempre i tags sottoforma di stringa
return $option;
Informazioni aggiuntive
Nel caso di campo del form per caricare file ( quindi input type=file ), ricordarsi di aggiungere al blocco form che lo contiene l'attributo enctype=multipart/form-data per caricare correttamente i files.
Inoltre per caricare valori multipli nei campi supportati aggiungere [] alla fine del nome (esempio: nome_select[] o nome_files[]).
