Tal vez espere aprender que variable_set es la forma mágica de almacenar todo tipo de datos estructurados en su base de datos, y que variable_get es la forma de obtenerlos nuevamente. Lamentablemente no lo es.
Las "variables persistentes", como se las denomina a menudo, están destinadas a pares clave-valor relativamente simples que deberían persistir en las solicitudes, los usuarios y las sesiones, a menudo hasta que el administrador del sitio cambie el valor. Un buen ejemplo es el nombre del sitio.
¿Entonces, cómo funciona?
Cuando Drupal se inicia, todas las variables se leen del caché (si está disponible) o de la tabla de variables. (Ver variable_initialize para el código exacto). Las variables y almacenadas en la $conf
variable global , una gran matriz. Drupal hace esto porque es más eficiente que hacer una consulta a la base de datos cada vez que se necesita una variable. (También es la razón por la cual variable_set no es adecuado para grandes bloques de datos: ¡se cargarían en cada solicitud!)
Cada vez que usa variable_get('variable_name', 'default_value')
, el nombre de la variable se busca en la matriz $ conf. Si existe, se devuelve el valor; de lo contrario, se devuelve el valor predeterminado.
Finalmente, hay un tercer miembro de la familia: variable_del . Como su nombre lo indica, esto elimina una variable de la tabla de variables. Esta función se usa a menudo en implementaciones de hook_uninstall , eliminando variables cuando se desinstala un módulo.
Si está buscando formas de almacenar estructuras de datos personalizadas más complejas en la base de datos, consulte hook_schema y drupal_write_record , o use el sistema de entidades Drupal y la API de entidad .
variable_set()
hace que la memoria caché variable se reconstruya, por lo que es algo que generalmente se reserva para datos que son bastante duraderos y consistentes, como la configuración de administración y similares. O, dicho de otra manera, no debe usarse en lugar de variables estáticas o similares, entre funciones que cambian durante la construcción de la página.