La mejor manera es hacerlo dentro de hook_enable () ; en el momento en que se invoca el gancho, el módulo ya está instalado y el esquema de su base de datos está disponible para Drupal y para drupal_write_record()
. Como el gancho se invoca todas las veces que se habilita un módulo, y no solo cuando el módulo está instalado, la implementación del gancho debe verificar si ya no agregó esas filas de la base de datos (por ejemplo, debe usar una variable Drupal que contenga un valor booleano) .
Como ejemplo de módulo que se usa hook_enable()
para un propósito similar, puede verificar forum_enable () o php_enable () (que agrega el 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))));
}
}
Como se muestra en esas implementaciones de gancho, el código podría necesariamente ejecutarse todo el tiempo que se ejecuta el gancho; también podría ser que el código necesita ejecutarse una sola vez, ya que en el caso de que los valores predeterminados agregados a la base de datos no puedan ser alterados por el usuario, que no tiene una interfaz de usuario para alterar / eliminar esos valores.