Myślę, że dobrą strategią jest użycie interfejsu API profilu instalacji. Za pomocą API do profilu instalacji możesz zrobić większość rzeczy, które używają narzędzi administracyjnych Drupala. Większość podstawowych formularzy po prostu ustawia zmienne w tabeli zmiennych. Aby móc sensownie przetworzyć zawartość bazy danych bez treści, np.konfiguracja jest mądra, aby korzystać z funkcji aktualizacji.
Na mojej stronie mamy moduł "ec", który ma bardzo niewiele oprócz tego, że zawiera plik aktualizacji ec.install, np. ec_update_6001()
Twoja główna funkcja instalacji może zająć się faktycznie uruchomieniem aktualizacji nowych instalacji, aby zaktualizować swoje moduły.
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;
}
Funkcja aktualizacji lub dwie próbki z naszego rzeczywistego pliku teraz śledzić
// 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();
}
Skutecznie to przede wszystkim rozwiązuje problem wersjonowania kodu z bazami danych i Drupal. Używamy go intensywnie. Pozwala nam na promowanie nowego kodu, który zmienia konfigurację bazy danych bez konieczności ponownego importowania bazy danych lub wprowadzania zmian na żywo. Oznacza to również, że możemy właściwie testować wersje bez obaw o ukryte zmiany w bazie danych.
Wreszcie cck i widoki wspierają to podejście. Zobacz ten fragment kodu:
// 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;
}
hmm, czy możesz trochę wyjaśnić? czy w zasadzie mówisz o ustawieniach takich jak niektóre moduły? – Owen
Naprawdę dobre pytanie, dzięki. – sepehr