Drupal → Вызов drupal_write_record() в хуке hook_install()
При инсталляции модуля (в хуке 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 будет пытаться записать строчку в БД при каждом перевключении модуля.
$GLOBALS живёт только во время работы скрипта, это же не $_SESSION :)
Теперь буду знать. -)
Оч. хороший сайт.
Оставить комментарий