Конфигурируемый продукт Magento работает, но не отображается до повторного сохранения - PullRequest
3 голосов
/ 19 сентября 2011

В настоящее время я учусь создавать настраиваемый продукт для Magento.Все работает нормально, продукт был успешно импортирован с использованием моих кодов, включая связанные продукты.Проблема в том, что продукт не отображается в интерфейсе.Я должен вручную перейти на сервер, отредактировать продукт и сохранить его.Запишите Мне не нужно ничего менять , мне просто нужно открыть его и сохранить.Только тогда он появится в переднем конце.Есть идеи, почему это так?

<code>define('MAGENTO', dirname(dirname(__FILE__)));
require_once MAGENTO . '/app/Mage.php';
require_once 'FeedMag.php';
$myFeed = new FeedMag();
Mage::app();

// test data
$sku = "TESTSKU2";
$inventory = "10";

$stockData['qty'] = $inventory;
$stockData['is_in_stock'] = 1;

$simple['Description'] = 'Configurable Product 1';
$simple['ShortDescription'] = 'Short Description';
$simple['LongDescription'] = 'Long Description';
$simple['BrandCode'] = 'Nike';

$attr['color'] = 'Blue';
$attr['size'] = 1;

$price = 11;

// get attribute id
foreach($attr AS $key=>$value) {
    $attr_ids[] = $myFeed->attributeValueExists($key, $value);
}
$new = false;
echo "<pre>";
try {
    // get product id from SKU
    $id = Mage::getModel('catalog/product')->getIdBySku($sku);

    // load product if id exist or create a new one 
    if($id && $id > 0) {
        $product = Mage::getModel('catalog/product')->load($id);
    }
    else {
        $product = Mage::getModel('catalog/product')->setSku($sku);
        $new = true;
    }

    // set it to configurable
    $product->setTypeId('configurable');

    // get attributes' id
    $usingAttributeIds = $new_array = array();
    foreach( $attr as $key=>$value ) {
        $attribute = $product -> getResource() -> getAttribute( $key );
        if ( $product -> getTypeInstance() -> canUseAttribute( $attribute ) ) {
            if ( $new ) { // fix for duplicating attributes error
                $usingAttributeIds[] = $attribute -> getAttributeId();
            } 
        } 
    } 

    // if we have attributes' ID, set it to the product
    if ( !empty( $usingAttributeIds ) ) {
        $product -> getTypeInstance() -> setUsedProductAttributeIds( $usingAttributeIds );
        $attributes_array = $product->getTypeInstance()->getConfigurableAttributesAsArray();
        foreach($attributes_array as $key => $attribute_value) {
            $attributes_array[$key]['label'] = $attribute_value['frontend_label'];
        }
        $product -> setConfigurableAttributesData($attributes_array);
        $product -> setCanSaveConfigurableAttributes( true );
        $product -> setCanSaveCustomOptions( true );
    }

    // set product data
    $product->setStoreId(0)
             ->setAttributeSetId(4)
             ->setStockData($stockData)
             ->setPrice($price)
             ->setName($simple['Description'])
             ->setShortDescription($simple['ShortDescription'])
             ->setDescription($simple['LongDescription'])
             ->setCategoryIds(array(3))
             ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
             ->setBrand($simple['BrandCode'])
             ->setStatus(1)
             ->setTaxClassId(2) //Taxable goods
             ->save();

    // get previous children if any
    $associated = Mage::getModel('catalog/product_type_configurable')
                ->getChildrenIds($product->getId());

    // add new simple product to configurable product
    $associated[0][] = Mage::getModel('catalog/product')->getIdBySku('SIMPLE1');

    // add all simple product to configurable product
    Mage::getResourceModel('catalog/product_type_configurable')
        ->saveProducts($product->getId(), array_unique($associated[0]));
}
catch (Mage_Core_Exception $e) {
    echo $e->getMessage();
}
catch (Exception $e) {
    echo $e;
}
echo "
";

FeedMag - это пользовательский класс, созданный моим коллегой. Там много методов, но для этой цели я буду использовать толькоone; attributeValueExists , чтобы проверить, существует ли указанный атрибут, и если он существует, будет возвращен его идентификатор.

Простой продукт уже существует, поэтому мне просто нужно его использовать (SIMPLE1).

1 Ответ

0 голосов
/ 03 сентября 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...