سؤال

I'm using the migrate module to copy data from several sources to a new drupal installation. So far, I'm able to replicate a lot of what I need from the examples provided with the module. I'm currently stuck on adding terms or taxonomy to newly created nodes. The example shows:

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

I've tracked down the migrate_example_beer_styles destination mapping and it seems to be the machine name for that taxonomy.

I've tried imitating this behavior with every variation of what my machine_name should be, but the terms never seem to get associated:

By id:

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

And, by name:

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

Am I wrong assuming the destination mapping is the machine name for a taxonomy?

This version of the migrate module was released recently, I haven't found any other helpful examples on the web.

هل كانت مفيدة؟

المحلول

I'm currently working with migrate module myself, and I agree that the documentation is somewhat wanting at this point. :)

The 'machine name' of a vocabulary is listed in the Vocabulary table, in the field 'module'. Try using that value. Do note that you need to feed the text into the mapping, not the ids.

نصائح أخرى

This question still seems to be getting some views, so I thought I'd add what else I've discovered. While the accepted answer works, you are able to map Vocabs on ID:

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

->separator(',') used for passing a delimited string of source ids. Obviously, leave that off if you're mapping an array of values.

This is my first post on stackoverflow, so I apologize in advance if this isn't the accepted way to submit more information concerning this issue...

I've been stumbling around with the Migrate module for the past few days and was looking for a way to do this in Drupal 7. I had a comma-delimited list of taxonomy ids within an XML field that I wanted to use, but every example I found was retrieving from an external class, or from a database source.

Anyway, through trial and error, I found that you can use a field within the migrate class, rather than reference an external term migration class.

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

Check out the taxonomy csv import module at http://drupal.org/project/taxonomy_csv. It was easy to use and did what it was supposed to and more. I ended up only using the migrate module for importin gNodes and used this module for the taxonomy. It was a pleasure to use.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top