是否可以使用Drupal编写数据输入脚本?

时间:2009-11-27 13:16:24

标签: php python drupal data-entry

我打算将商店的库存放在Drupal网站上,我想知道是否有可能创建一个脚本(可能在python / php中?)用CCK自动输入数据到Drupal?提前谢谢!

5 个答案:

答案 0 :(得分:2)

最简单和最容易的事情就是使用你为案例制作的一个Drupal模块来完成这些工作,而不必向服务器发送大量帖子并在节点负载上花费资源而不是。

无论如何,你需要的东西与mac回答here非常相似:

在这种情况下,您不需要所有特殊的file_field内容,但仍需要为您可能拥有的不同cck字段以及节点主体和标题插入值。设置可直接从数据库获取的值后,可以保存节点。

如果直接连接到db,则需要使用与drupal相同的类型,或者在Drupal api之外执行。如果您确实使用了drupal API,请查看db_set_active()

答案 1 :(得分:2)

有几个Drupal模块专门用于外部(大量)导入的不同场景 - 请检查this overview选项/比较。

如果您有非常具体的需求,可以使用现有模块和links/hints provided by googletorps(+1)编写自己的模块,以获取有关如何进行实际插入的指导,同时忽略概括。

答案 2 :(得分:2)

Henrik和Googletorp已经做了很多好的建议。

设计策略时需要考虑的其他一些因素:

  1. 你打算做一个成熟的电子商店(大概用ubercart实现),或者你只是设置一个节点视图,只是为了向网站访问者展示广告资源?
  2. 您要导入多少产品?
  3. 你多久会重新进口一次?
  4. 我觉得可以排除的解决方案:

    • POST:由googletorp评论,它会过于复杂。
    • 外部脚本:你无法真正避免(除非你喜欢危险地生活和/或有时间浪费)使用drupal API,无论它们是核心还是ubercart。数据分散在多个表中,并且在插入节点时会触发大量挂钩。唯一的例外是如果您要执行首先执行引导程序的PHP脚本(请参阅 index.php xmlrpc.php 的结构以了解它是如何工作的),但是在这种情况下,我宁愿选择一个模块:更优雅,便携,可维护。

    我支持的解决方案:

    • 做自己的模块!正如googletorp所指出的,我提供了一些关于如何在this answer中添加CCK字段的示例代码。
    • 是的,那是......是我唯一相信的人! ;)

    然而,我所学到的同样重要的是为导入选择合适的数据源。这是我的意见:

    • 直接从数据库中读取:只有在导出应用程序的数据库模式足够简单以构建合理查询时,必须一劳永逸地导入内容 。软件发生变化并不断发展,数据库模式也随之而来。如果您发现自己需要在两个月内重新导入并且其他应用程序的架构发生了变化,那么您将不得不更改代码,更改测试等等......
    • 使用XML文件:如果您的原始应用程序可以使用此格式导出,则使用PHP“ SimpleXML Xpath + PHP类型转换它实际上是一个轻而易举地在几分钟内以您想要的格式获取所需的数据。这种方法的唯一缺点是依赖于...文件。因此,如果您需要定期进行无人值守和自动导入,那么可以预见所有可能发生的问题(文件系统上的错误权限,文件损坏,编码错误......)并采取相应的措施是一件很痛苦的事情。 。反之亦然,当我知道有人会一直监督进口过程并且可以在遇到麻烦时进行干预时,我非常喜欢这种方法。
    • Webservice:如果我必须以自动和定期方式导入,那么这是我最喜欢的那个。最大的优势是两个应用程序相互“交谈”,并暴露了一些业务逻辑,这样你就可以实际看到一个类似的会话:“嘿,我需要自上周以来价格发生变化的所有产品“ - ”你在这里,它们应该是127,分为三类,你复制一下吗?“ - “哦,是的......所有人都响亮而清晰:127项和3类!”这简化了很多捕获错误和异常。虽然Drupal作为Web服务使用者和提供者开箱即用,但您还必须在其他应用程序上实现Web服务,这可能会或可能不会很困难:它完全取决于导出应用程序。

    HTH!

答案 3 :(得分:0)

CCK或其他方式,它只是一个良好的POST查询(大概),所以肯定,去吧。

答案 4 :(得分:0)

如果您的源数据在MySQL中,我会查看Migrate模块来创建内容。以下是项目页面的摘录:

  

...提供了一个灵活的框架,用于将内容从其他来源迁移到Drupal(例如,将网站从另一个CMS转换为Drupal时)。开箱即用,支持创建核心Drupal对象,如节点,用户,文件,术语和注释 - 它可以轻松扩展,以便迁移其他类型的内容。使用捆绑的Web界面(迁移UI模块)或包含Drush命令(强烈建议)导入和回滚内容。