首页 文章

SKU - Magento将可配置产品添加到购物车中

提问于
浏览
1

我正在玩程序化的购物车娱乐 . 通过id向购物车添加产品没有问题,即

$params = array(
    'product' => 272,
    'super_attribute' => array(
        22 =>30 ,
    ),
    'qty' => 2,
);


$cart = Mage::getSingleton('checkout/cart'); 
$product = new Mage_Catalog_Model_Product();
$product->load(272); 
$cart->addProduct($product, $params);
$cart->save(); 
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);

但是如果我只知道产品sku怎么做呢,我的意思是如何获得可配置产品的产品ID和super_attributes .

Mage::getModel('catalog/product')->loadByAttribute('sku','$sku');

似乎只返回该产品(sku)信息而没有special_attribute .

有任何想法吗?

欢呼,/ Marcin

3 回答

  • 3

    您可以通过获取由SKU过滤的集合来检索产品:

    $searchForThisSku = 'p_1234';
    
    /** @var $productCollection Mage_Catalog_Model_Resource_Product_Collection */
    $productCollection = Mage::getModel( 'catalog/product' )
        ->getResourceCollection()
        ->addFieldToFilter( 'sku', $searchForThisSku );
    
    /** @var $product Mage_Catalog_Model_Product */
    $product = $productCollection->getFirstItem();
    
    // you should have the product now, maybe it isn't even necessary to get the ID
    $product->getId();
    
    // all in one line:
    $productId = (int) Mage::getModel( 'catalog/product' )
        ->getResourceCollection()
        ->addFieldToFilter( 'sku', $searchForThisSku )
        ->getFirstItem()
        ->getId();
    
  • 0

    我想,feeela没有回答这个问题 .

    一般(没有错误处理):

    $sku = 'any-sku-number';
    $qty = 1;
    
    $product = Mage::getModel('catalog/product')
        ->loadByAttribute('sku', $sku);
    
    $parentIds = Mage::getResourceSingleton('catalog/product_type_configurable')
        ->getParentIdsByChild($product->getId());
    
    $parent = Mage::getModel('catalog/product')->load(current($parentIds));
    
    if ($parent->getTypeId() === Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
        $paramsSuperAttribute = array('super_attribute' => array());
    
        foreach ($parent->getTypeInstance(true)->getConfigurableAttributes($parent) as $attribute) {
            $paramsSuperAttribute['super_attribute'][$attribute->getProductAttribute()->getAttributeId()] =
                (int) $product->getData($attribute->getProductAttribute()->getAttributeCode());
        }
    }
    
    $params = array('qty' => $qty);
    

    现在,有两种方法可以通过sku将产品添加到购物车中:

    编程方式:

    $cart = Mage::getSingleton('checkout/cart');
    
    $cart->addProduct(isset($parent) ? $parent : $product, array_merge($params, $paramsSuperAttribute))->save();
    
    Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
    

    按网址:

    $addToCartUrl = Mage::helper('checkout/cart')
        ->getAddUrl(isset($parent) ? $parent : $product, $params);
    
    if (isset($parent)) {
        $addToCartUrl .= '?' . http_build_query($paramsSuperAttribute);
    }
    
    // now you can use this url like this (controller action)
    $this->getResponse()->setRedirect($addToCartUrl);
    return;
    
  • 0

    尝试

    /** @product Mage_Catalog_Model_Product */
    $product = Mage::getModel('catalog/product');
    
    $sku = 'sku';
    $product->load($sku, 'sku');
    

相关问题