Настраиваемые параметры, исчезающие из интерфейса после переиндексации статуса акций

magento.stackexchange https://magento.stackexchange.com//questions/34569

Вопрос

У меня есть пользовательская процедура импорта, которая создает настраиваемые продукты и назначает им дочерние элементы.Они отображаются во внешнем интерфейсе без проблем, пока я вручную не запущу переиндексацию состояния запасов.

Я сделал снимок до и после переиндексации, и есть одно изменение в таблице, которое cataloginventory_stock_status где находится stock_status столбец изменен с 1 (когда это действительно появится), чтобы 0 (сейчас не отображается) для моего настраиваемого родителя.

Кто-нибудь может объяснить это поведение или знает, как это исправить?

Просто чтобы уточнить, повторная синхронизация моего продукта, который вызывает следующий код:

$stockStatus = Mage::getModel('cataloginventory/stock_status');
$stockStatus->assignProduct($product);
$stockStatus->saveProductStatus($product->getId(), 1);

заставляет параметры появляться снова до следующего переиндексации статуса.

Это было полезно?

Решение 2

Оказывается, при импорте настраиваемого родительского элемента я пропускал некоторый код, который помещал запись в cataloginventory_stock_item что вызвало stock_status должен быть установлен на 0 когда был запущен процесс переиндексации.Имея это в виду, нам нужно убедиться, что у настраиваемого родительского элемента есть элемент, т.е:

$stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($product);
$stockItem->setData('stock_id', 1);
$stockItem->setData('qty', $stockLevel);
$stockItem->setData('use_config_min_qty', 1);
$stockItem->setData('use_config_backorders', 1);
$stockItem->setData('min_sale_qty', 1);
$stockItem->setData('use_config_min_sale_qty', 1);
$stockItem->setData('use_config_max_sale_qty', 1);
$stockItem->setData('is_in_stock', ($isInStock) ? 1 : 0);
$stockItem->setData('use_config_notify_stock_qty', 1);
$stockItem->setData('use_config_manage_stock', 0);
$stockItem->setData('manage_stock', ($this->getPropS($kcStockItem, 'STOCK_CONTROLLED') == '-1') ? 1 : 0); 
$stockItem->setData('backorders', $backorderVal);
$stockItem->setData('use_config_backorders', "0");
$stockItem->save();

Другие советы

Я столкнулся с этой проблемой при импорте состояния запасов с помощью метода API.Что мне нужно было сделать, так это исправить ядро, переписав основной модуль. Mage_Catalog_Model_Resource_Product_Status::getProductStatus() в нем есть ошибка, которая неправильно загружает дочерние статусы.Чтобы исправить эту ошибку, я заменил назначение $select в операторе else этого метода на

    $select = $adapter->select()
        ->from(
        array('t1' => $attributeTable),
                    '')
        ->joinLeft(
        array('t2' => $attributeTable),
                    't1.entity_id = t2.entity_id AND t1.attribute_id = t2.attribute_id AND t2.store_id = ' . (int)$storeId,
        array('t1.entity_id')
        )
        ->columns(array('value' => $valueCheckSql))
        ->where('t1.store_id = ?', Mage_Core_Model_App::ADMIN_STORE_ID)
        ->where('t1.attribute_id = ?', $attribute->getAttributeId())
        ->where('t1.entity_id IN(?)', $productIds);

Убедитесь, что вы делаете это, переопределяя Mage_Catalog_Model_Resource_Product_Status::getProductStatus() способ выполнить это так, чтобы вы не изменяли ядро напрямую.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top