{% import '_includes/forms' as forms %}
{% import 'feed-me/_macros' as feedMeMacro %}
{% if feed.elementGroup %}
{% set productTypeId = feed.elementGroup[feed.elementType] %}
{% set productType = craft.commerce.productTypes.getProductTypeById(productTypeId) %}
{% endif %}
{% set taxCategories = [] %}
{% for item in productType.taxCategories %}
{% set taxCategories = taxCategories|merge([{ value: item.id, label: item.name }]) %}
{% endfor %}
{% set shippingCategories = [] %}
{% for item in productType.shippingCategories %}
{% set shippingCategories = shippingCategories|merge([{ value: item.id, label: item.name }]) %}
{% endfor %}
{% set fields = [{
name: 'Title',
handle: 'title',
required: true,
default: {
type: 'text',
},
}, {
name: 'Slug',
handle: 'slug',
instructions: 'If not set, the Slug will be automatically created from Title.'|t('feed-me'),
default: {
type: 'text',
},
}, {
type: 'date',
name: 'Post Date',
handle: 'postDate',
instructions: 'Accepts Unix timestamp, or just about any English textual datetime description.'|t('feed-me'),
default: {
type: 'dateTime',
},
}, {
type: 'date',
name: 'Expiry Date',
handle: 'expiryDate',
instructions: 'Accepts Unix timestamp, or just about any English textual datetime description.'|t('feed-me'),
default: {
type: 'dateTime',
}
}, {
name: 'Status',
handle: 'enabled',
instructions: 'Choose either a default status from the list or the imported field that will contain the status.'|t('feed-me'),
default: {
type: 'select',
options: [
{ label: 'Don’t import'|t('feed-me'), value: '' },
{ label: 'Enabled', value: '1' },
{ label: 'Disabled', value: '0' },
],
},
}, {
name: 'Tax Category',
handle: 'taxCategoryId',
required: true,
default: {
type: 'select',
options: taxCategories,
},
}, {
name: 'Shipping Category',
handle: 'shippingCategoryId',
required: true,
default: {
type: 'select',
options: shippingCategories,
},
}, {
name: 'Available for Purchase',
handle: 'availableForPurchase',
default: {
type: 'checkbox',
},
}, {
name: 'Free Shipping',
handle: 'freeShipping',
default: {
type: 'checkbox',
},
}, {
name: 'Promotable',
handle: 'promotable',
default: {
type: 'checkbox',
},
}, {
name: 'Product ID',
handle: 'id',
instructions: 'Warning: This should only be used for an existing Craft Commerce Product ID.'|t('feed-me'),
default: {
type: 'text',
},
}] %}
{% set fieldsVariants = [{
name: 'Enabled',
handle: 'variant-enabled',
default: {
type: 'select',
options: [
{ label: 'Don’t import'|t('feed-me'), value: '' },
{ label: 'Enabled', value: '1' },
{ label: 'Disabled', value: '0' },
],
},
}, {
name: 'Title',
handle: 'variant-title',
required: true,
default: {
type: 'text',
},
}, {
name: 'SKU',
handle: 'variant-sku',
required: true,
default: {
type: 'text',
},
}, {
name: 'Price',
handle: 'variant-price',
required: true,
default: {
type: 'text',
},
}, {
name: 'Stock',
handle: 'variant-stock',
required: true,
default: {
type: 'text',
},
}, {
name: 'Unlimited Stock',
handle: 'variant-hasUnlimitedStock',
default: {
type: 'checkbox',
},
}, {
name: 'Is Default',
handle: 'variant-isDefault',
default: {
type: 'checkbox',
},
}, {
name: 'Minimum allowed quantity',
handle: 'variant-minQty',
default: {
type: 'text',
},
}, {
name: 'Maximum allowed quantity',
handle: 'variant-maxQty',
default: {
type: 'text',
},
}, {
name: 'Dimensions - Length',
handle: 'variant-length',
default: {
type: 'text',
},
}, {
name: 'Dimensions - Width',
handle: 'variant-width',
default: {
type: 'text',
},
}, {
name: 'Dimensions - Height',
handle: 'variant-height',
default: {
type: 'text',
},
}, {
name: 'Weight',
handle: 'variant-weight',
default: {
type: 'text',
},
}] %}
{{ 'Product Fields'|t('feed-me') }}
{{ 'Field'|t('feed-me') }}
{{ 'Feed Element'|t('feed-me') }}
{{ 'Default Value'|t('feed-me') }}
{% for field in fields %}
{% set template = field.type ?? 'default' %}
{% set variables = field|merge({ feed: feed, feedData: feedData, attribute: true }) %}
{% include 'feed-me/_includes/fields/' ~ template ignore missing with variables only %}
{% endfor %}
{{ 'Product Variant Fields'|t('feed-me') }}
{{ 'Field'|t('feed-me') }}
{{ 'Feed Element'|t('feed-me') }}
{{ 'Default Value'|t('feed-me') }}
{% for field in fieldsVariants %}
{% set template = field.type ?? 'default' %}
{% set variables = field|merge({ feed: feed, feedData: feedData, attribute: true }) %}
{% include 'feed-me/_includes/fields/' ~ template ignore missing with variables only %}
{% endfor %}
{% set productTabs = [] %}
{% if productType.fieldLayoutId %}
{% set productTabs = craft.app.fields.getLayoutById(productType.fieldLayoutId).getTabs() %}
{% for tab in productTabs %}
{{ tab.name }} Fields
{{ 'Field'|t('feed-me') }}
{{ 'Feed Element'|t('feed-me') }}
{{ 'Default Value'|t('feed-me') }}
{% for layoutField in tab.getElements()|filter(e => e is instance of('craft\\fieldlayoutelements\\CustomField')) %}
{% set field = layoutField.getField() %}
{% set fieldClass = craft.feedme.fields.getRegisteredField(className(field)) %}
{% set template = fieldClass.getMappingTemplate() %}
{% set variables = { name: field.name, handle: field.handle, feed: feed, feedData: feedData, field: field, fieldClass: fieldClass } %}
{% include template ignore missing with variables only %}
{% endfor %}
{% endfor %}
{% endif %}
{% set variantTabs = [] %}
{% if productType.variantFieldLayoutId %}
{% set variantTabs = craft.app.fields.getLayoutById(productType.variantFieldLayoutId).getTabs() %}
{% for tab in variantTabs %}
{{ "Variant Fields"|t('feed-me') }}
{{ 'Field'|t('feed-me') }}
{{ 'Feed Element'|t('feed-me') }}
{{ 'Default Value'|t('feed-me') }}
{% for layoutField in tab.getElements()|filter(e => e is instance of('craft\\fieldlayoutelements\\CustomField')) %}
{% set field = layoutField.getField() %}
{% set fieldClass = craft.feedme.fields.getRegisteredField(className(field)) %}
{% set template = fieldClass.getMappingTemplate() %}
{% set handle = 'variant-' ~ field.handle %}
{% set variables = { name: field.name, handle: handle, feed: feed, feedData: feedData, field: field, fieldClass: fieldClass } %}
{% include template ignore missing with variables only %}
{% endfor %}
{% endfor %}
{% endif %}
{{ "Set a unique identifier to match against existing elements"|t('feed-me') }}
{{ "Select the fields you want to use to check for existing elements. When selected, Feed Me will look for existing elements that match the fields provided below and either update, or skip depending on your choice of Import Strategy."|t('feed-me') }}
{% set uniqueFields = fields %}
{% for field in fieldsVariants %}
{# Only the Variant SKU is supported as an element criteria attribute for a Variant element #}
{% if field.handle == 'variant-sku' %}
{% set uniqueFields = uniqueFields|merge([{ name: 'Variant ' ~ field.name, handle: field.handle }]) %}
{% endif %}
{% endfor %}
{% for tab in productTabs %}
{% for layoutField in tab.getElements()|filter(e => e is instance of('craft\\fieldlayoutelements\\CustomField')) %}
{% set field = layoutField.getField() %}
{% set uniqueFields = uniqueFields|merge([{ name: field.name, handle: field.handle, type: className(field) }]) %}
{% endfor %}
{% endfor %}
{% for tab in variantTabs %}
{% for layoutField in tab.getElements()|filter(e => e is instance of('craft\\fieldlayoutelements\\CustomField')) %}
{% set field = layoutField.getField() %}
{% set uniqueFields = uniqueFields|merge([{ name: field.name, handle: 'variant-' ~ field.handle, type: className(field) }]) %}
{% endfor %}
{% endfor %}