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

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

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

@ Стив Мэдсен. вот код, я не думаю, что я упускаю что-то решающее, поскольку внутренний интерфейс подсказывает мне об этом, затем я открываю продукт.

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

Ответы [ 3 ]

3 голосов
/ 16 июня 2009

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

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

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

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

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

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

Список минимальных полей, которые работали для меня: ы, _хранить, _attribute_set, _тип, _category, _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
1 голос
/ 16 сентября 2009

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

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

...