A melhor maneira é fazê-lo dentro de hook_enable () ; no momento em que o gancho é chamado, o módulo já está instalado e o esquema de seu banco de dados está disponível para o Drupal e para drupal_write_record()
. Como o gancho é chamado todas as vezes que um módulo é ativado, e não apenas quando o módulo está instalado, a implementação do gancho deve verificar se ainda não adicionou essas linhas do banco de dados (por exemplo, ele deve usar uma variável Drupal contendo um valor booleano) .
Como exemplo de módulo usado hook_enable()
para uma finalidade semelhante, você pode verificar forum_enable () ou php_enable () (que adiciona o formato de entrada "código PHP").
function php_enable() {
$format_exists = (bool) db_query_range('SELECT 1 FROM {filter_format} WHERE name = :name', 0, 1, array(':name' => 'PHP code'))->fetchField();
// Add a PHP code text format, if it does not exist. Do this only for the
// first install (or if the format has been manually deleted) as there is no
// reliable method to identify the format in an uninstall hook or in
// subsequent clean installs.
if (!$format_exists) {
$php_format = array(
'format' => 'php_code',
'name' => 'PHP code',
// 'Plain text' format is installed with a weight of 10 by default. Use a
// higher weight here to ensure that this format will not be the default
// format for anyone.
'weight' => 11,
'filters' => array(
// Enable the PHP evaluator filter.
'php_code' => array(
'weight' => 0,
'status' => 1,
),
),
);
$php_format = (object) $php_format;
filter_format_save($php_format);
drupal_set_message(t('A <a href="@php-code">PHP code</a> text format has been created.', array('@php-code' => url('admin/config/content/formats/' . $php_format->format))));
}
}
Conforme mostrado nessas implementações de ganchos, o código pode necessariamente precisar ser executado todas as vezes que o gancho é executado; também pode ser que o código precise ser executado apenas uma vez, pois no caso os valores padrão adicionados ao banco de dados não podem ser alterados pelo usuário, que não possui uma interface com o usuário para alterar / excluir esses valores.
variable_set()
, que não são excluídosvariable_del()
, são carregados na memória quando o Drupal é inicializado e salvos em uma variável global; isso significa que eles estão na memória, independentemente do módulo que estiver usando esses valores, ou não. Usando uma tabela de banco de dados customizada, você pode ter certeza de que esses valores serão carregados apenas quando o módulo realmente precisar. Você não deve usarvariable_set()
se a variável Drupal contiver uma matriz à qual você continua adicionando um novo índice de matriz o tempo todo, por exemplo.Eu iria com
db_query
/db_insert
(D6 / D7) em hook_install ().Não é considerado uma prática ruim (e ninguém nunca está forçando você a usar
drupal_write_record()
).Não é incomum que as pessoas desabilitem e reativem os módulos e, nesse caso, seu código
hook_enable()
seria acionado a cada vez. o que não é legal.fonte