It is really a big deal to manage translations of custom module in Drupal 7 expecially if you have a multisite installation.
Leggi tutto “Translate a Drupal 7 custom module via l10n_update”jQuery Once: Drupal 8 vs Drupal 7
Chi ha avuto modo di cimentarsi nella stesura di qualche riga di codice JS in Drupal 8 si sarà sicuramente imbattuto in un problema, quello di jQuery once che non funziona a dovere, o almeno così pare.
Leggi tutto “jQuery Once: Drupal 8 vs Drupal 7”Drupal 7 campi condizionali nei form con gli states
Oggi voglio presentarvi gli states degli elementi di un form Drupal.
Il problema
Vogliamo per un motivo o per un altro nascondere selettivamente dei campi in determinate condizioni, senza scrivere dei JS da aggiungere al form, massimizzando la manutenibilità del codice.
Tutto questo è consentito dagli states degli elementi del form di Drupal che consentono di inserire una logica con stati e condizioni in grado ad esempio di nascondere un campo se una checkbox è flaggata oppure mostrare un campo e renderlo obbligatorio.
Esempio:
Poniamoci nel caso in cui abbiamo un modulo di inserimento (un form insomma) di richieste di supporto in cui abbiamo un campo di tipo select chiamato “Oggetto” con varie opzioni selezionabili. Una di queste opzioni è “Altro”, se “Altro” è selezionato allora bisogna mostrare un campo (normalmente nascosto) chiamato “oggetto altro”.
Un codice di questo tipo risolve assolve al compito:
$form['subject_other'] = array( '#states' => array( // Show the subject_other if subject value is other. 'visible' => array( ':input[name="subject"]' => array('value' => 'other'), ), 'required' => array( ':input[name="subject"]' => array('value' => 'other'), ), ), );
Interessante analizzare la funzione drupal_process_states poiché essa mostra tutti gli stati e le condizioni possibili, che per comodità riporto qui sotto:
I possibili stati di un elemento (del form) sono:
- enabled
- disabled
- required
- optional
- visible
- invisible
- checked
- unchecked
- expanded
- collapsed
Le possibili condizioni (che su drupal.org chiama remote conditions) sono:
- empty
- filled
- checked
- unchecked
- expanded
- collapsed
- value
Gli stati che seguono possono essere utilizzati sia come stati di un elemento (primo gruppo) sia come condizioni remote (secondo gruppo):
- relevant
- irrelevant
- valid
- invalid
- touched
- untouched
- readwrite
- readonly
Tuttavia il funzionamento di quest’ultimo gruppo di stati non è garantito in ogni scenario, poiché le funzionalità che ne derivano sono molto dipendenti dal browser dal quale vengono eseguite.
Dalla versione 7.14 di Drupal è anche possibile usare OR e XOR.
Spero di essere stato utile.
NOTA: Un discorso del tutto analogo può essere fatto per Drupal 8 che, sebbene abbia stravolto la maggior parte delle funzionalità di Drupal 7, implementa questa degli states degli elementi del form in maniera similare.