Como definir variáveis ​​para variable_get ()?

9

Eu estou tentando entender variable_get(). Eu li até agora que você pode definir variáveis ​​no settings.php usando a $confmatriz e recuperá-las posteriormente no código usando variable_get(). Eu li que você também pode usar variable_get()para recuperar valores do banco de dados.

Como é que isso funciona?
Existe uma tabela que é criada automaticamente?
Como você definiria variáveis ​​se esse recurso fosse possível?

cthrucode
fonte

Respostas:

25

Talvez você espere aprender que o variable_set é a maneira mágica de armazenar todos os tipos de dados estruturados em seu banco de dados, e que o variable_get é o caminho para divulgá-lo novamente. Infelizmente, não é.

As "variáveis ​​persistentes", como costumam ser chamadas, destinam-se a pares de valores-chave relativamente simples que devem persistir em solicitações, usuários e sessões, geralmente até que o administrador do site altere o valor. Um bom exemplo é o nome do site.

Então, como isso funciona?

Quando o Drupal é inicializado, todas as variáveis ​​são lidas no cache (se disponível) ou na tabela de variáveis. (Consulte variable_initialize para obter o código exato.) As variáveis ​​armazenadas na $confvariável global , uma enorme matriz. O Drupal faz isso porque é mais eficiente do que fazer uma consulta ao banco de dados toda vez que uma variável é necessária. (É também o motivo pelo qual o variable_set não é adequado para grandes quantidades de dados: eles seriam carregados em todas as solicitações!)

Sempre que você usa variable_get('variable_name', 'default_value'), o nome da variável é pesquisado na matriz $ conf. Se existir, o valor será retornado; caso contrário, o valor padrão é retornado.

Finalmente, há um terceiro membro da família: variable_del . Como o nome indica, isso exclui uma variável da tabela de variáveis. Essa função é frequentemente usada em implementações hook_uninstall , excluindo variáveis ​​quando um módulo é desinstalado.

Se você estiver procurando maneiras de armazenar estruturas de dados personalizadas mais complexas no banco de dados, consulte hook_schema e drupal_write_record ou use o sistema de entidades Drupal e a API de entidades .

Marcvangend
fonte
7
Outra observação importante é que variable_set()faz com que o cache variável seja reconstruído, portanto, é algo geralmente reservado para dados que são bastante duradouros e consistentes, como configurações de administrador e similares. Ou, dito de outra forma, não deve ser usado em vez de ou como variáveis ​​estáticas entre funções que mudam durante a criação da página.
Jimajamma #
5

Se você estiver usando Drush (fortemente recomendado), poderá emitir a drush vget > variables.txtpartir da linha de comando para criar um arquivo de texto com uma lista de todas as variáveis ​​atuais e seus valores. Da mesma forma, você pode usar drush vsetpara alterar definir qualquer variável para um valor diferente.

Veja GitHub para mais detalhes sobre variable-get, variable-sete outros comandos úteis.

mrP
fonte
3

Para definir variáveis, você usaria variable_set () . Então você pode recuperá-los usando variable_get () . Você deve se familiarizar com o site da API Drupal.

As variáveis, se armazenadas, podem ser encontradas na tabela de variáveis.

Triskelion
fonte
Não está claro na discussão acima como definir variável no módulo personalizado. Então, como definir variável do módulo personalizado?
Fawwad 11/09/15