ここでの良い戦略は、インストール プロファイル API を使用することだと思います。インストール プロファイル API を使用すると、Drupal 管理ツールを使用してできることのほとんどを行うことができます。ほとんどのコア フォームは、変数テーブルに変数を設定するだけです。コンテンツ データベース以外のコンテンツ、つまり構成を適切にバージョン管理できるようにするには、更新機能を使用するのが賢明です。
私のサイトでは、ec.install ファイルに ec_update_6001() などの更新関数が含まれていることを除けば、ほとんど機能しないモジュール「ec」があります。
メインのインストール機能は、モジュールを最新にするために作成した新しいインストールで実際に更新を実行することを処理できます。
function ec_install() {
$ret = array();
$num = 0;
while (1) {
$version = 6000 + $num;
$funcname = 'ec_update_' . $version;
if (function_exists($funcname)) {
$ret[] = $funcname();
$num++;
} else {
break;
}
}
return $ret;
}
実際のファイルからの更新関数のサンプルが 1 つまたは 2 つ続きます。
// Create editor role and set permissions for comment module
function ec_update_6000() {
install_include(array('user'));
$editor_rid = install_add_role('editor');
install_add_permissions(DRUPAL_ANONYMOUS_RID, array('access comments'));
install_add_permissions(DRUPAL_AUTHENTICATED_RID, array('access comments', 'post comments', 'post comments without approval'));
install_add_permissions($editor_rid, array('administer comments', 'administer nodes'));
return array();
}
// Enable the pirc theme.
function ec_update_6001() {
install_include(array('system'));
// TODO: line below is not working due to a bug in Install Profile API. See http://drupal.org/node/316789.
install_enable_theme('pirc');
return array();
}
// Add the content types for article and mtblog
function ec_update_6002() {
install_include(array('node'));
$props = array(
'description' => 'Historical Movable Type blog entries',
);
install_create_content_type('mtblog', 'MT Blog entry', $props);
$props = array(
'description' => 'Article',
);
install_create_content_type('article', 'Article', $props);
return array();
}
これにより、データベースと Drupal コードのバージョン管理の問題が実質的に解決されます。私たちはそれを広く使用しています。これにより、データベースを再インポートしたりライブで変更したりすることなく、データベース構成を変更する新しいコードを促進できます。これはまた、隠れたデータベースの変更を恐れることなく、リリースを適切にテストできることを意味します。
最後に cck とビューがこのアプローチをサポートしています。このコード スニペットを参照してください
// Enable CCK modules, add CCK types for Articles in prep for first stage of migration,
// enable body for article, enable migration modules.
function ec_update_6023() {
$ret = array();
drupal_install_modules(array('content', 'content_copy', 'text', 'number', 'optionwidgets'));
install_include(array('content', 'content_copy'));
install_content_copy_import_from_file(drupal_get_path('module', 'ec') . '/' . 'article.type', 'article');
$sql = "UPDATE {node_type} SET body_label='Body', has_body=1
WHERE type = 'article'";
$ret[] = update_sql($sql);
return $ret;
}