Cara yang lebih baik adalah melakukannya di dalam hook_enable () ; pada saat hook dipanggil, modul sudah diinstal, dan skema database-nya tersedia untuk Drupal, dan untuk drupal_write_record()
. Karena kait dipanggil setiap kali modul diaktifkan, dan bukan hanya ketika modul dipasang, implementasi kait harus memeriksa apakah sudah menambahkan baris database tersebut (misalnya, ia harus menggunakan variabel Drupal yang berisi nilai boolean) .
Sebagai contoh modul yang digunakan hook_enable()
untuk tujuan serupa, Anda dapat memeriksa forum_enable () , atau php_enable () (yang menambahkan format input "kode 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))));
}
}
Seperti yang ditunjukkan dari implementasi pengait tersebut, kode harus perlu dieksekusi setiap kali pengait dijalankan; bisa juga kode hanya perlu dijalankan sekali, karena dalam kasus ini nilai-nilai default yang ditambahkan ke database tidak dapat diubah dari pengguna, yang tidak memiliki antarmuka pengguna untuk mengubah / menghapus nilai-nilai tersebut.