تختفي الخيارات القابلة للتكوين من الواجهة الأمامية بعد إعادة فهرسة حالة المخزون

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