Magento API Загруженные продукты, не появляющиеся во внешнем интерфейсе - если они не будут повторно сохранены в бэкэнд

Я загружаю продукты через API Magento, и они не отображаются в интерфейсе. Я должен зайти в бэкэнд, открыть их, ничего не менять , сохранить продукт, а потом он появится.

Любая идея почему? Я предполагаю, что он сохраняет его в конце, сохраняет некоторые дополнительные флаги в БД, я просто не знаю, что.

@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");
        }

php,sql,magento,entity-attribute-value,

2

Ответов: 3


3 принят

Я видел много случаев, когда что-то, вставленное в базы данных Magento вручную или через API, будет иметь отсутствующий атрибут, который по какой-либо причине установлен на значение по умолчанию при сохранении в пользовательском интерфейсе Magento. Пользовательский интерфейс правильно устанавливает значения по умолчанию, тогда как вставки API или базы данных не устанавливают атрибут.

Итак, в вашем случае моя первая строка отладки будет

  1. «Загрузить» [sic] продукт с API (какие методы API вы используете? Или вы используете пользовательский API?)
  2. Сделайте снимок значений атрибутов для этого продукта
  3. Сохраните продукт через интерфейс пользователя Magento
  4. Сделайте снимок значений атрибутов для этого продукта
  5. Diff # 2 и # 4
  6. Убедитесь, что ваш метод «upload» [sic] устанавливает любые атрибуты, присутствующие в # 4, но не # 2

Magento использует схему моделирования значений атрибута Entity , которая оптимизируется для гибкости базы данных, а не для запросов. Короче говоря, вы можете запустить следующие запросы, чтобы получить основные значения атрибута продукта.

Вы захотите заменить каждый экземпляр [3455] идентификатором продукта из вашей базы данных. Вы можете получить этот идентификатор, изучив URL-адрес гордости в пользовательском интерфейсе Magento Admin. Вы можете запускать запрос без предложений 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

«Я использовал ваш SQL для сравнения, и там, где было довольно много дополнительных свойств, которые были установлены с пустыми строками, поэтому я установил их все. И это, похоже, не повлияло. В конце концов, это сводилось к тому, что я устанавливал mageProduct .websites = new [] {"base"}; "Dan Jun 16 at 14:12"

Спасибо, Дэн! Это сработало для меня. Пример кода класса показывает mageProduct.websites = new [] {"0"}; что неверно, я изменил его на mageProduct.websites = new [] {"base"}; и это работает.


1

Эта страница была наиболее полезной. Выполняя импорт CSV, я обнаружил, что должен добавить: _product_websites и убедиться, что он настроен на базу для каждого импортируемого продукта. Также убедитесь, что у вас есть поле для is_in_stock, установленное в 1, после чего я обнаружил, что импорт работал нормально.

Список минимальных полей, которые работали для меня: sku, _store, _attribute_set, _type, _category, _root_category, description, msrp_display_actual_price_type, msrp_enabled, name, short_description, qty, is_in_stock, status, 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
PHP, SQL, Magento, сущность-атрибут-значение,
Похожие вопросы