Wszystko, co musisz wiedzieć o imporcie – eksporcie produktów w pakiecie
Opublikowany: 2015-01-26Cześć ! Czytelnicy bloga Magesolution ! Czy posiadasz wystarczającą wiedzę na temat importu – eksportu produktów w pakiecie? Sprawdź ten artykuł, aby całkowicie zrozumieć importowanie – eksportowanie produktów w pakiecie w Magento.
Najnowsza aktualizacja: Właśnie wydaliśmy wersję 2.0 uniwersalnego motywu Claue Magento 2, z kilkoma ulepszeniami wydajności i wyjątkowymi funkcjami. Sprawdź teraz ten motyw: Claue Magento Theme 2. 0
Demo na żywo
Claue – czysty, minimalistyczny motyw Magento 2&1 to doskonały szablon dla nowoczesnego i przejrzystego sklepu eCommerce z ponad 40 układami strony głównej i mnóstwem opcji dla sklepu, bloga, portfolio, układów lokalizatora sklepów i innych przydatnych stron. Claue w wersji 2.0 zawiera szereg ekskluzywnych funkcji, w tym:
- Opierając się na motywie Luma.
- Poznaj wszystkie standardy Magento Theme
- Znacząca poprawa wydajności
- Kompatybilny z większością rozszerzeń innych firm.
- W pełni kompatybilny z Magento 2.4.x
Ta druga zaawansowana wersja całkowicie różni się od poprzedniej. Tak więc, jeśli używasz Claue w wersji 1 i chcesz zaktualizować Claue w wersji 2, możesz tylko odbudować nową stronę internetową, a nie aktualizować ze starej wersji. Wróćmy teraz do głównego tematu.
W tym artykule poruszymy dwie kwestie:
- Eksportuj produkt pakietu do pliku CSV w dostępnych formatach.
- Importuj plik CSV zawierający informacje o produkcie do bazy danych Magento
Stwórz pakiet produktów Moduł o następujących strukturach:
app\code\local\MGS\Productbundle\controllers\Adminhtml\ProductbundleController.php
app\code\local\MGS\Productbundle\etc\config.xml
app\code\local\MGS\Productbundle\Helper\Data.php
app\etc\modules\ MGS_Productbundle.xml
app\design\adminhtml\default\default\układ\ productbundle.xml
app\design\adminhtml\default\default\template\productbundle\ productbundlebackend.phtml
Utwórz plik MGS_Productbundle.xml , aby aktywować moduł
MGS _Pakiet produktu.xml
<?xml version="1.0"?> <config> <modules> <MGS_Productbundle> <active>true</active> <codePool>local</codePool> </MGS_Productbundle> </modules> </config>
Utwórz menu dla importu i eksportu w config.xml
config.xml
<?xml version="1.0"?> <config> <modules> <MGS_Productbundle> <version>0.1.0</version> </MGS_Productbundle> </modules> <admin> <routers> <productbundle> <use>admin</use> <args> <module>MGS_Productbundle</module> <frontName>productbundle</frontName> </args> </productbundle> </routers> </admin> <adminhtml> <menu> <productbundle module="productbundle"> <title>Product Bundle</title> <sort_order>71</sort_order> <children> <export module="productbundle"> <title>Export to CSV</title> <sort_order>0</sort_order> <action>productbundle/adminhtml_productbundle/export</action> </export> <import module="productbundle"> <title>Import from CSV</title> <sort_order>1</sort_order> <action>productbundle/adminhtml_productbundle/index</action> </import> </children> </productbundle> </menu> <acl> <resources> <all> <title>Allow Everything</title> </all> <admin> <children> <MGS_Productbundle> <title>Productbundle Module</title> <sort_order>10</sort_order> </MGS_Productbundle> </children> </admin> </resources> </acl> <layout> <updates> <productbundle> <file>productbundle.xml</file> </productbundle> </updates> </layout> </adminhtml> <global> <helpers> <productbundle> <class>MGS_Productbundle_Helper</class> </productbundle> </helpers> </global> </config>
Utwórz formularz, aby zaimportować pakiet produktu z pliku CSV
productbundle.xml
<?xml version="1.0"?> <layout version="0.1.0"> <productbundle_adminhtml_productbundle_index> <reference name="content"> <block type="core/template" name="productbundle" template = "productbundle/productbundlebackend.phtml" /> </reference> </productbundle_adminhtml_productbundle_index> </layout>
productbundlebackend.phtml
<script type="text/javascript"> function importAction() { var file = $('fileimport').value; if (file == '') { alert('Please choose file import.'); return false; } $('import_form').submit(); } </script> <div class="imporproductbackend"> <div class="entry-edit"> <form id="import_form" name="edit_form" method="post" action="<?php echo $this->getUrl('*/*/import')?>" enctype="multipart/form-data" > <div class="content-header"> <table cellspacing="0" class="grid-header"> <tr> <td><h3><?php echo $this->__('Import Bundle Products')?></h3></td> <td class="a-right"> <button onclick="importAction()" class="scalable save" type="button"><span><?php echo $this->__('Import') ?></span></button> </td> </tr> </table> </div> <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /> <h4 class="icon-head head-edit-form fieldset-legend"><?php echo $this->__('Import bundle product form csv')?></h4> <fieldset id="my-fieldset"> <table cellspacing="0" class="form-list"> <tr> <td class="label"><?php echo $this->__('Import file')?> </td> <td class="input-ele"> <input type="file" name="fileimport" id="fileimport" class="" title="Select File to Import"/> </td> </tr> </table> </fieldset> </form> </div> </div>
Eksportuj produkty pakietu:
Aby wyeksportować produkty z pakietu do pliku CSV, musisz wyodrębnić wszystkie produkty z pakietu, uruchamiając ten wiersz kodu:
$products = Mage::getResourceModel('catalog/product_collection')->addAttributeToFilter('type_id', array('eq' => 'bundle'));
Po rozpoznaniu i wyodrębnieniu tych produktów w pakiecie możesz przenieść je, aby wyeksportować je do pliku CSV.
Najpierw utworzysz plik CSV w dostępnym formacie, uruchamiając następujący kod:
$csv_export = ''; if($csv_export == ''){ $file = 'bundle'; $data_title = array('sku', 'website_ids', 'attribute_set_id', 'type_id', 'name', 'description', 'short_description', 'category_ids', 'has_options', 'sku_type', 'weight_type', 'shipment_type', 'status', 'price_type', 'price_view', 'special_price', 'is_in_stock', 'qty', 'bundle_options_selections'); Mage::helper('productbundle')->createCsvfile($file,$data_title); $CSVFileName = Mage::getSingleton('core/session')->getCsvexport(); }
Funkcja createCsvfile($file,$data_title) jest stworzona w celu wygenerowania nowego pliku CSV i rekordów tytułów dla kolumn, uruchom ten kod:
// Create new file csv public function createCsvfile($file,$data_title) { if(!is_dir(Mage::getBaseDir() . DS . "var" . DS . "exportcsv")){ mkdir(Mage::getBaseDir() . DS . "var" . DS . "exportcsv", 0777, true); } $csv_folder = Mage::getBaseDir() . DS . "var" . DS . "exportcsv"; $filename = str_replace('.csv','',$file).'_'.date("YmdHis"); $CSVFileName = $csv_folder. DS .$filename.'.csv'; $FileHandle = fopen($CSVFileName, 'w') or die("can't open file"); fclose($FileHandle); $fp = fopen($CSVFileName, 'a'); fputcsv($fp, $data_title); Mage::getSingleton('core/session')-&gt;setCsvexport($CSVFileName); }
Oprócz podstawowych informacji o produkcie w pakiecie, takich jak sku, nazwa, opis… musisz dodać informacje o opcjach i wyborach każdej opcji.
Uruchom ten kod, aby wyodrębnić informacje o opcjach:
$optionCollection = $bundled_product->getTypeInstance()->getOptionsCollection(); $selectionCollection = $bundled_product->getTypeInstance()->getSelectionsCollection($bundled_product->getTypeInstance()->getOptionsIds()); $options = $optionCollection->appendSelections($selectionCollection);
Uzyskaj wybór opcji za pomocą tego kodu:
foreach( $options as $option ){ $_selections = $option->getSelections(); }
Następnie połączysz wszystkie informacje o opcjach i wyborach każdej opcji w ciąg i zapiszesz ten ciąg w kolumnie pliku CSV. Uruchom następujący kod:
$csv_export = ''; if($csv_export == ''){ $file = 'bundle'; $data_title = array('sku', 'website_ids', 'attribute_set_id', 'type_id', 'name', 'description', 'short_description', 'category_ids', 'has_options', 'sku_type', 'weight_type', 'shipment_type', 'status', 'price_type', 'price_view', 'special_price', 'is_in_stock', 'qty', 'bundle_options_selections'); Mage::helper('productbundle')->createCsvfile($file,$data_title); $CSVFileName = Mage::getSingleton('core/session')->getCsvexport(); } foreach($products as $product){ $bundled_product = new Mage_Catalog_Model_Product(); $bundled_product->load($product->getId()); $b_website_ids = implode(',',$bundled_product->getWebsiteIds()); $b_attribute_set_id = $bundled_product->getData('attribute_set_id'); $b_type_id = $bundled_product->getData('type_id'); $b_sku = $bundled_product->getData('sku'); $b_name = $bundled_product->getData('name'); $b_description = $bundled_product->getData('description'); $b_short_description = $bundled_product->getData('short_description'); $b_category_ids = implode(',',$bundled_product->getCategoryIds()); $b_has_options = $bundled_product->getData('has_options'); $b_sku_type = $bundled_product->getData('sku_type'); $b_weight_type = $bundled_product->getData('weight_type'); $b_shipment_type = $bundled_product->getData('shipment_type'); $b_status = $bundled_product->getData('status'); $b_price_type = $bundled_product->getData('price_type'); $b_price_view = $bundled_product->getData('price_view'); $b_special_price = $bundled_product->getData('special_price'); $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($bundled_product); $b_is_in_stock = $stock->getIsInStock(); $b_qty = $stock->getQty(); $optionCollection = $bundled_product->getTypeInstance()->getOptionsCollection(); $selectionCollection = $bundled_product->getTypeInstance()->getSelectionsCollection($bundled_product->getTypeInstance()->getOptionsIds()); $options = $optionCollection->appendSelections($selectionCollection); // get all options $options_arr = array(); if(count($options)){ foreach( $options as $option ) { $o_required = $option->getData('required'); $o_position = $option->getData('position'); $o_type = $option->getData('type'); $o_title = $option->getData('default_title'); $_selections = $option->getSelections(); // get all items of each option $selections_arr = array(); if(count($_selections)){ foreach( $_selections as $selection ) { // data of product selection $selection_price_value = $selection->getData('selection_price_value'); $selection_price_type = $selection->getData('selection_price_type'); $selection_qty = $selection->getData('selection_qty'); $selection_can_change_qty = $selection->getData('selection_can_change_qty'); $position = $selection->getData('position'); $is_default = $selection->getData('is_default'); // data of product to import new product $selection = Mage::getModel('catalog/product')->loadByAttribute('sku', $selection->getData('sku')); $website_ids = implode(',',$selection->getWebsiteIds()); $attribute_set_id = $selection->getData('attribute_set_id'); $type_id = $selection->getData('type_id'); $sku = $selection->getData('sku'); $name = $selection->getData('name'); $description = $selection->getData('description'); $short_description = $selection->getData('short_description'); $category_ids = implode(',',$selection->getCategoryIds()); $has_options = $selection->getData('has_options'); $msrp_enabled = $selection->getData('msrp_enabled'); $msrp_display_actual_price_type = $selection->getData('msrp_display_actual_price_type'); $price = $selection->getData('price'); $special_price = $selection->getData('special_price'); $msrp = $selection->getData('msrp'); $status = $selection->getData('status'); $tax_class_id = $selection->getData('tax_class_id'); $weight = $selection->getData('weight'); // $stock_item = $selection->getData('stock_item'); $stock_item = ''; $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($selection); $is_in_stock = $stock->getIsInStock(); $qty = $stock->getQty(); $selections_arr[] = implode('#sa#', array($website_ids, $attribute_set_id, $type_id, $sku, $name, $description, $short_description, $category_ids, $has_options, $msrp_enabled, $msrp_display_actual_price_type, $price, $special_price, $msrp, $status, $tax_class_id, $weight, $stock_item, $is_in_stock, $qty, $selection_price_value, $selection_price_type, $selection_qty, $selection_can_change_qty, $position, $is_default)); } } $options_arr[] = implode('#oa#',array($o_required, $o_position, $o_type, $o_title, implode('#s#',$selections_arr))); } } $bundle_options_selections = implode('#o#', $options_arr); $data = array($b_sku, $b_website_ids, $b_attribute_set_id, $b_type_id, $b_name, $b_description, $b_short_description, $b_category_ids, $b_has_options, $b_sku_type, $b_weight_type, $b_shipment_type, $b_status, $b_price_type, $b_price_view, $b_special_price, $b_is_in_stock, $b_qty, $bundle_options_selections); $fp = fopen($CSVFileName, 'a'); fputcsv($fp, $data); }
Kompletny plik CSV jest tworzony w następujący sposób:
Importuj produkt z pakietu
Aby zaimportować produkty w pakietach, sprawdzisz każdy wiersz pliku CSV, aby sprawdzić, czy jeden produkt istnieje, czy nie, według sku. W przypadku nieistniejących produktów będziesz musiał je zaimportować.
Jeśli produkty będące wyborami opcji nie istnieją, należy zaimportować te z dostępnymi informacjami z pliku CSV, aby uzyskać identyfikator wyboru produktów w pakiecie. Identyfikator produktów Selection możesz uzyskać zgodnie z tą zasadą:
public function getSelectionId($selection_data){ $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $selection_data[3]); if($product){ $product_id = $product->getData('entity_id'); } else{ //create new product width data of selection product $newProductData = array( // websites - Array of website ids to which you want to assign a new product 'website_ids' => explode(',',$selection_data[0]), 'sku' => $selection_data[3], 'name' => $selection_data[4], 'description' => $selection_data[5], 'short_description' => $selection_data[6], 'status' => $selection_data[14], 'weight' => $selection_data[16], 'tax_class_id' => $selection_data[15], 'price' => $selection_data[11], 'special_price' => $selection_data[12], 'created_at' => strtotime('now'), ); Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); $product = Mage::getModel('catalog/product'); $product->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID) ->setAttributeSetId($selection_data[1]) ->setTypeId($selection_data[2]) ->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID)) ->setCategoryIds(explode(',', $selection_data[7])); try{ $product->addData($newProductData); $product->getResource()->save($product); $product->setMediaGallery(array('images' => array(), 'values' => array())); $product->save(); $stockItem = Mage::getModel('cataloginventory/stock_item'); $stockItem->loadByProduct($product->getId()); $stockItem->assignProduct($product); $stockItem->setData('product_id',$product->getId()); $stockItem->setData('is_in_stock', $selection_data[19]); $stockItem->setData('qty',$selection_data[20]); $stockItem->setData('manage_stock', 1); $stockItem->setData('stock_id', 1); $stockItem->setData('use_config_manage_stock', 0); $stockItem->save(); $product_id = $product->getId(); } catch (Exception $e) { Mage::log($e->getMessage()); die("error: ".$e->getMessage()); } } return $product_id; }
Po wypełnieniu wszystkich informacji o produktach w pakietach wraz z ich opcjami i wyborami, utworzysz produkty w pakietach zgodnie z poniższym kodem:
$new_product++; try{ Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); $bundleProduct = Mage::getModel('catalog/product'); $bundleProduct ->setStoreId(Mage_Core_Model_App::ADMIN_STORE_ID) //you can set data in store scope ->setWebsiteIds(explode(',',$b_website_ids)) //website ID the product is assigned to, as an array ->setAttributeSetId($b_attribute_set_id) //ID of a attribute set named 'default' ->setTypeId('bundle') //product type ->setCreatedAt(strtotime('now')) //product creation time // ->setUpdatedAt(strtotime('now')) //product update time ->setSkuType($b_sku_type) //SKU type (0 - dynamic, 1 - fixed) ->setSku($b_sku) //SKU ->setName($b_name) //product name ->setWeightType($b_weight_type) //weight type (0 - dynamic, 1 - fixed) // ->setWeight(4.0000) ->setShipmentType($b_shipment_type) //shipment type (0 - together, 1 - separately) ->setStatus($b_status) //product status (1 - enabled, 2 - disabled) ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //catalog and search visibility ->setManufacturer(28) //manufacturer id ->setColor(24) // ->setNewsFromDate('06/26/2014') //product set as new from // ->setNewsToDate('06/30/2014') //product set as new to // ->setCountryOfManufacture('AF') //country of manufacture (2-letter country code) ->setPriceType($b_price_type) //price type (0 - dynamic, 1 - fixed) ->setPriceView($b_price_view) //price view (0 - price range, 1 - as low as) ->setSpecialPrice($b_special_price) //special price in form 11.22 // ->setSpecialFromDate('06/1/2014') //special price from (MM-DD-YYYY) // ->setSpecialToDate('06/30/2014') //special price to (MM-DD-YYYY) /*only available if price type is 'fixed'*/ // ->setPrice(11.22) //price, works only if price type is fixed // ->setCost(22.33) //price in form 11.22 // ->setMsrpEnabled(1) //enable MAP // ->setMsrpDisplayActualPriceType(1) //display actual price (1 - on gesture, 2 - in cart, 3 - before order confirmation, 4 - use config) // ->setMsrp(99.99) //Manufacturer's Suggested Retail Price // ->setTaxClassId(4) //tax class (0 - none, 1 - default, 2 - taxable, 4 - shipping) /*only available if price type is 'fixed'*/ // ->setMetaTitle('test meta title 2') // ->setMetaKeyword('test meta keyword 2') // ->setMetaDescription('test meta description 2') ->setDescription($b_description) ->setShortDescription($b_short_description) ->setMediaGallery(array('images' => array(), 'values' => array())) //media gallery initialization ->setStockData(array( 'use_config_manage_stock' => 1, //'Use config settings' checkbox 'manage_stock' => 1, //manage stock 'is_in_stock' => $b_is_in_stock, //Stock Availability ) ) ->setCategoryIds(explode(',',$b_category_ids)); //assign product to categories if($b_has_options == 1){ $i = 0; $i2 = 0; $bundleOptions = array(); $bundleSelections = array(); $bundle_options = explode('#o#',$bundle_options_selections); foreach ($bundle_options as $bun_option){ $option_data = explode('#oa#', $bun_option); $bundleOptions[$i] = array( 'required' => $option_data[0], 'option_id' => '', 'position' => $option_data[1], 'type' => $option_data[2], 'title' => $option_data[3], 'delete' => '', ); $bundle_selections = explode ("#s#", $option_data[4]); foreach ($bundle_selections as $bun_selection){ $selection_data = explode('#sa#', $bun_selection); $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $selection_data[3]); $product_id = Mage::helper('productbundle')->getSelectionId($selection_data); $bundleSelections[$i][] = array( 'product_id' => $product_id, // 'selection_qty' => $selection_data[22], 'selection_qty' => $selection_data[22], 'selection_can_change_qty' => $selection_data[23], 'position' => $selection_data[24], 'is_default' => $selection_data[25], 'selection_id' => '', 'selection_price_type' => $selection_data[21], 'selection_price_value' => $selection_data[20], 'option_id' => '', 'delete' => '' ); $i2++; } $i++; } } //registering a product because of Mage_Bundle_Model_Selection::_beforeSave Mage::register('product', $bundleProduct); Mage::register('current_product', $bundleProduct); //flags for saving custom options/selections $bundleProduct->setCanSaveCustomOptions(true); $bundleProduct->setCanSaveBundleSelections(true); $bundleProduct->setAffectBundleProductSelections(true); //setting the bundle options and selection data $bundleProduct->setBundleOptionsData($bundleOptions); $bundleProduct->setBundleSelectionsData($bundleSelections); $bundleProduct->save(); Mage::getSingleton('adminhtml/session')->addSuccess('Import success'); } catch (Exception $e) { Mage::log($e->getMessage()); echo "error: ".$e->getMessage(); }
Istnieje kilka innych metod importowania/eksportowania produktów w pakietach, w których jesteś biegły. Chętnie poznamy Twoje komentarze i podzielimy się naszą wiedzą. Dziękuje za przeczytanie.
Tutaj możesz pobrać pełne rozszerzenie