SKU를 사용하여 QueryString을 통해 카트에 제품 추가
문제
우리가 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
.