إضافة منتج إلى سلة التسوق عبر Querystring باستخدام SKU
سؤال
أعلم أننا نستطيع ذلك إضافة منتج إلى سلة التسوق عبر سلسلة الاستعلام.
ولكن كيف يمكننا إضافة 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