1) Где лучше всего заполнить новую таблицу базы данных, когда модуль впервые установлен, включен? Мне нужно пойти и получить некоторые данные из внешнего источника и сделать это прозрачно, когда пользователь устанавливает / включает мой пользовательский модуль.
Я создаю схему в {mymodule} _schema (), делаю drupal_install_schema ({tablename}); в hook_install. Затем я пытаюсь заполнить таблицу в hook_enable, используя drupal_write_record.
Я подтвердил, что таблица была создана, я не получаю ошибок при выполнении hook_enable, но когда я запрашиваю новую таблицу, я не получаю строк назад - она пуста.
Вот один из вариантов кода, который я пробовал:
/**
* Implementation of hook_schema()
*/
function ncbi_subsites_schema() {
// we know it's MYSQL, so no need to check
$schema['ncbi_subsites_sites'] = array(
'description' => 'The base table for subsites',
'fields' => array(
'site_id' => array(
'description' => 'Primary id for site',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
), // end site_id
'title' => array(
'description' => 'The title of the subsite',
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
), //end title field
'url' => array(
'description' => 'The URL of the subsite in Production',
'type' => 'varchar',
'length' => 255,
'default' => '',
), //end url field
), //end fields
'unique keys' => array(
'site_id'=> array('site_id'),
'title' => array('title'),
), //end unique keys
'primary_key' => array('site_id'),
); // end schema
return $schema;
}
Вот тут hook_install:
function ncbi_subsites_install() {
drupal_install_schema('ncbi_subsites');
}
Вот здесь hook_enable:
function ncbi_subsites_enable() {
drupal_get_schema('ncbi_subsites_site');
// my helper function to get data for table (not shown)
$subsites = ncbi_subsites_get_subsites();
foreach( $subsites as $name=>$attrs ) {
$record = new stdClass();
$record->title = $name;
$record->url = $attrs['homepage'];
drupal_write_record( 'ncbi_subsites_sites', $record );
}
}
Может кто-нибудь сказать мне, что мне не хватает?