Cách tốt hơn là làm điều đó bên trong hook_enable () ; tại thời điểm hook được gọi, mô-đun đã được cài đặt và lược đồ cơ sở dữ liệu của nó có sẵn cho Drupal và drupal_write_record()
. Vì hook được gọi tất cả các lần mô-đun được bật và không chỉ khi mô-đun được cài đặt, việc triển khai hook nên kiểm tra xem nó đã không thêm các hàng cơ sở dữ liệu đó chưa (ví dụ: nó nên sử dụng biến Drupal chứa giá trị boolean) .
Ví dụ về mô-đun sử dụng hook_enable()
cho mục đích tương tự, bạn có thể kiểm tra forum_enable () hoặc php_enable () (có thêm định dạng đầu vào "mã 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))));
}
}
Như được hiển thị từ các triển khai hook đó, mã có thể cần phải được thực thi tất cả các lần hook được thực thi; đó cũng có thể là mã cần được thực thi một lần, vì trong trường hợp các giá trị mặc định được thêm vào cơ sở dữ liệu có thể bị thay đổi từ người dùng, người không có giao diện người dùng để thay đổi / xóa các giá trị đó.