【问题标题】:Is it possible to script for data entry with Drupal?是否可以使用 Drupal 编写数据输入脚本?
【发布时间】:2009-11-27 13:16:23
【问题描述】:

我正计划将商店的库存放在 Drupal 站点上,我想知道是否可以创建一个脚本(可能在 python/php 中?)以使用 CCK 自动将数据输入 Drupal?提前致谢!

【问题讨论】:

    标签: php python drupal data-entry


    【解决方案1】:

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

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

    【讨论】:

    • +1 查看 drupal.org 的开箱即用解决方案总是值得的。
    【解决方案2】:

    最快和最简单的方法是使用您为案例制作的一个小 Drupal 模块来完成这些工作,而不必向服务器发送大量帖子并将资源花费在节点负载上等等。

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      1. 您是打算做一个成熟的电子商店(大概是用ubercart 实现的)还是只是设置一个节点视图,只是为了向网站访问者展示库存?
      2. 您要进口多少产品?
      3. 您打算多久重新导入一次?

      我肯定会排除的解决方案:

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

      我会支持的解决方案:

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

      但我学到的同样重要的是选择合适的数据源进行导入。这是我的看法:

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

      HTH!

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • POST 不是去这里的方式,使用 drupal 表单令牌等,也不会那么容易。
        • 如果您的代码实际上将表单加载到内存中,我不明白为什么表单令牌会造成任何问题。使用 Mechanize、Nokogiri 等工具应该不会太难。(不过,如果你不喜欢 Ruby,你只能自己寻找 PHP 等价物。)
        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-28
          • 2021-08-26
          • 1970-01-01
          • 2011-06-27
          • 1970-01-01
          相关资源
          最近更新 更多