diff --git a/migrate_example_advanced/config/install/migrate_plus.migration.wine_variety_multi_xml.yml b/migrate_example_advanced/config/install/migrate_plus.migration.wine_variety_multi_xml.yml index 4fad49feadd098457a65b196b07200f0726d5f52..e35e8ca94667b08c94fa6d1ba566766941c88eeb 100755 --- a/migrate_example_advanced/config/install/migrate_plus.migration.wine_variety_multi_xml.yml +++ b/migrate_example_advanced/config/install/migrate_plus.migration.wine_variety_multi_xml.yml @@ -37,6 +37,10 @@ source: name: category_parent label: 'Unique position identifier' selector: parent + - + name: category_attributes + label: 'List of variety attributes' + selector: attributes # Under 'ids', we identify source fields populated above which will uniquely # identify each imported item. The 'type' makes sure the migration map table # uses the proper schema type for stored the IDs. @@ -53,6 +57,7 @@ process: plugin: migration migration: wine_terms source: category_parent + field_variety_attributes: category_attributes destination: plugin: entity:taxonomy_term migration_dependencies: diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_form_display.taxonomy_term.migrate_example_wine_varieties.default.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_form_display.taxonomy_term.migrate_example_wine_varieties.default.yml new file mode 100644 index 0000000000000000000000000000000000000000..32bd692441309e9b7a349375d42002306cb3add6 --- /dev/null +++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_form_display.taxonomy_term.migrate_example_wine_varieties.default.yml @@ -0,0 +1,41 @@ +langcode: en +status: true +dependencies: + config: + - field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes + - taxonomy.vocabulary.migrate_example_wine_varieties + module: + - path + - text +id: taxonomy_term.migrate_example_wine_varieties.default +targetEntityType: taxonomy_term +bundle: migrate_example_wine_varieties +mode: default +content: + description: + type: text_textarea + weight: 1 + settings: + placeholder: '' + rows: 5 + third_party_settings: { } + field_variety_attributes: + type: string_textfield + weight: 3 + settings: + size: 60 + placeholder: '' + third_party_settings: { } + name: + type: string_textfield + weight: 0 + settings: + size: 60 + placeholder: '' + third_party_settings: { } + path: + type: path + weight: 2 + settings: { } + third_party_settings: { } +hidden: { } diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_view_display.taxonomy_term.migrate_example_wine_varieties.default.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_view_display.taxonomy_term.migrate_example_wine_varieties.default.yml new file mode 100644 index 0000000000000000000000000000000000000000..b475708a770e09d2be7011a98df1c76ac8ff96d0 --- /dev/null +++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/core.entity_view_display.taxonomy_term.migrate_example_wine_varieties.default.yml @@ -0,0 +1,27 @@ +langcode: en +status: true +dependencies: + config: + - field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes + - taxonomy.vocabulary.migrate_example_wine_varieties + module: + - text +id: taxonomy_term.migrate_example_wine_varieties.default +targetEntityType: taxonomy_term +bundle: migrate_example_wine_varieties +mode: default +content: + description: + label: hidden + type: text_default + weight: 0 + settings: { } + third_party_settings: { } + field_variety_attributes: + type: string + weight: 0 + label: inline + settings: + link_to_entity: false + third_party_settings: { } +hidden: { } diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes.yml new file mode 100644 index 0000000000000000000000000000000000000000..7164459f81accbf623fa72a338d55dce727dce53 --- /dev/null +++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.field.taxonomy_term.migrate_example_wine_varieties.field_variety_attributes.yml @@ -0,0 +1,18 @@ +langcode: en +status: true +dependencies: + config: + - field.storage.taxonomy_term.field_variety_attributes + - taxonomy.vocabulary.migrate_example_wine_varieties +id: taxonomy_term.migrate_example_wine_varieties.field_variety_attributes +field_name: field_variety_attributes +entity_type: taxonomy_term +bundle: migrate_example_wine_varieties +label: Attributes +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: { } +field_type: string diff --git a/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml new file mode 100644 index 0000000000000000000000000000000000000000..e5db23f204055512883dd301d053cc4b02fdb62e --- /dev/null +++ b/migrate_example_advanced/migrate_example_advanced_setup/config/install/field.storage.taxonomy_term.field_variety_attributes.yml @@ -0,0 +1,20 @@ +langcode: en +status: true +dependencies: + module: + - taxonomy +id: taxonomy_term.field_variety_attributes +field_name: field_variety_attributes +entity_type: taxonomy_term +type: string +settings: + max_length: 255 + is_ascii: false + case_sensitive: false +module: core +locked: false +cardinality: -1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/migrate_example_advanced/migrate_example_advanced_setup/src/Plugin/rest/resource/VarietyMultiFiles.php b/migrate_example_advanced/migrate_example_advanced_setup/src/Plugin/rest/resource/VarietyMultiFiles.php index cd126478f4636380f40b78cc547cb722c0b03b3b..e882b92602c980e553d415110b5fcd122eaef8f9 100644 --- a/migrate_example_advanced/migrate_example_advanced_setup/src/Plugin/rest/resource/VarietyMultiFiles.php +++ b/migrate_example_advanced/migrate_example_advanced_setup/src/Plugin/rest/resource/VarietyMultiFiles.php @@ -39,11 +39,19 @@ class VarietyMultiFiles extends ResourceBase { 'name' => 'Amarone', 'parent' => 3, // categoryid for 'red'. 'details' => 'Italian Venoto region', + 'attributes' => [ + 'rich', + 'aromatic', + ], ]; $data['variety'][] = [ 'name' => 'Barbaresco', 'parent' => 3, // categoryid for 'red'. 'details' => 'Italian Piedmont region', + 'attributes' => [ + 'smoky', + 'earthy', + ], ]; } if (strtolower($type) != 'red') { @@ -51,11 +59,17 @@ class VarietyMultiFiles extends ResourceBase { 'name' => 'Kir', 'parent' => 1, // categoryid for 'white'. 'details' => 'French Burgundy region', + 'attributes' => [], ]; $data['variety'][] = [ 'name' => 'Pinot Grigio', 'parent' => 1, // categoryid for 'white'. 'details' => 'From the northeast of Italy', + 'attributes' => [ + 'fruity', + 'medium-bodied', + 'slightly sweet', + ], ]; } diff --git a/src/Plugin/migrate_plus/data_parser/Xml.php b/src/Plugin/migrate_plus/data_parser/Xml.php index 65f1bab1e0f25f4ae45f9ed14da423bbba636701..a60d6df415c7690b5104d7a441885d6cc5c8150f 100644 --- a/src/Plugin/migrate_plus/data_parser/Xml.php +++ b/src/Plugin/migrate_plus/data_parser/Xml.php @@ -225,7 +225,13 @@ class Xml extends DataParserPluginBase implements ContainerFactoryPluginInterfac if ($target_element) { foreach ($this->fieldSelectors() as $field_name => $xpath) { foreach ($target_element->xpath($xpath) as $value) { - $this->currentItem[$field_name] = (string) $value; + $this->currentItem[$field_name][] = (string) $value; + } + } + // Reduce single-value results to scalars. + foreach ($this->currentItem as $field_name => $values) { + if (count($values) == 1) { + $this->currentItem[$field_name] = reset($values); } } }