Peut-être que vous espérez apprendre que variable_set est le moyen magique de stocker toutes sortes de données structurées dans votre base de données, et que variable_get est le moyen de les extraire à nouveau. Ce n'est malheureusement pas le cas.
Les "variables persistantes", comme on les appelle souvent, sont destinées à des paires clé-valeur relativement simples qui devraient persister entre les demandes, les utilisateurs et les sessions, souvent jusqu'à ce qu'un administrateur de site modifie la valeur. Un bon exemple est le nom du site.
Alors, comment ça marche?
Lorsque Drupal est amorcé, toutes les variables sont lues à partir du cache (si disponible) ou de la table des variables. (Voir variable_initialize pour le code exact.) Les variables et stockées dans la $conf
variable globale , un énorme tableau. Drupal fait cela parce que c'est plus efficace que de faire une requête de base de données chaque fois qu'une variable est nécessaire. (C'est aussi la raison pour laquelle variable_set n'est pas adapté aux gros blobs de données: ils seraient chargés à chaque requête!)
Chaque fois que vous utilisez variable_get('variable_name', 'default_value')
, le nom de la variable est recherché dans le tableau $ conf. S'il existe, la valeur est renvoyée; sinon, la valeur par défaut est retournée.
Enfin, il existe un troisième membre de la famille: variable_del . Comme son nom l'indique, cela supprime une variable de la table des variables. Cette fonction est souvent utilisée dans les implémentations hook_uninstall , supprimant les variables lors de la désinstallation d'un module.
Si vous cherchez des moyens de stocker des structures de données personnalisées plus complexes dans la base de données, consultez hook_schema et drupal_write_record , ou utilisez le système d'entités Drupal et l' API d'entité .
variable_set()
le cache variable est reconstruit, c'est donc quelque chose qui est généralement réservé aux données qui sont assez durables et cohérentes comme les paramètres d'administration et autres. Ou, autrement dit, il ne devrait pas être utilisé à la place ou comme des variables statiques entre les fonctions qui changent pendant la création de la page.