【问题标题】:How do I add taxonomy terms using Drupal Migrate如何使用 Drupal Migrate 添加分类术语
【发布时间】:2011-05-28 07:44:31
【问题描述】:

我正在使用migrate module 将数据从多个来源复制到新的drupal 安装。到目前为止,我能够从模块提供的示例中复制很多我需要的东西。我目前一直在为新创建的节点添加术语或分类。示例显示:

// These are related terms, which by default will be looked up by name
$this->addFieldMapping('migrate_example_beer_styles', 'terms')
     ->separator(',');

我已经找到了 migrate_example_beer_styles 目标映射,它似乎是该分类的 machine name

我尝试用我的machine_name 的每一个变体来模仿这种行为,但这些术语似乎从未关联:

按编号:

// where source breed_id is '1,100' - it finds mapped values accordingly
$this->addFieldMapping('breeds', 'breed_id')
     ->sourceMigration('BreedMigration')
     ->separator(',')

而且,按名称:

// where source breeds is 'Dogs,German Shepherd'
$this->addFieldMapping('breeds', 'breeds')
     ->separator(',');

假设目标映射是分类的machine name,我错了吗?

这个版本的migrate module最近发布了,我在网上没有找到任何其他有用的例子。

【问题讨论】:

    标签: drupal drupal-7 migrate


    【解决方案1】:

    这个问题似乎仍然有一些观点,所以我想我会添加我发现的其他内容。虽然接受的答案有效,但您可以在 ID 上映射词汇:

    $this->addFieldMapping('Exact Case Sensitive Vocab Name', 'source_field_name')
         ->sourceMigration('ExactSourceClassName')
         ->arguments(array('source_type' => 'tid'))
         ->separator(',');
    

    ->separator(',') 用于传递分隔的源 ID 字符串。显然,如果您正在映射一个值数组,请不要使用它。

    【讨论】:

    • 我试图在我的迁移中简单地传递 tid,直到我发现这个问题,我无法弄清楚为什么它不起作用。现在我知道了!
    • 只是想指出,此代码将使用最新版本的 Migrate 模块发出警告。在 ID 上映射 Vocabs 的正确方法是:$this->addFieldMapping('Exact Case Sensitive Vocab Name:source_type')->defaultValue('tid');
    • 好吧,如果我有 (field_city) (entityReference) 用于目标分类术语和 (Cities) 分类词汇和列 (name) 来自我的源表,我该如何完成这? $this->addFieldMapping('Cities:source_type')->defaultValue('tid');我还需要什么?
    【解决方案2】:

    我自己目前正在使用 migrate 模块,我同意在这一点上文档有些欠缺。 :)

    词汇表的“机器名称”列在词汇表的“模块”字段中。尝试使用该值。请注意,您需要将文本输入映射,而不是 id。

    【讨论】:

    • 我确实偶然发现了您推荐的解决方案。我使用了词汇名称(需要精确大小写)而不是机器友好的名称。还发现在文本上而不是在 id 上的映射有效。
    【解决方案3】:

    这是我在 stackoverflow 上的第一篇文章,所以如果这不是提交有关此问题的更多信息的公认方式,我提前道歉...

    在过去的几天里,我一直在纠结于 Migrate 模块,并正在寻找一种在 Drupal 7 中执行此操作的方法。我在我想使用的 XML 字段中有一个以逗号分隔的分类 ID 列表,但我发现的每个示例都是从外部类或数据库源中检索的。

    无论如何,经过反复试验,我发现您可以在 migrate 类中使用字段,而不是引用外部术语迁移类。

    $this->addFieldMapping('field_article_type', 'category_id')
         ->arguments(array('source_type' => 'tid'))
         ->xpath('/article/category_id')
         ->separator(',');
    

    【讨论】:

      【解决方案4】:

      查看 http://drupal.org/project/taxonomy_csv 的分类 csv 导入模块。 它易于使用,并且做了它应该做的事情等等。 我最终只使用了 migrate 模块来导入 gNodes 并将这个模块用于分类。使用起来很愉快。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多