Imagine Conference, Feb. 2011 | Author: Vinai Kopp <[email protected]>
Using the new Import Module
It's me!
Vinai Kopp
Magento Development since March 08 Magento Developer Training
Introducing the Players
The Controller
Mage_ImportExport_Adminhtml_ImportController Purpose: Entry Point
The Import Model
Mage_ImportExport_Model_Import
The Entity Type Model
Mage_ImportExport_Model_Import_Entity_Product Mage_ImportExport_Model_Import_Entity_Customer
The Source Adapter
Mage_ImportExport_Model_Import_Adapter_Csv
Purpose: Parse and access input data into arrays as expected by the entity type model
Import Data Resource Model
Mage_ImportExport_Model_Mysql4_Import_Data Purpose: Interface to the import data table
Product Type Import Models
Mage_ImportExport_Model_Import_Entity_Product_Type_* Purpose: Build and execute product type specific SQL
The Import Process
POINT OF ENTRY Magento CronJob CLI Adminhtml Interface IMPORT MODEL: validateSource() SOURCE ADAPTERENTITY TYPE ADAPTER
Document
DATA ARRAY
The Import Process
POINT OF ENTRY Magento CronJob CLI Adminhtml InterfaceENTITY TYPE ADAPTER
Temporary Table IMPORT MODEL: importSource() SQL PRODUCT TYPE IMPORT MODEL CATALOG TABLE
How can I use that?
How can I use that?
Example: Cronjob catalog updates via custom CSV files Custom CSV Fields:
Why a custom CSV file format?
sku _store _attribute_set _type _category _product_websites color cost created_at custom_design custom_design_from custom_design_to custom_layout_update description enable_googlecheckout gallery gift_message_available has_options image image_label is_imported manufacturer media_gallery meta_description meta_keyword meta_title minimal_price name news_from_dat news_to_date options_container page_layout price required_options short_description small_image small_image_label special_from_date special_price special_to_date status tax_class_id thumbnail thumbnail_label updated_at url_key url_path visibility weight qty min_qty use_config_min_qty is_qty_decimal backorders use_config_backorders min_sale_qty use_config_min_sale_qty max_sale_qty use_config_max_sale_qty is_in_stock notify_stock_qty use_config_notify_stock_qty manage_stock use_config_manage_stock use_config_qty_increments qty_increments use_config_enable_qty_increments enable_qty_increments _links_related_sku _links_related_position _links_crosssell_sku _links_crosssell_position _links_upsell_sku _links_upsell_position _associated_sku _associated_default_qty _associated_position _tier_price_website _tier_price_customer_group _tier_price_qty _tier_price_price _super_products_sku _super_attribute_code _super_attribute_option _super_attribute_price_corrCronjob Catalog Updates
Step One: Build Source Adapter for custom CSV file Step Two: Create Cron Observer
Specify a Custom Source Adapter
The Source Adapter Class is specified by the File Extension Mage_ImportExport_Model_Import_Adapter_ . $type;
sourcefile.csv.custom to use Source Adapter
The Source Adapter Interface
Extend Mage_ImportExport_Model_Import_Adapter_Abstract Implements SeekableIterator Interface
The Source Adapter Interface
protected function _init()
Read source and build the same data structure like the core csv adapter
The source array format can best be referenced by exporting some products and looking at the first line in the resulting export file
The Source Array Format
sku _store _attribute_set _type _category _product_websites color cost created_at custom_design custom_design_from custom_design_to custom_layout_update description enable_googlecheckout gallery gift_message_available has_options image image_label is_imported manufacturer media_gallery meta_description meta_keyword meta_title minimal_price name news_from_dat news_to_date options_container page_layout price required_options short_description small_image small_image_label special_from_date special_price special_to_date status tax_class_id thumbnail thumbnail_label updated_at url_key url_path visibility weight qty min_qty use_config_min_qty is_qty_decimal backorders use_config_backorders min_sale_qty use_config_min_sale_qty max_sale_qty use_config_max_sale_qty is_in_stock notify_stock_qty use_config_notify_stock_qty manage_stock use_config_manage_stock use_config_qty_increments qty_increments use_config_enable_qty_increments enable_qty_increments _links_related_sku _links_related_position _links_crosssell_sku _links_crosssell_position _links_upsell_sku _links_upsell_position _associated_sku _associated_default_qty _associated_position _tier_price_website _tier_price_customer_group _tier_price_qty _tier_price_price _super_products_sku _super_attribute_code _super_attribute_option _super_attribute_price_corrProduct Import Source Array
Configurable Products ... 0,1,0.0000,1,1,,1,0,1,1,0.0000,1,0,,,,,,,,,,,,,,sku-Pear-Cyan,manufacturer,Pear,100.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Indigo,color,Cyan,5.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Mauve,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Pink,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Peach-Cyan,,, _super_products_sku _super_attribute_code _super_attribute_option _super_attribute_price_corrProduct Import Source Array
... 0,1,0.0000,1,1,,1,0,1,1,0.0000,1,0,,,,,,,,,,,,,,sku-Pear-Cyan,manufacturer,Pear,100.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Indigo,color,Cyan,5.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Mauve,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Pink,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Peach-Cyan,,, _super_products_sku One row for every associated simple product inaddition to record for the simple product itself Configurable Products
Product Import Source Array
... 0,1,0.0000,1,1,,1,0,1,1,0.0000,1,0,,,,,,,,,,,,,,sku-Pear-Cyan,manufacturer,Pear,100.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Indigo,color,Cyan,5.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Mauve,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Pink,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Peach-Cyan,,, _super_attribute_code One row for every associated simple product attributeProduct Import Source Array
... 0,1,0.0000,1,1,,1,0,1,1,0.0000,1,0,,,,,,,,,,,,,,sku-Pear-Cyan,manufacturer,Pear,100.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Indigo,color,Cyan,5.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Mauve,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Pink,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Peach-Cyan,,, _super_attribute_optionOne row for every attribute with a price update _super_products_price_corr
Product Import Source Array
... 0,1,0.0000,1,1,,1,0,1,1,0.0000,1,0,,,,,,,,,,,,,,sku-Pear-Cyan,manufacturer,Pear,100.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Indigo,color,Cyan,5.0000 ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Mauve,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Pear-Pink,,, ... ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sku-Peach-Cyan,,,_super_products_sku and _super_attribute_option do not (have to) correspond
Product Import Source Array
Custom Options _custom_option_store _custom_option_type _custom_option_title _custom_option_is_required _custom_option_price _custom_option_sku _custom_option_max_characters _custom_option_sort_order _custom_option_row_title _custom_option_row_price _custom_option_row_sku _custom_option_row_sortImplementation of the Source
Adapter
Implement SeekableIterator Interface
seek(), current(), next(), rewind(), key(), valid()
All except next(), rewind() and seek() are implemented in the abstract class Mage_ImportExport_Model_Import_Adapter_Abstract
Trigger Import
Cron Observer which wrapps the Import Model calls to validateSource(), importSource() and invalidateIndex()
Trigger Import
Cron Observer which wrapps the Import Model calls to validateSource(), importSource() and invalidateIndex()
Other possibilities
Anything that gets product data into Magento in bulk operations, e.g. XML Files
REST Request with product data in payload Unix domain sockets
Conclusion
Mage_ImportExport fills an important gap!
Usable with technical knowledge because of the complex array format
Links
Sample Code: http://bit.ly/haCGWI PDF of the Slides: http://bit.ly/i0eiI7
/me is happy to hear from you
[email protected] :: @VinaiKopp
Thank you @riconeitzel for all the time and for making this look good! Thanks to Magento!