我在一所大学工作,在过去的一年里,我们终于脱离了数千页的静态HTML网站,并转移到Drupal网站。这显然需要大量的数据输入。
如果您已经在使用CMS并转换到更适合您需求的另一个CMS,该怎么办?在如此巨大的变化中,您如何最大限度地减少数据输入?是否有为此而构建的工具,或者应该遵循的一些最佳实践?
答案 0 :(得分:7)
Drupal的Migrate模块将提供很大的帮助。 Economist.com data migration to Drupal 将为您提供该过程的概述。
Drupalcon DC 2009上video演示文稿中的Migration: not just for the birds可能有点过时,但也提供了很好的介绍。
答案 1 :(得分:5)
无论发生什么,都必须手动预处理和后处理您的数据。尽早接受您的数据可能处于比您想象的更糟糕的状态:字段将被滥用;记录到记录的引用(外键)可能无法正确实现,或者根本没有实现;内容可能需要除草,偶尔也可能不好或不正确。
检查数据库编码。较旧的数据库不会采用Unicode编码,如果必须导出数据转储并将其导入其他地方,则会变得脾气暴躁。即便如此,假设你的数据中会有一些古怪的非打印字符:像Word这样的程序似乎以某种方式将它们注入到各处,我看到......代码点......你们不会相信。在为这些字符启动(甚至扫描数据库转储)之前,请考虑扫描数据。决定是否将它们垃圾或尝试转换它们,例如在单词“智能”标点字符。
从隐含的数据结构中创建显式数据结构非常困难。如果您的传入数据具有单独的日期字段,则可以将其映射到日期字段;如果它有一个日期作为大块HTML的一部分,即使该日期在具有id属性的标记中,简单脚本也不起作用。您可以使用BeautifulSoup的离线脚本或(如果您的HTML更好一点)更快的lxml来预处理您的数据集,提取这些隐式字段,并将它们保存为隐式格式。考虑创建一个中间数据库来进行这些修订。
Migrate模块非常出色,但为了获得非常好的数据保真度并发挥更聪明的技巧,您可能需要了解其钩子系统(Drupal的特定命名方案后的函数术语)和编写的基础知识。将这些钩子放入的模块(一个模块大致只是一个PHP文件,其中所有函数都以相同的文本开头,即模块文件的名称。)
所有导入的内容都应标记为至少粗略检查。您可以通过导入status = 0(即未发布)来执行此操作,然后使用Views模块创建一个视图以浏览内容并在其他选项卡中打开以进行检查。视图批量操作允许您在视图项旁边放置一组复选框,这样您就可以同时批准多个节点。
期望运行并重新运行并重新运行导入,每次修复新内容。尽早检查十个或二十个项目。如果有任何问题,请检查十或二十个。修复并重复导入。
衡量单次导入运行可能需要多长时间。悲观:当我们引入完整的数据集时,我们有一个导入,我们预计需要十个小时才会遇到指数减速;直到我们最终修复了一些慢查询,预计需要两周时间。
如果有疑问,或者如果您认为上述技术方面的工作时间比工作本身需要更多时间,那么只需雇佣临时工来处理数据。但是,在工作期间,您仍然需要尽可能早的质量控制。 Drupal开发人员也可以租用:尝试您所在国家/地区的相关IRC频道,或在相关groups.drupal.org组中发布说明。他们比临时工更贵,但他们通常会写出更好的PHP ......!考虑雇用一个代理机构:这是一个无耻的插件,因为我为一个机构工作,但有时候最好让专家来完成这些特定的工作。
真正好的进口总是很难,比你想象的要难。不要让它让你失望!
答案 2 :(得分:2)
迁移+表向导(以及架构+视图)是可行的方法。使用表向导,您可以使用migrate将任何表公开给drupal并相应地映射字段。
在这里查看详细的walktrough: http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard
答案 3 :(得分:2)
您希望能够访问django中的现有数据。这有助于我迁移:http://docs.djangoproject.com/en/1.2/howto/legacy-databases/。使用正确的模型定义,您将拥有完整的django功能,包括管理员。事实上,我正在使用django作为几个遗留php项目的管理后端 - django的管理员可以轻松地完成许多自定义的手写管理脚本。
授权应保持不变。用户应该能够使用他们的凭据登录,但是很难为auth数据编写迁移脚本,因为密码散列模式可能不同,并且在不知道普通密码的情况下无法在它们之间进行转换。 Django提供了一种支持不同auth源的方法,因此您可以编写Drupal auth后端:http://docs.djangoproject.com/en/1.2/topics/auth/#writing-an-authentication-backend
无需进行完全重写。如果某些部件工作正常,它们仍然可以由Drupal供电。可以使用具有相同UI的Django编写新代码。可以通过Web服务器URL重写来执行新旧部件之间的路由。 django和drupal部件都可以由同一个DB供电。