문제

우리가 queryString을 통해 장바구니에 제품 추가 .

그러나 제품 ID 을 포함하지 않고 URL QueryString을 통해 SKU를 어떻게 추가합니까? 다음과 같이 :

도메인 / 체크 아웃 / 카트 / 추가? SKU= ABC
또는
도메인 / 체크 아웃 / 카트 / Add / SKU= BC

도움이 되었습니까?

해결책

Andhi Irawan, checkout Cart controllers에서 이러한 유형의 작업을 수행 할 수 없습니다.이 유형의 작업을 원하면 rewrite Checkout CartController.php를 입력해야 하며이 클래스에서 magento는 load the product object by id 전에 going to cart이므로 load product by sku on이 위치가 필요합니다.

1 단계 : rewrite cartController.php 및 코드는 XML 재 작성 를위한 것입니다.

   <frontend>
        <routers>
            <checkout>
                <args>
                    <modules>
                        <customcart before="Mage_Checkout">YourNameSpace_YourMOdule</customcart>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>  
.

step2 : 및 확장 된 Cartcontorller _initProduct 기능에 SKU 제품로드 제품이 필요합니다.

     protected function _initProduct()
  {
    $sku=$this->getRequest()->setParam('sku');
    $_catalog = Mage::getModel('catalog/product');
    $idBySku = $_catalog->getIdBySku($sku);

    if ($idBySku) { 
        $productId = $idBySku;
    $this->getRequest()->setParam('product', $productId );
    }else{
    $productId = (int) $this->getRequest()->getParam('product');
    }
    if ($productId) {
        $product = Mage::getModel('catalog/product')
        ->setStoreId(Mage::app()->getStore()->getId())
        ->load($productId);
        if ($product->getId()) {
        return $product;
        }
    }

        return false;
    }
.

제어기를 다시 작성하는 방법 : http : //www.amitbera.com/how-to-verride-a-controller-in-magento/

다른 팁

내 함수 _initProduct () : pastebin.com/873rbmym

protected function _initProduct()
{
    $sku = $this->getRequest()->getParam('sku'); 
    $productId = (int) $this->getRequest()->getParam('product');

    if($sku){
        $params = $this->getRequest()->getParams();
        $productId = Mage::helper('checkout/cart')->getProductIdByParams($params, false);
        if(! $productId){
            return false;
        }
    }

    if ($productId) {
        $product = Mage::getModel('catalog/product')
            ->setStoreId(Mage::app()->getStore()->getId())
            ->load($productId);
        if ($product->getId()) {
            return $product;
        }
    }
    return false;
}
.

MY CONFIG.XML : pastebin.com/ks85etyq

<?xml version="1.0" ?><config>
<frontend>
    <routers>
        <checkout>
            <args>
                <modules>
                    <abc_checkout before="Mage_Checkout">ABC_Checkout</abc_checkout>
                </modules>
            </args>
        </checkout>
    </routers>
</frontend><global><helpers>
    <checkout>
        <rewrite>
            <cart>ABC_Checkout_Helper_Cart</cart>
        </rewrite>
    </checkout>
</helpers></global></config>
.

My Helper : App \ Code \ Local \ ABC \ Checkout \ Helper \ Cart.php : pastebin.com/rzgskjdr

<?php class ABC_Checkout_Helper_Cart extends Mage_Checkout_Helper_Cart{
public function getProductIdByParams($param, $outputFlag = true){
    $sku = trim($param['sku']);
    $_product = Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())
                                                 ->loadByAttribute('sku', $sku);

    if($_product){
        $productTypeId = $_product->getTypeId();
        $productId = $_product->getId();
        if($productTypeId == 'simple'){
            $result = $outputFlag ? true : $productId;
        }
        elseif($productTypeId == 'configurable'){
            $color = trim($param['color']);
            $size = trim($param['size']);
            $config = trim($param['option']);

            $configurableProduct = Mage::getModel('catalog/product_type_configurable')->setProduct($_product);
            $simpleCollections = $configurableProduct->getUsedProductCollection()
                                                     ->addAttributeToSelect('id');
            if(! empty($color)){
                $attrColor = $_product->getResource()->getAttribute("sp_color");
                $colorId = $attrColor->usesSource() ? $attrColor->getSource()->getOptionId($color) : '';
                $simpleCollections->addAttributeToFilter('sp_color', $colorId);
            }
            if(! empty($size)){
                $attrSize = $_product->getResource()->getAttribute("sp_size");
                $sizeId = $attrSize->usesSource() ? $attrSize->getSource()->getOptionId($size) : '';
                $simpleCollections->addAttributeToFilter('sp_size', $sizeId);
            }
            if(! empty($config)){
                $attrConfig = $_product->getResource()->getAttribute("sp_config");
                $configId = $attrConfig->usesSource() ? $attrConfig->getSource()->getOptionId($config) : '';
                $simpleCollections->addAttributeToFilter('sp_config', $configId);
            }
            $simpleCollections->addFilterByRequiredOptions();                                         

            if($simpleCollections->count() == 1){
                $productId = $simpleCollections->getFirstItem()->getId();
                $result = $outputFlag ? true : $productId;
            }
            else{
                $result = false;
            }

        }
        return $result;
    }
    return false;
}}
.

SKU는 다음과 같이 URL QueryString을 통해 추가 할 수 있습니다.

단순 제품

Parameter:<br/>
~ sku<br/>
~ qty<br/>
.

a.QTY= 1이있는 제품 추가

domain/id/index.php/checkout/cart/add/sku/ABCD<br/>
or<br/>
domain/id/index.php/checkout/cart/add?sku=ABCD
.

b.수량으로 제품을 추가하십시오.

domain/id/index.php/checkout/cart/add/sku/ABCD/qty/3<br/>
or<br/>
domain/id/index.php/checkout/cart/add?sku=ABCD&qty=3<br/>

CONFIGURABLE PRODUCT<br/>
Parameter:<br/>
~ sku<br/>
~ color<br/>
~ size<br/>
~ option (ex: used by XYZ)<br/>
~ qty<br/>
~ __store (id or en)<br/>
.

a.QTY= 1이있는 제품 추가

domain/id/index.php/checkout/cart/add/sku/XYZ/color/merah tua/size/M/__store/id<br/>
domain/id/index.php/checkout/cart/add/sku/XYZ/color/maroon/size/M/__store/en<br/>
domain/id/index.php/checkout/cart/add/sku/XYZ/option/bilqis/__store/id<br/>
or<br/>
domain/id/index.php/checkout/cart/add?sku=XYZ&color=merah tua&size=M&__store=id<br/>
domain/id/index.php/checkout/cart/add?sku=XYZ&color=maroon&size=M&__store=en<br/>
domain/id/index.php/checkout/cart/add?sku=XYZ&option=bilqis&__store=id<br/>
.

b.수량으로 제품을 추가하십시오.

domain/id/index.php/checkout/cart/add/sku/XYZ/color/merah tua/size/M/qty/3/__store/id<br/>
domain/id/index.php/checkout/cart/add/sku/XYZ/color/maroon/size/M/qty/3/__store/en<br/>
domain/id/index.php/checkout/cart/add/sku/XYZ/option/bilqis/qty/3/__store/id<br/>
or<br/>
domain/id/index.php/checkout/cart/add?sku=XYZ&color=merah tua&size=M&qty=3&__store=id<br/>
domain/id/index.php/checkout/cart/add?sku=XYZ&color=maroon&size=M&qty=3&__store=en<br/>
domain/id/index.php/checkout/cart/add?sku=XYZ&option=bilqis&qty=3&__store=id
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top