Comment définir des variables pour variable_get ()?

9

J'essaie de comprendre variable_get(). J'ai lu jusqu'à présent que vous pouvez définir des variables dans le settings.php en utilisant le $conftableau et les récupérer plus tard dans le code en utilisant variable_get(). J'ai lu que vous pouvez également utiliser variable_get()pour récupérer des valeurs de la base de données.

Comment cela marche-t-il?
Y a-t-il une table qui est automatiquement construite?
Comment définiriez-vous des variables si cette fonctionnalité est possible?

cthrucode
la source

Réponses:

25

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 $confvariable 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é .

marcvangend
la source
7
Une autre remarque importante est que 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.
Jimajamma
5

Si vous utilisez Drush (fortement recommandé), vous pouvez sortirdrush vget > variables.txt de la ligne de commande pour créer un fichier texte avec une liste de toutes les variables actuelles et leurs valeurs. De même, vous pouvez utiliser drush vsetpour modifier définir une variable sur une valeur différente.

Voir GitHub pour plus de détails sur variable-get, variable-setet d' autres commandes utiles.

mrP
la source
3

Pour définir des variables, vous utiliseriez variable_set () . Ensuite, vous pouvez les récupérer à l'aide de variable_get () . Vous devez vous familiariser avec le site de l'API Drupal.

Les variables, si elles sont stockées, se trouvent dans le tableau des variables.

Triskelion
la source
La discussion ci-dessus ne montre pas clairement comment définir une variable dans un module personnalisé. Alors, comment définir une variable à partir d'un module personnalisé?
Fawwad