Der bessere Weg ist, es in hook_enable () zu tun ; Zum Zeitpunkt des Aufrufs des Hooks ist das Modul bereits installiert und das Schema seiner Datenbank steht Drupal und drupal_write_record()
. Da der Hook immer dann aufgerufen wird, wenn ein Modul aktiviert ist, und nicht nur, wenn das Modul installiert ist, sollte die Hook-Implementierung prüfen, ob diese Datenbankzeilen noch nicht hinzugefügt wurden (z. B. sollte eine Drupal-Variable verwendet werden, die einen booleschen Wert enthält). .
Als Beispiel für ein Modul, das hook_enable()
für einen ähnlichen Zweck verwendet wird, können Sie forum_enable () oder php_enable () überprüfen (wodurch das Eingabeformat "PHP-Code" hinzugefügt wird ).
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))));
}
}
Wie aus diesen Hook-Implementierungen hervorgeht, muss der Code möglicherweise immer ausgeführt werden, wenn der Hook ausgeführt wird. Es kann auch sein, dass der Code nur einmal ausgeführt werden muss, da die der Datenbank hinzugefügten Standardwerte nicht vom Benutzer geändert werden können, der keine Benutzeroberfläche zum Ändern / Löschen dieser Werte hat.