gpt4 book ai didi

svn - Drupal 源代码控制策略?

转载 作者:行者123 更新时间:2023-12-03 08:41:28 24 4
gpt4 key购买 nike

在标准 php 或基于源代码的项目中,我们可以轻松地将所有代码保存在 SVN 中,每个开发人员都可以 checkout 他们自己的副本并就相同的代码进行协作。

然而,在开发 Drupal 站点时,大部分工作都在“设置”中。除了主题和模块之外,您实际上没有任何“源代码”。您如何运行同一站点的多个实例,以便开发人员可以同时工作并共享他们的工作?

示例场景:

我们启动了一个 Drupal 站点的初始版本,其中创建了内容类型“X”。我们最初还在网站上启动了一个 View ,该 View 按时间顺序列出了所有类型为“X”的节点。客户开始使用网站,添加内容、菜单项等。

下一个版本计划为该 View 添加用户搜索功能。但是,该设置包含在数据库中。我们可以将生产数据库复制到我们的开发版本,以在我们更改 View 时获取最新数据。然而,在那段时间里,客户端仍然可以更新站点,使我们的开发数据库不同步。当我们准备好将新 View 推送到生产环境时,除了手动重复在生产安装中设置它的步骤之外,还有更简单的方法吗?

最佳答案

我认为这里的一个好策略是使用安装配置文件 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 和 views 支持这种方法。请参阅此代码段
// 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;
}

关于svn - Drupal 源代码控制策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/282858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com