При инсталляции модуля (в хуке hook_install()
) нельзя вызывать функцию drupal_write_record()
, потому что на этом этапе, инсталлируемый модуль ещё не активен, и схема таблицы не определена. Решением будет использование хука hook_enable()
и временной глобальной переменной:
/**
* Implements hook_schema()
*/
function mymodule_schema() {
$schema['mytable'] = array(/* ... */);
return $schema;
}
/**
* Implements hook_install().
*/
function mymodule_install() {
drupal_install_schema('mymodule');
$GLOBALS['mymodule_just_installed'] = true;
}
/**
* Implements hook_enable().
*/
function mymodule_enable() {
if (isset($GLOBALS['mymodule_just_installed'])) {
drupal_get_schema(null, true);
drupal_write_record('mytable', array(/* ... */));
}
}
Подсмотрено в коде модуля BUEditor.
Добавлено: для Drupal 7 неактуально.
Написанное актуально для
Drupal 6
Похожие записи
Комментарии
Так должно быть законченнее. Иначе drupal будет пытаться записать строчку в БД при каждом перевключении модуля.
$GLOBALS живёт только во время работы скрипта, это же не $_SESSION :)
Теперь буду знать. -)
Оч. хороший сайт.
Добавить комментарий