我通过Magento API上传产品,但它们没有出现在前端。我必须进入后端,打开它们,更改没有,保存产品然后它会出现。
知道为什么吗?我假设在后端保存它的行为,是在DB中保存一些额外的标志,我只是不知道是什么。
@Steve Madsen。这是代码,我不认为我错过任何关键的东西,因为后端界面会提示我,然后我打开产品。
public void Import(Product product)
{
var mageProduct = new catalogProductCreateEntity();
mageProduct.name = product.Name;
mageProduct.description = product.Description;
mageProduct.price = product.Price.ToString();
mageProduct.short_description = product.ShortDescription;
mageProduct.description = product.Description;
mageProduct.status = "1";
mageProduct.weight = "0";
mageProduct.tax_class_id = "2";
mageProduct.gift_message_available = "0";
var additionalattributes = new associativeEntity[4];
var entity = new associativeEntity();
entity.key = "ship_price";
entity.value = product.PostageCost;
additionalattributes[0] = entity;
entity = new associativeEntity();
entity.key = "depth_cm";
entity.value = product.Depth;
additionalattributes[1] = entity;
entity = new associativeEntity();
entity.key = "height_cm";
entity.value = product.Height;
additionalattributes[2] = entity;
entity = new associativeEntity();
entity.key = "width_cm";
entity.value = product.Width;
additionalattributes[3] = entity;
mageProduct.additional_attributes = additionalattributes;
_m.catalogProductCreate(MageSessionProvider.GetSession(), "simple", "26", product.SKU, mageProduct);
var stock = new catalogInventoryStockItemUpdateEntity();
stock.manage_stock = 0;
stock.qty = "0";
_m.catalogInventoryStockItemUpdate(MageSessionProvider.GetSession(), product.SKU, stock);
Console.WriteLine(product.Name + " imported");
}
答案 0 :(得分:3)
我已经看到很多情况下,手动或通过API插入Magento数据库的内容将具有缺少的属性,无论出于何种原因,该属性在Magento UI中保存时都设置为默认值。 UI正在正确设置默认值,而API或数据库插入不设置属性。
所以,在你的情况下,我的第一行调试是
Magento使用Entity Attribute Value建模方案,该方案优化数据库灵活性而非查询。简而言之,您可以运行以下查询来获取基本的产品属性值。
您需要使用数据库中的产品ID替换[3455]的每个实例。您可以通过检查Magento管理界面中的自定义URL来获取此ID。您可以运行查询而不使用 WHERE子句,尽管默认索引未针对此用例进行优化,并且您将根据数据库大小获得较慢的查询。
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_varchar.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_varchar ON catalog_product_entity.entity_id = catalog_product_entity_varchar.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_varchar.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_text.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_text ON catalog_product_entity.entity_id = catalog_product_entity_text.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_text.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_datetime.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_datetime ON catalog_product_entity.entity_id = catalog_product_entity_datetime.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_datetime.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_decimal.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_decimal ON catalog_product_entity.entity_id = catalog_product_entity_decimal.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_decimal.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_gallery.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_gallery ON catalog_product_entity.entity_id = catalog_product_entity_gallery.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_gallery.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455
UNION
SELECT eav_attribute.frontend_label, eav_attribute.attribute_code,
catalog_product_entity_int.value
FROM catalog_product_entity
LEFT JOIN catalog_product_entity_int ON catalog_product_entity.entity_id = catalog_product_entity_int.entity_id
LEFT JOIN eav_attribute on catalog_product_entity_int.attribute_id = eav_attribute.attribute_id
WHERE catalog_product_entity.entity_id = 3455;
答案 1 :(得分:1)
“我使用你的SQL进行比较,并且在那里有很多额外的属性用空字符串设置。所以我设置了所有这些。这似乎没有效果。最后它归结为我设置mageProduct.websites = new [] {“base”}; - Dan Jun 16 at 14:12“
谢谢丹!这对我有用。类代码示例显示了mageProduct.websites = new [] {“0”};这是不正确的,我把它改为mageProduct.websites = new [] {“base”};它有效。
答案 2 :(得分:1)
此页面最有帮助。在执行CSV导入时,我发现我必须添加: _product_websites并确保将其设置为每个导入产品的基础。还要确保将is_in_stock的字段设置为1,之后我发现导入工作正常。
对我有用的最小字段列表如下: SKU, _商店, _attribute_set, _类型, _类别, _root_category, 描述, msrp_display_actual_price_type, msrp_enabled, 名称, 简短的介绍, 数量, is_in_stock, 状态, tax_class_id, 能见度, 价钱, 重量, _product_websites
样本记录:
ku,_store,_attribute_set,_type,_category,_root_category,description,msrp_display_actual_price_type,msrp_enabled,name,short_description,status,tax_class_id,visibility,price,weight,_product_websites,qty,is_in_stock
CC0003,,Default,simple,Specialist Therapeutics,Products,Conn Test #3,Use config,Use config,Conn Test #3,ConnTest,1,0,4,0,1,base,3000,1