3

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

4

5 回答 5

2

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

无论如何,您需要的与此处的 mac 答案非常相似:

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

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

于 2009-11-27T13:39:13.700 回答
2

有几个 Drupal 模块专用于外部(大量)导入的不同场景 - 检查此概述以获取选项/比较。

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

于 2009-11-27T13:40:21.857 回答
2

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

设计策略时需要考虑的一些额外元素:

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

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

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

我会支持的解决方案:

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

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

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

于 2009-11-27T15:50:56.243 回答
0

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

于 2009-11-27T13:30:20.593 回答
0

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

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

于 2009-11-27T16:31:12.990 回答