Magento ืืื ืึทื E- ืืึทื ืื ืืืืืื ื, ื.ื. ืืื ืืขืจ ืึทืืืขื ืืืึท ืกืขืืื ื ืคึผืจืึธืืืงืื ืืื ืืืืฃ ืืืขืจืืึทืืืื ื, ืืึทืืืฉืืกืืืงืก ืึธืืขืจ ืคืื ืึทื ืฆืืขื ืึทืงืึทืื ืืื ื ืึทืงืึทืืคึผืึทื ืืื ื ืคืืจืงืืืคืื ื. ืื ืืขืจืข ืึทืคึผืืึทืงืืืฉืึทื ื (ืืืฉื, ERP ืกืืกืืขืืขื) ืืขื ืขื ืืขืกืขืจ ืคึผืึทืกืืง ืคึฟืึทืจ ืึทืงืึทืืคึผืึทื ืืื ื ืึทืคึผืืึทืงืืืฉืึทื ื. ืืขืจืืืขืจ, ืืึทื ืฅ ืึธืคื ืืื ืื ืคืืจ ืคืื ื ืืฆื Magento ืื ืึทืจืืขื ืคืื ืื ืืึทืืจืืืืื ื ืึท ืงืจืึธื ืืื ืื ืื ืืขืจืข ืกืืกืืขืืขื (ืืืฉื, 1C) ืขืจืืืืึทื.
ืืื ืึทืืืขืืืื, ืื ืึทืืจืืืฉืึทื ืงืขื ืขื ืืืื ืจืืืืกื ืฆื ืืึทืื ืจืขืคึผืืึทืงืืืฉืึทื ืืืจื:
- ืงืึทืืึทืืึธื (ืคึผืจืึธืืืงืื, ืงืึทืืขืืึธืจืืขืก);
- ืื ืืืึทื ืืึธืจื ืืึทืื (ืคึผืจืึธืืืงื ืืึทืืึทื ืกืขืก ืืื ืืืขืจืืึทืืกืื ืืื ืคึผืจืืืกืื);
- ืงืืืืึทื ืฅ;
- ืึธืจืืขืจืก;
Magento ืึธืคืคืขืจืก ืึท ืืึทืืื ืืขืจ ืงืืึทืก ืคืื ืึทืืืืฉืขืงืฅ ืคึฟืึทืจ ืืึทื ืืคึผืืึทืืืืืื ื ืืึทืื ืืื ืื ืืึทืืึทืืืืก -
ืงืึทืกืืึทืืขืจื ืืื ืึธืจืืขืจืก ืืขื ืขื ืืืืฉืึทืืืึทืื ืจืขืคึผืืืงืืืืื ืืื ืื ืื ืืขืจืข ืจืืืืื ื - ืคึฟืื Magento ืฆื ืคืื ืืจืืืกื ืืืง ืขืจืคึผ ืกืืกืืขืืขื. ืืขืจืืืขืจ, ืขืก ืืื ืกืืืคึผืืขืจ ืืื ืืื, ืืืืฃ ืื Magento ืืืึทื ืืืจ ื ืึธืจ ืืึทืจืคึฟื ืฆื ืืืืกืงืืืึทืื ืื ืฆืื ืขืืขื ืืึทืื, ืืื ืืขืืึธืื "ืงืืื ื ืืฒื ืข ื ืืจืืืกืืขืคืืืื ื ืคื ื ืืื ืืืข ืจ ืืฒื".
ืคึผืจืื ืกืึทืคึผืึทืื ืคืื ืจืขืงืึธืจืืื ื ืืึทืื ืืื ืึท ืืึทืืึทืืืืก
ืืื ืืขืจ ืืึธืืขื ื, ืงืจืืืืืื ื ืึทืืืืฉืขืงืฅ ืืขืจืืืขืืืขื ืืื ืื ืืึทืืึทืืืืก ืคึผืจืึธืืจืึทืืืึทืืืงืึทืืื ืืื Magento ืืื ืืืจืืืขืงืึธืื
function __construct (MagentoCmsModelBlockFactory $blockFactory) {
$this->blockFactory = $blockFactory;
}
/** @var MagentoCmsModelBlock $block */
$block = $this->blockFactory->create();
ืืื ืฉืจืืืื ืฆื ืื ืืึทืืึทืืืืก ืืื ืืืจืืืขืงืึธืื
function __construct (MagentoCmsApiBlockRepositoryInterface $blockRepo) {
$this->blockRepo = $blockRepo;
}
$this->blockRepo->save($block);
ืื "ืคืึทืืจืืง" ืืื "ืจืืคึผืึทืืึทืืึธืจื" ืฆืืืึทื ื ืงืขื ืขื ืืืื ืืขืืืืื ื ืคึฟืึทืจ ืึทืืข ืืืืคึผื ืืึธืืขืืก ืืื ืื Magento 2 ืคืขืื.
ืืงืขืจืืืง ืคึผืจืึธืืืงื ืืื ืคึฟืึธืจืืึทืฆืืข
ืืื ืงืืง ืืืืฃ ืึท ืืึทืื ืกืืจืืงืืืจ ืืืึธืก ืืืืึทืื Magento 2.3 ืืืขืจืกืืข. ืื ืืขืจืกื ืืงืขืจืืืง ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืืขื ืคึผืจืึธืืืงื ืืื ืืื ืื ืืืฉ catalog_product_entity
(ืคึผืจืึธืืืงื ืจืขืืืกืืจื):
entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at
ืืื ืืื ืืืืืืขื ืฆื ืืืื ืืืคึผ ืคืื ืคึผืจืึธืืืงื (type_id='simple'
), ืึท ืกืืื ืคืื ืคืขืืืงืืึทื ืึทืืจืืืืืฅ (attribute_set_id=4
) ืืื ืืืื ืึธืจืืจื ืึทืืจืืืืืฅ has_options
ะธ required_options
. ืืื ื ืื ืึทืืจืืืืืฅ entity_id
, created_at
ะธ updated_at
ืืขื ืขื ืืืฉืขื ืขืจืืืืึทื ืืืืืึธืืึทืืืฉ, ืืขืจืืืขืจ, ืืื ืคืึทืงื, ืฆื ืืืืื ืึท ื ืืึทืข ืคึผืจืึธืืืงื, ืืืจ ื ืึธืจ ืืึทืจืคึฟื ืฆื ืฉืืขืื sku
. ืืื ืื ืืืก:
/** @var MagentoCatalogApiDataProductInterfaceFactory $factProd */
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
/** @var MagentoCatalogApiDataProductInterface $prod */
$prod = $factProd->create();
$prod->setAttributeSetId(4);
$prod->setTypeId('simple');
$prod->setSku($sku);
$repoProd->save($prod);
ืืื ืืื ืืึทืงืืืขื ืึท ืืืกื ืขื:
The "Product Name" attribute value is empty. Set the attribute and try again.
ืืื ืืืื ืื ืคึผืจืึธืืืงื ื ืึธืืขื ืฆื ืื ืืขืื ืืื ืืึทืงืืืขื ืึท ืึธื ืืึธื ืึทื ืื ืึทืืจืืืืื ืืื ืคืขืื ืืืง Price
. ื ืึธื ืึทืืื ื ืื ืคึผืจืืึทื, ืื ืคึผืจืึธืืืงื ืืื ืืืกืืฃ ืฆื ืื ืืึทืืึทืืืืก:
$prod = $factProd->create();
$prod->setAttributeSetId(4);
$prod->setTypeId('simple');
$prod->setSku($sku);
$prod->setName($name);
$prod->setPrice($price);
$repoProd->save($prod);
ืืขืจ ืคึผืจืึธืืืงื ื ืึธืืขื ืืื ืกืืึธืจื ืืื ืื ืคึผืจืึธืืืงื ืืืึทืจืืฉืึทืจ ืึทืืจืืืืื ืืืฉ (catalog_product_entity_varchar
), ืคึผืจืืึทื - ืืื ืื ืืืฉ catalog_product_entity_decimal
. ืืืืืขืจ ืึทืืื ื ืึท ืคึผืจืึธืืืงื, ืขืก ืืื ืงืขืืืึทืืง ืฆื ืืคืืจืืฉ ืึธื ืืืืึทืื ืึทื ืืืจ ื ืืฆื ืื ืึทืืืื ืืกืืจืึทืืืืืข ืกืืึธืจืคืจืึทื ื ืฆื ืึทืจืืึทื ืคืืจ ืืึทืื:
/** @var MagentoStoreModelStoreManagerInterface $manStore */
$manStore->setCurrentStore(0);
ื ืึธื ืึทืืจืืืืืฅ
ืคึผืจืึทืกืขืกืื ื ื ืึธื ืคึผืจืึธืืืงื ืึทืืจืืืืืฅ ื ืืฆื Magento ืืื ืึท ืคืึทืจืืขื ืืื. EAV ืืึทืื ืืึธืืขื ืคึฟืึทืจ ืืืืคึผื ืขื ืืืืื (ืืขื ืืืฉ eav_entity_type
) ืืื ืืืื ืขืจ ืคืื ืื ืฉืืืกื ืคึฟืขืึดืงืืืื ืคืื ืืขื ืคึผืืึทืืคืึธืจืืข. ืืืจ ืคืฉืื ืืืืื ืื ืฆืื ืขืืขื ืึทืืจืืืืืฅ ืฆื ืื ืคึผืจืึธืืืงื ืืึธืืขื:
$prodEntity->setData('description', $desc);
$prodEntity->setData('short_description', $desc_short);
// ะธะปะธ
$prodEntity->setDescription($desc);
$prodEntity->setShortDescription($desc_short);
ืืื ืืืขื ืฉืคึผืึธืจื ืื ืืึธืืขื ืืืจื ืื ืจืขืคึผืึธ ืืืืคืขืฅ:
$repoProd->save($prod);
ื ืึธื ืึทืืจืืืืืฅ ืืืขื ืืืื ืืืื ืกืืึธืจื ืืื ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืืึทืืึทืืืืก ืืืฉื.
ืื ืืืึทื ืืึธืจื ืืึทืื
ืืื ืคึผืฉืื ืืืขืจืืขืจ - ืื ืกืืืข ืคืื โโืคึผืจืึธืืืงื ืืื ืืึทืืขืจ. ืืื Magento 2.3, ืกืืจืึทืงืืฉืขืจื ืืื ืื ืืึทืืึทืืืืก ืืืึธืก ืืึทืฉืจืืึทืื ืืขื ืคึฟืึธืจืืึทื ืคึฟืึทืจ ืกืืึธืจืื ื ืื ืืืึทื ืืึธืจื ืืึทืื ืืขื ืขื
/** @var MagentoCatalogModelProduct $prodEntity */
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
$inventory = [
'is_in_stock' => true,
'qty' => 1234
];
$prodEntity->setData('quantity_and_stock_status', $inventory);
$repoProd->save($prodEntity);
ืืขืืืข
ืืื ืึท ืืขืจืฉื, ืืขืืืข ืฉืืืฆื ืคึฟืึทืจ ืึท ืคึผืจืึธืืืงื ืคึฟืึทืจ ืึท ืงืืืขื ื ืืื ืึท ืงืจืึธื (E- ืืึทื ืื) ืืื ืึทื ืืขืจืฉ ืคืื ืืขืืืข ืฉืืืฆื ืคึฟืึทืจ ืืขืจ ืืขืืืืงืขืจ ืคึผืจืึธืืืงื ืคึฟืึทืจ ืึทื ืึธื ืืขืฉืืขืืืขืจ ืืื ืึทื ืื ืขืจืืขื ืึทืงืึทืื ืืื ื ืกืืกืืขื (ืขืจืคึผ). ืืื ืืขืจ ืขืจืฉืืขืจ ืคืึทื, ืขืก ืืื ืงืขืืืึทืืง ืฆื ืืืืึทืื ืื ืคึผืจืึธืืืงื ืคึผื ืื ืฆื ืคึผื ืื; ืืื ืื ืจืืข, ืขืก ืืื ืืขื ืื ืฆื ืืขืื ืึท ืืขื ืขืจืึทื ืืขืืึทื ืง ืคืื ืื ืคึผืจืึธืืืงื. ืึธืืขืจ, ืืจืึทื ืกืคืขืจืื ื ืืืึท ืืื ืืกืืขืจ ืื ืขืจืฉืืืง ืืืื ืคืื ืึท ืคึผืจืึธืืืงื ืืื ืืึทื ืฅ ืคึผืจืึธืกื. case
ืืืขื ืืืคึผืึธืจืืื ื ืืึทืื.
ืืืขื ืึทืืื ื ืึท ืืืื ืืืจื ืื ืึทืืืื ืืกืืจืึทืืึธืจ ืืึทืคืืืข, ืื ืืืื ืืื ืขืจืฉืืขืจ ืืขืจืืืขืืืขื ืืื ืึท ืฆืืึทืืืืืึทืืืง ืืืขืืืืืึทืืขืจ (./pub/media/tmp/catalog/product
) ืืื ืืืืื ืืืขื ืฉืคึผืึธืจื ืื ืคึผืจืึธืืืงื ืืื ืืจืืืขืจืืขืคืืจื ืฆื ืื ืืืืืึท ืืืขืืืืืึทืืขืจ (./pub/media/catalog/product
). ืืืื, ืืืขื ืฆืืืขืืขืื ืืืจื ืื ืึทืืืื ืืึทืคืืืข, ืื ืืืื ืืื ืืึทืื image
, small_image
, thumbnail
, swatch_image
.
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
/** @var MagentoCatalogModelProductGalleryCreateHandler $hndlGalleryCreate */
/* $imagePath = '/path/to/file.png'; $imagePathRelative = '/f/i/file.png' */
$imagePathRelative = $this->imagePlaceToTmpMedia($imagePath);
/* reload product with gallery data */
$product = $repoProd->get($sku);
/* add image to product's gallery */
$gallery['images'][] = [
'file' => $imagePathRelative,
'media_type' => 'image'
'label' => ''
];
$product->setData('media_gallery', $gallery);
/* set usage areas */
$product->setData('image', $imagePathRelative);
$product->setData('small_image', $imagePathRelative);
$product->setData('thumbnail', $imagePathRelative);
$product->setData('swatch_image', $imagePathRelative);
/* create product's gallery */
$hndlGalleryCreate->execute($product);
ืคึฟืึทืจ ืขืืืขืืข ืกืืื, ืื ืืืืืึท ืืื ืืื ืืงื ืืืืื ื ืึธื ืืขืจ ืขืจืฉืืขืจ ืฉืคึผืึธืจื ืื ืคึผืจืึธืืืงื ืืื ืจืืืจืืืืื ื ืขืก ืคืื ืื ืจืืคึผืึทืืึทืืึธืจื ืืืืืขืจ. ืืื ืืืจ ืืึทืจืคึฟื ืฆื ืกืคึผืขืฆืืคืืฆืืจื ืื ืึทืืจืืืืื label
ืืืขื ืึทืืื ื ืึท ืคึผืึธืืืฆืืข ืฆื ืื ืคึผืจืึธืืืงื ืืขืืืข ืืึทืืขืจืืข (ืึทื ืืขืจืฉ ืืืจ ืืึทืงืืืขื ืึท ืืืกื ืขื Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516
).
ะะฐัะตะณะพัะธะธ
ืึธืคื, ืื ืงืึทืืขืืึธืจืืข ืกืืจืืงืืืจ ืคืื ืื ืงืจืึธื ืืื ืื ืืึทืงืขื ื ืึทืคึผืืึทืงืืืฉืึทื ืึธืืขืจ ืื ืคึผืืืืกืืึทื ื ืคืื ืคึผืจืึธืืืงืื ืืื ืืื ืงืขื ืขื ืืืื ืืืืืืืืง ืึทื ืืขืจืฉ. ืกืืจืึทืืขืืืขืก ืคึฟืึทืจ ืืืืืจืืืืื ื ืืึทืื ืืืขืื ืงืึทืืขืืึธืจืืขืก ืืื ืคึผืจืึธืืืงืื ืืื ืืื ืึธืคืขื ืืขื ืืืืฃ ืคืืืข ืกืืืืช. ืืื ืืขื ืืืึทืฉืคึผืื ืืื ืืึทืืื ืื ืคืืืืขื ืืข:
- ืืึทืงืขื ื ืืื ืงืจืึธื ืงืึทืืขืืึธืจืืขืก ืืขื ืขื ืงืึทืืคึผืขืจื ืืื ื ืึธืืขื;
- ืืืื ืึท ืงืึทืืขืืึธืจืืข ืืื ืืืคึผืึธืจืืื ืืืึธืก ืืื ื ืืฉื ืืื ืื ืงืจืึธื, ืขืก ืืื ืืืฉืืคื ืืื ืืขืจ ืืขืจ ืืืึธืจืฆื ืงืึทืืขืืึธืจืืข (
Default Category
) ืืื ืืืื ืืืืึทืืขืจ ืคึผืึทืืืฉืึทื ืื ื ืืื ืื ืงืจืึธื ืงืึทืืึทืืึธื ืืื ืืึทื ืืืึทืื ืื ืืขื ืืืขื; - ืึท ืคึผืจืึธืืืงื ืืื ืึทืกืืื ื ืฆื ืึท ืงืึทืืขืืึธืจืืข ืืืืื ืืืขื ืขืก ืืื ืืืฉืืคื ืืื ืื ืงืจืึธื (ืขืจืฉืืขืจ ืึทืจืืึทื ืคืืจ);
ืืงืขืจืืืง ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืงืึทืืขืืึธืจืืข ืืื ืืื ืื ืืืฉ catalog_category_entity
( ืงืึทืืึทืืึธื ืคืื ืงืึทืืขืืึธืจืืขืก ). ืฉืึทืคึฟื ืึท ืงืึทืืขืืึธืจืืข ืืื Magento:
/** @var MagentoCatalogApiDataCategoryInterfaceFactory $factCat */
/** @var MagentoCatalogApiCategoryRepositoryInterface $repoCat */
$cat = $factCat->create();
$cat->setName($name);
$cat->setIsActive(true);
$repoCat->save($cat);
ืคึฟืึทืจืืื ืืื ื ืคืื ืึท ืคึผืจืึธืืืงื ืฆื ืึท ืงืึทืืขืืึธืจืืข ืืื ืืืจืืืขืงืึธืื ืืื ืื ืงืึทืืขืืึธืจืืข ืฉืืึทื ืืื ืคึผืจืึธืืืงื SKU:
/** @var MagentoCatalogModelCategoryProductLinkFactory $factCatProdLink */
/** @var MagentoCatalogApiCategoryLinkRepositoryInterface $repoCatLink */
$link = $factCatProdLink->create();
$link->setCategoryId($catMageId);
$link->setSku($prodSku);
$repoCatLink->save($link);
ืืื ืืึทื ืฅ
ืฉืจืืืื ืงืึธื ืฆื ืืืืื ืึท ืคึผืจืึธืืืงื ืคึผืจืึธืืจืึทืืืึทืืืง ืฆื Magento 2 ืืื ืืึทื ืฅ ืืจืื ื. ืืื ืืึธืื ืงืึทืืืืื ื ืึทืืฅ ืกืืืืืื ืืืืื ืืื ืึท ืืขืืึธ ืืึธืืืืข "fl32:import:prod
, ืืืึธืก ืืืคึผืึธืจืฅ ืื ืคึผืจืึธืืืงืื ืืืกืงืจืืืื ืืื ืื JSON ืืขืงืข "
[
{
"sku": "...",
"name": "...",
"desc": "...",
"desc_short": "...",
"price": ...,
"qty": ...,
"categories": ["..."],
"image_path": "..."
}
]
ืืืืืขืจ ืคึฟืึทืจ ืึทืจืืึทื ืคืืจ ืืขื ืขื ืืื ืืขื ืงืึทืืึทืืึธื ./etc/data/img
.
ืื ืฆืืื ืฆื ืึทืจืืึทื ืคืืจ 10 ืคึผืจืึธืืืงืื ืืื ืืขื ืืืคึฟื ืืื ืืืขืื 10 ืกืขืงืื ืืขืก ืืืืฃ ืืืื ืืึทืคึผืืึทืคึผ. ืืืื ืืืจ ืึทื ืืืืืงืืขื ืืขื ืืขืืึทื ืง ืืืืึทืืขืจ, ืขืก ืืื ืืจืื ื ืฆื ืงืืืขื ืฆื ืื ืืกืงื ื ืึทื ืืืขืื 3600 ืคึผืจืึธืืืงืื ืงืขื ืขื ืืืื ืืืคึผืึธืจืืื ืคึผืขืจ ืฉืขื, ืืื ืขืก ืงืขื ื ืขืืขื ืืืขืื 100 ืฉืขื ืฆื ืึทืจืืึทื ืคืืจ 30K ืคึผืจืึธืืืงืื. ืจืืคึผืืืืกืื ื ืึท ืืึทืคึผืืึทืคึผ ืืื ืึท ืกืขืจืืืขืจ ืึทืืึทืื ืืืจ ืฆื ืืืึทื ืืืืก ืื ืกืืืืึทืฆืืข ืขืคึผืขืก. ืืคึฟืฉืจ ืืคืืื ืขืืืขืืข ืืึธื. ืืืขืจ ื ืืฉื ืืืจื ืึธืจืืขืจืก ืคืื ืืึทืื ืึทืืื. ืืึธืืขืจ ืืขื ืืืืงืืึทื ืืื ืกืืึธืื ืึทืก ืืื ืฆื ืขืืืขืืข ืืึธืก ืืืื ืขืจ ืคืื ืื ืกืืืืช ืคึฟืึทืจ ืื ืืืขืจืืืฉืึทื ืก ืคืื ืื ืคึผืจืืืขืงื
ื ืจืึทืืืงืึทื ืืืืืื ื ืฆื ืคืึทืจืืจืขืกืขืจื ืื ืืืืงืืึทื ืคืื ืึทืจืืึทื ืคืืจ ืงืขื ืืืื ืืืจืขืงื ืึทืจืืึทื ืืจืขืื ืืื ืื ืืึทืืึทืืืืก, ืึธืืขืจ ืืื ืืขื ืคืึทื ืึทืืข ืื "ืืืืื" ืืืขืื ืื ืขืงืกืืขื ืกืืืืืืื ืคืื Magento ืืขื ืขื ืคืึทืจืคืึทืื - ืืืจ ืืืขื ืืึธืื ืฆื ืืึธื ืึทืืฅ "ืึทืืืึทื ืกืืจืืข" ืืื. ืึธืืขืจ, ืขืก ืืื ืืืขืจื ืขืก. ืืืื ืขืก ืึทืจืืขื ืืืืก, ืืื ืืืขื ืืึทืืจืึทืืื ืื ืฆืืืึทื ื ืืื ืืืจืขืงื ืฉืจืืืื ืฆื ืื ืืึทืืึทืืืืก ืืื ืืขืจ ืืืืึทืืขืจ ืึทืจืืืงื.
ืืงืืจ: www.habr.com