Atualizar variáveis ​​específicas de domínio no Drupal ao usar o módulo de domínio

Aqueles que estão familiarizados com ele sabem que o Drupal usa uma tabela de banco de dados chamada “variável”, onde armazena matrizes serializadas de valores. Quando você usa um:

variable_set('variable', $value);

ou um

variable_get('variable', 'default value');

os valores são recuperados da tabela de variáveis ​​(não resistindo a quaisquer substituições que você possa ter definido no array $ conf dentro do arquivo settings.php). Para substituir variáveis ​​em settings.php, veja outro post que escrevi aqui .

A maioria dos módulos que possuem uma página administrativa utiliza a tabela de variáveis ​​para armazenar os valores de quaisquer campos de configuração. Se também estiver usando o módulo Acesso ao domínio em seu trabalho, você saberá que isso apresenta um conjunto adicional de botões de opção na parte inferior de qualquer página de configurações, permitindo que você escolha para qual domínio deseja atualizar a variável.

Um de nossos clientes também usa o módulo Login Toboggan para permitir que o formulário de login apareça em páginas que o usuário anônimo não tem permissão para ver. Isso é útil e oferece a eles uma maneira de fazer o login, caso estejam realmente autenticados, mas tenham sua sessão expirada.

Recentemente, o cliente apresentou uma boa lógica de negócios por não exibir mais este formulário. Como também estamos usando acesso ao domínio, não posso fazer um variable_set () simples e espero que isso seja o suficiente para atender à solicitação.

Então, eu escrevi um gancho de atualização que itera através dos domínios disponíveis que foram configurados (e não faz nada para o domínio primário, pois não tem um valor na tabela domain_conf). É agnóstico a ponto de você poder adicionar isso como um gancho de atualização para qualquer módulo relevante para resolver o mesmo problema, se você mesmo o tiver.

//  Disable the login form on 403/access denied page for primary domain.
variable_set
('site_403', "1");

// Iterate through all available domains and disable the login form on 403/access denied pages.
$domains
= domain_domains();
foreach($domains as $domain) {
// There is no entry for the primary domain in this table.
if($domain['domain_id'] != 10) {
domain_conf_variable_set
($domain['domain_id'], 'site_403', '1');
}
}

Isenção de responsabilidade : o ID de domínio 10 representa o domínio principal, mas apenas na versão 3 e superior do Acesso ao domínio. Era o ID de domínio 1 nas versões anteriores.