【问题标题】:Creating Drupal CCK content programmatically/ via API以编程方式/通过 API 创建 Drupal CCK 内容
【发布时间】:2009-04-21 14:35:27
【问题描述】:

我正在使用 Drupal 6.x 系统来创建锻炼/个人培训计划,并且正在使用 CCK 与锻炼和计划的内容类型,其中计划包含一些标题字段和对练习的节点引用列表它包括。这很好用,我可以手动创建运行良好的程序。我现在想创建一个模块,可以根据我开发的一些算法自动生成这些程序,过程如下:

  1. 将所有练习加载到数组中
  2. 加载用户个人信息(之前输入)
  3. 建立最适合的练习
  4. 创建新的程序内容类型
  5. 保存节目

一个练习有许多相关的属性,虽然我可以使用 SQL 直接在表中完成上述所有操作,但它会非常复杂并且感觉不对。我想在第 1 步中将练习加载为一组练习对象(node_load?),然后创建一个程序对象并保存。这种 OO 类型的方法是否可行,还是我必须求助于直接操作数据?

【问题讨论】:

    标签: drupal cck


    【解决方案1】:

    解决此问题的最佳方法是编写您自己的模块来执行此操作。

    第 1 步你可以对所有的 excercies 执行 node_load($nid) 第 2 步您可以使用 user_load($uid) 第 3 步,您需要遍历用户对象并匹配适当的 excercies。 第 4/5 步我将创建一个新的 $node = stdClass();对象并使用正确的数据填充属性,然后执行 node_save($node);这将为它分配一个 $node->id 等。

    如果您不确定您的训练程序节点中有哪些属性,请执行 print_r($node);在您已经创建的一个上。

    菲尔

    【讨论】:

    • 我正计划为此编写一个模块 - node_save 是如何工作的?这只是保存在节点表中还是实际上也会为程序创建条目?
    • node_save 处理节点对象并将其保存在节点和 node_revisions 表中,然后在其上调用所有其他模块挂钩。
    【解决方案2】:

    Drupal 不提供任何“级联”保存机制来一次性保存节点的层次结构。您需要按照 Phil Carter 的描述在代码中构建每个节点并显式调用 node_save()。

    Node Export 模块可以生成用于以编程方式创建节点(包含 CCK 字段)的示例代码。

    【讨论】:

      【解决方案3】:

      有很多模块试图正确地执行导入操作。看看他们的对比http://groups.drupal.org/node/21338

      如果您需要将内容导入节点的策略或示例,这些都是很好的资源。

      【讨论】:

        【解决方案4】:

        我认为甚至没有必要“创建”这些程序。

        为什么不只显示符合您要求的练习列表并与用户分享“特征”。

        我会通过将“特征”作为分类来实现这一点。然后使用配置文件或分类标志附加到用户。然后在练习中显示一个列表(甚至可能是一个视图)和具有相同特征标签的那些。

        这将是动态的和用户特定的,注意需要预加载一堆程序。

        一个想法。

        【讨论】:

        • 最初我们是沿着这条路线走的,但是考虑到了很多用户数据,而且程序并没有像应有的那样量身定制。在第 3 步中建立最佳练习的算法现在相当复杂
        • 是的,我想这就是答案。但是通过正确的查询,您可以加载所有潜在的锻炼匹配,然后通过组织剩余的结果并显示该列表来缩小父亲的范围。只是为不需要节点工厂投票。
        猜你喜欢
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-23
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多