답변:
더 좋은 방법은 hook_enable () ; 후크가 호출 될 때 모듈이 이미 설치되었으며 해당 데이터베이스의 스키마를 Drupal 및에서 사용할 수 있습니다 drupal_write_record()
. 후크는 모듈이 설치 될 때뿐만 아니라 모듈이 활성화 될 때마다 항상 호출되므로 후크 구현은 해당 데이터베이스 행을 이미 추가하지 않았는지 확인해야합니다 (예 : 부울 값을 포함하는 Drupal 변수를 사용해야 함) .
hook_enable()
비슷한 목적으로 사용하는 모듈의 예로 forum_enable () 또는 php_enable () ( "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))));
}
}
이러한 후크 구현에서 알 수 있듯이 코드는 후크가 실행될 때마다 항상 실행되어야합니다. 데이터베이스에 추가 된 기본값을 사용자가 변경할 수없는 경우 (값을 변경 / 삭제할 사용자 인터페이스가없는) 코드를 한 번만 실행하면됩니다.
variable_set()
삭제되지 않은을 사용하여 설정 한 모든 값 은 variable_del()
Drupal 부트 스트랩시 메모리에로드되고 전역 변수에 저장됩니다. 이는 모듈이 해당 값을 사용하거나 사용하지 않고 메모리에 있음을 의미합니다. 사용자 정의 데이터베이스 테이블을 사용하면 모듈에 실제로 필요한 경우에만 해당 값이로드되도록 할 수 있습니다. 예를 들어 variable_set()
Drupal 변수에 새 배열 인덱스를 계속 추가하는 배열이 포함되어 있으면 사용해서는 안됩니다 .