إضافة منتج إلى سلة التسوق عبر Querystring باستخدام SKU

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

  •  12-12-2019
  •  | 
  •  

سؤال

أعلم أننا نستطيع ذلك إضافة منتج إلى سلة التسوق عبر سلسلة الاستعلام.
ولكن كيف يمكننا إضافة SKU إلى سلة التسوق عبر سلسلة الاستعلام في عنوان URL دون تضمينها معرف المنتجمثله :

domain/checkout/cart/add?sku=ABC
أو
domain/checkout/cart/add/sku=BC

هل كانت مفيدة؟

المحلول

أندي إيراوان، لا يمكنك القيام بهذا النوع من العمل checkout Cart controllers.إذا كنت تريد هذا النوع من العمل فأنت بحاجة إلى ذلك rewrite Checkout CartController.php وعلى هذه الفئة الماجنتو هو load the product object by id قبل going to cart،لذا عليك load product by sku on هذا المكان .

الخطوة 1:أعد كتابة cartController.php والكود مخصص لإعادة كتابة XML

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

الخطوة 2: وعلى الخاص الموسعة 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-override-a-controller-in-magento/

نصائح أخرى

وظيفتي _initProduct() :Pastebin.com/873rBFYm

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;
}

ملف التكوين الخاص بي: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>

مساعدتي :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 مثل هذا:

منتج بسيط

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

أ.أضف المنتج بالكمية = 1

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

ب.أضف منتجًا بكمية أكبر من 1

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/>

أ.أضف المنتج بالكمية = 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/>

ب.أضف منتجًا بكمية أكبر من 1

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