commerce_export-8.x-1.0-alpha1/config/install/migrate_plus.migration.import_product.yml
config/install/migrate_plus.migration.import_product.yml
# Import a product.
#
# Import a product with up to 2 taxonomy vocabularies, and single valued and
# multi valued entity reference fields. The product type is 'default'.
#
# If any of the field values do not exist in the source, processing for that
# item is skipped, the remaining data is still imported.
#
# To modify
#
# Destination site configuration:
# - Same requirements as the taxonomy_term migration.
# - Same requirements as the paragraph_tab migration.
# - Same requirements as the import_video migration.
# - Same requirements as the import_product_variation migration.
# - Install the Paragraph Module.
#
id: import_product
label: Products
migration_group: commerce_export
source:
# Uses a custom source plugin, based on the CSV source plugin in migrate_source_csv, that will build an array of
# product variation ids as well as trim the input from the source CSV.
plugin: product_csv
# Change the path and filename to match your source CSV file.
path: 'public://import/product.csv'
# Change the number of header rows to suit your source CVS file.
header_row_count: 1
# Change the enclosure character to suit your source CVS file.
enclosure: '"'
# The key field for this migration. List many column names as needed to create a unique key for your migration.
# These keys are also used whan a migration_lookup process is needed with this migration.
keys:
- title
# Define some constants for use in the process pipeline.
constants:
video_embed_prefix: '<iframe width="560" height="315" src="'
video_embed_suffix: ' frameborder="0" allowfullscreen></iframe>'
# Gives each column a field name for use in the process pipeline and a label.
# This is a complete list of columns in the example spreadsheet. Each
# migration only needs to define the columns that it will use.
column_names:
0:
title: Title
1:
sku: SKU
2:
status: Status
3:
product_type: 'Product type'
4:
description: Description
5:
product_variation_type: 'Product variation type'
6:
sell_price: 'Sell price'
7:
vocabulary_name1: 'Vocabulary1'
8:
term1: 'Vocabulary value1'
9:
vocabulary_name2: 'Vocabulary2'
10:
term2: 'Vocabulary value2'
11:
vocabulary_name3: 'Vocabulary3'
12:
term3: 'Vocabulary value3'
13:
attribute_name1: 'Attribute name1'
14:
attribute_value1: 'Attribute value1'
15:
attribute_name2: 'Attribute name2'
16:
attribute_value2: 'Attribute value2'
17:
attribute_name3: 'Attribute name3'
18:
attribute_value3: 'Attribute value3'
19:
attribute_name4: 'Attribute name4'
20:
attribute_value4: 'Attribute value4'
21:
related1: 'SKU of Related item 1'
22:
related2: 'SKU of Related item 2'
23:
related3: 'SKU of Related item 3'
24:
image1: 'Image 1'
25:
image2: 'Image 2'
26:
image3: 'Image 3'
27:
video1: 'Video 1'
28:
thumbnail1: 'Thumbnail 1'
29:
video2: 'Video 2'
30:
thumbnail2: 'Thumbnail 2'
31:
video3: 'Video 3'
32:
thumbnail3: 'Thumbnail 3'
33:
tab_title1: 'Tab title 1'
34:
tab_content1: 'Tab content 1'
35:
tab_cta1: 'Associated tab CTA 1'
36:
tab_title2: 'Tab title 2'
37:
tab_content2: 'Tab content 2'
38:
tab_cta2: 'Associated tab CTA 2'
39:
cta_title1: 'CTA title 1'
40:
cta_link1: 'CTA link 1'
41:
cta_image1: 'CTA product image 1'
42:
cta_title2: 'CTA title 2'
43:
cta_link2: 'CTA link 2'
44:
cta_image2: 'CTA product image 2'
process:
# Product type set to 'default'.
type:
plugin: default_value
default_value: default
# UID set to 1.
uid:
plugin: default_value
default_value: 1
# Use the title provided in the CSV as the title.
title: title
# Use the description provided in the CSV as the value for the body field.
body/value: description
# Use status provided in the CSV as the status for this product.
status: status
# Use store 1 as the default store.
stores/target_id:
plugin: default_value
default_value: 1
# Taxonomy vocabulary 'Category'.
# Entity reference field, multi-valued.
field_category:
-
plugin: skip_on_empty
source: term1
method: process
-
plugin: migration_lookup
migration: import_taxonomy_term
source:
- vocabulary_name1
- term1
# Taxonomy vocabulary 'Season'.
# Entity reference field, multi-valued.
field_season:
-
plugin: skip_on_empty
source: term2
method: process
-
plugin: migration_lookup
migration: import_taxonomy_term
source:
- vocabulary_name2
- term2
# Use a custom process plugin to get all the variations for this product.
variations:
plugin: migration_lookup
migration: import_product_variation
source: variation_sku
# A list of suggested products is created in two steps. First, get the three possible related items from the source
# and use a custom process plugin to build an array of related producs, excluding any empty values.
suggested_product:
plugin: suggested_products
source:
- related1
- related2
- related3
# Second, use the array created above to populate the suggested products field. The sub_process plugin will execute
# the migration_lookup for each value in the array.
# Entity reference field, unlimited values.
field_suggested_products:
plugin: sub_process
source: '@suggested_product'
process:
target_id:
plugin: migration_lookup
migration: import_product
source: '0'
# The video field is a single valued entity reference revision field. It requires a target_id and revision_id. These
# are obtained by using the migration_lookup process plugin with the input being the title of the video to migrate.
# The output from migration_lookup will be the destination id for that migration, in this case, the target_id and the
# target_revision_id. These can be extracted from the array and put in the correct field value. And, of course, skip
# the processing of the video if the video was not migrated.
field_product_video/target_id:
-
plugin: migration_lookup
migration: import_paragraph_product_video
no_stub: true
source:
- title
-
plugin: skip_on_empty
method: process
-
plugin: extract
index:
- '0'
# See comment above for 'field_product_video/target_id:'
field_product_video/target_revision_id:
-
plugin: migration_lookup
migration: import_paragraph_product_video
no_stub: true
source:
- title
-
plugin: skip_on_empty
method: process
-
plugin: extract
index:
- '1'
combination_tab:
plugin: get
source:
- tab_title1
- tab_title2
# Paragraph field.
field_tab:
-
plugin: migration_lookup
migration: import_paragraph_tab
no_stub: true
source: '@combination_tab'
-
plugin: skip_on_empty
method: process
-
plugin: sub_process
process:
target_id: '0'
target_revision_id: '1'
combination_cta:
plugin: get
source:
- cta_title1
- cta_title2
# Paragraph field.
# Entity reference revisions, Single value
field_desc_cta:
-
plugin: migration_lookup
migration: import_paragraph_cta
no_stub: true
source: '@combination_cta'
-
plugin: skip_on_empty
method: process
-
plugin: sub_process
process:
target_id: '0'
target_revision_id: '1'
destination:
plugin: 'entity:commerce_product'
migration_dependencies:
required:
- import_taxonomy_term
- import_paragraph_tab
- import_video
- import_product_variation
