可以用Drupal进行数据录入脚本吗?
我打算把一个商店的库存放到一个Drupal网站上,我想知道是否可以写一个脚本(可能用Python或PHP)来自动把数据输入到Drupal里,使用CCK功能?提前谢谢你!
5 个回答
2
Henrik和Googletorp已经给出了很多不错的建议。
在设计你的策略时,还有几个额外的要素需要考虑:
- 你打算做一个完整的电子商店(可能是用ubercart实现的)还是只是简单地展示一下库存给网站访客看?
- 你打算导入多少产品?
- 你打算多久重新导入一次这些产品?
我绝对会排除的解决方案:
- POST:正如googletorp所说,这会变得过于复杂。
- 外部脚本:你真的无法避免使用Drupal的API,无论是核心的还是ubercart的。数据分散在多个表中,当插入一个节点时会触发很多钩子。唯一的例外是如果你写一个PHP脚本,先进行引导(可以参考index.php或xmlrpc.php的结构看看怎么做),但在这种情况下,我更倾向于直接做一个模块:这样更优雅、可移植、易于维护。
我支持的解决方案:
- 自己做一个模块!正如googletorp提到的,我在这个回答中给了一些关于如何添加CCK字段的示例代码。
- 是的,这就是...我唯一相信的方案!;)
不过我学到的同样重要的是选择合适的数据源进行导入。这是我的看法:
- 直接从数据库读取:只有在你只需一次性导入数据,并且导出应用的数据库结构足够简单以便构建合理的查询时,这种方法才好用。软件会不断变化,数据库结构也会随之变化。如果你在两个月后需要重新导入,而另一个应用的结构已经改变,你就得修改代码、修改测试等等……
- 使用XML文件:如果你的原始应用可以导出这种格式,利用PHP的SimpleXML和Xpath加上PHP类型转换,几分钟内就能轻松获取你想要的数据。这个方法的唯一缺点是依赖于……文件。所以,如果你需要定期无人值守的自动导入,预见所有可能出现的问题(文件系统权限错误、文件损坏、编码错误……)并采取应对措施会有点麻烦。相反,我非常喜欢这种方法,尤其是在我知道会有人全程监督导入过程,并能在出现问题时进行干预的情况下。
- 网络服务:如果我需要以自动和定期的方式导入数据,这是我最喜欢的方法。最大优点是两个应用可以“对话”,并暴露出一些业务逻辑,这样你就可以进行类似这样的会话:“嘿,我需要所有自上周以来价格变动的产品” - “给你,它们应该有127个,分为三个类别,你明白了吗?” - “哦,明白了……我收到了,127个商品和3个类别!”这大大简化了错误和异常的捕获。虽然Drupal可以作为网络服务的消费者和提供者,但你还需要在另一个应用上实现网络服务,这可能会简单也可能会复杂:完全取决于导出应用。
希望这些对你有帮助!
2
最快最简单的方法就是自己做一个小的Drupal模块,这样就不用把很多帖子发送到服务器,也不用浪费资源在节点加载上。
总之,你需要的东西和mac在这里提到的很相似:
在这种情况下,你不需要所有那些特别的file_field东西,但你还是需要插入不同的cck字段的值,还有节点的内容和标题。设置好这些值后,你可以直接从数据库中获取,然后保存你的节点。
如果你直接连接数据库,你需要使用和Drupal相同类型的数据,或者在Drupal的API之外操作。如果你使用Drupal的API,可以看看db_set_active()这个函数。
2
有几个Drupal模块专门用于处理不同的外部(大规模)导入情况——你可以查看这个概述,里面有各种选项和比较。
如果你的需求很特别,你可以自己写一个模块,利用现有的模块和googletorps提供的链接和提示(+1),这些可以指导你如何进行实际的数据插入,而不需要关注那些笼统的说法。