Я попытался ответить, как я это делаю в другом вопросе. Я также опубликую его здесь
Я думаю, что хорошая стратегия здесь заключается в использовании API профиля установки. С API профиля установки вы можете делать большинство вещей, которые используют инструменты администратора Drupal. Большинство основных форм просто устанавливают переменные в таблице переменных. Чтобы иметь возможность разумно модифицировать содержимое базы данных неконтента, то есть конфигурацию, целесообразно использовать функции обновления.
На моем сайте у нас есть модуль «ec», который очень мало отличается от его файла ec.install, содержащего функции обновления, например. ec_update_6001()
Ваша основная функция установки может позаботиться о фактическом запуске обновлений на любых новых установках, которые вы делаете, чтобы обновлять свои модули.
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;
}
Функция обновления образца или два из нашего реального файла следует теперь
// 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;
}
возможно дубликат [Drupal Стратегия управления Источник?] (Http://stackoverflow.com/questions/282858/drupal-source-control-strategy) – gnat 2012-11-16 13:41:29
См [предыдущие ответы на этот вопрос] (http://stackoverflow.com/questions/282858/drupal-source-control-strategy) – Eli 2008-11-26 17:36:36