La meilleure façon est de le faire dans hook_enable () ; au moment où le hook est invoqué, le module est déjà installé et le schéma de sa base de données est disponible pour Drupal et pour drupal_write_record()
. Comme le hook est invoqué à chaque fois qu'un module est activé, et pas seulement lorsque le module est installé, l'implémentation du hook doit vérifier si elle n'a pas déjà ajouté ces lignes de base de données (par exemple, elle doit utiliser une variable Drupal contenant une valeur booléenne) .
Comme exemple de module qui utilise hook_enable()
dans un but similaire, vous pouvez vérifier forum_enable () , ou php_enable () (qui ajoute le format d'entrée "code 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))));
}
}
Comme le montrent ces implémentations de hook, le code peut nécessairement avoir besoin d'être exécuté à chaque fois que le hook est exécuté; il peut également être nécessaire d'exécuter le code une seule fois, car dans le cas où les valeurs par défaut ajoutées à la base de données ne peuvent pas être modifiées par l'utilisateur, qui n'a pas d'interface utilisateur pour modifier / supprimer ces valeurs.