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.
variable_set()
, yang tidak dihapus denganvariable_del()
, dimuat dalam memori saat bootup Drupal, dan disimpan dalam variabel global; ini berarti mereka berada dalam memori apa pun modul yang menggunakan nilai-nilai itu, atau tidak. Menggunakan tabel basis data khusus, Anda dapat memastikan nilai-nilai itu hanya dimuat ketika modul benar-benar membutuhkannya. Anda tidak boleh menggunakanvariable_set()
jika variabel Drupal berisi larik yang terus Anda tambahkan indeks larik baru setiap saat, misalnya.Saya akan menggunakan
db_query
/db_insert
(D6 / D7) di hook_install ().Itu tidak dianggap praktik buruk (dan tidak ada yang memaksa Anda untuk menggunakan
drupal_write_record()
).Ini tidak biasa bagi orang untuk menonaktifkan dan mengaktifkan kembali modul, dan dalam hal ini kode Anda
hook_enable()
akan diaktifkan setiap kali. itu tidak baik.sumber