Forse speri di imparare che variabile_set è il modo magico per archiviare tutti i tipi di dati strutturati nel tuo database e che variabile_get è il modo per farli uscire di nuovo. Sfortunatamente no.
Le "variabili persistenti", come vengono spesso chiamate, sono pensate per coppie chiave-valore relativamente semplici che dovrebbero persistere tra richieste, utenti e sessioni, spesso fino a quando un amministratore del sito non modifica il valore. Un buon esempio è il nome del sito.
Quindi, come funziona?
Quando Drupal viene avviato, tutte le variabili vengono lette dalla cache (se disponibile) o dalla tabella delle variabili. (Vedi variabile_inizializzare per il codice esatto.) Le variabili e memorizzate nella $conf
variabile globale , un array enorme. Drupal lo fa perché è più efficiente che eseguire una query nel database ogni volta che è necessaria una variabile. (È anche il motivo per cui variabile_set non è adatto a grandi quantità di dati: verrebbero caricati su ogni richiesta!)
Ogni volta che si utilizza variable_get('variable_name', 'default_value')
, il nome della variabile viene cercato nell'array $ conf. Se esiste, il valore viene restituito; altrimenti, viene restituito il valore predefinito.
Infine, c'è un terzo membro della famiglia: variabile_del . Come suggerisce il nome, questo elimina una variabile dalla tabella delle variabili. Questa funzione viene spesso utilizzata nelle implementazioni hook_uninstall , eliminando le variabili quando un modulo viene disinstallato.
Se stai cercando modi per archiviare strutture di dati personalizzate più complesse nel database, controlla hook_schema e drupal_write_record o usa il sistema di entità Drupal e l' API Entity .
variable_set()
provoca la ricostruzione della cache variabile, quindi è qualcosa che di solito è riservato ai dati che è piuttosto duraturo e coerente come le impostazioni dell'amministratore e simili. Oppure, in altre parole, non dovrebbe essere usato al posto o come variabili statiche tra le funzioni che cambiano durante la creazione della pagina.