كيفية الحصول على عرض أسعار الشحن على صفحة عرض المنتج؟
-
13-12-2019 - |
سؤال
أريد عرض فائدة صغيرة مثل shipping calculator
في صفحة عرض المنتج.
نحن نعلم أن الماجنتو الأصلي يوفر هذا القسم في صفحة سلة التسوق.
كيف يمكنني تنفيذ ذلك على صفحة عرض المنتج؟
لدي نموذج صغير لحقول المحتوى مثل قائمة البلد المنسدلة والرمز البريدي.
عندما ينقر شخص ما على Calculate
ثم يجب أن يتم عرض عرض أسعار الشحن باستخدام Ajax.
لقد علقت هنا جميلة.الرجاء مساعدتي.
لقد خلقت controller
& calculateAction()
طريقة.ما هو الكود الذي يمكنني كتابته في ذلك calculateaction()
وظيفة ؟
المحلول
يرجى إضافة الكود أدناه في ملف .phtml ضمن نموذج حاسبة الشحن الخاص بك لإجراء مكالمة ajax.
<script type="text/javascript">
//<![CDATA[
var coShippingEstimateForm = new VarienForm('your_form_id',true);
//]]>
function getEstimateShipping(){
if (coShippingEstimateForm.validator.validate()) {
new Ajax.Updater(
{ success:'result_container_id' }, "<?php echo $this->getUrl('your_route_name/your_controller/calculate') ?>", {
method:'post',
asynchronous:true,
evalScripts:false,
onSuccess:function(transport) {
var shiphtml = transport.responseText;
if(shiphtml != "" && shiphtml != null){
$('result_container_id').insert(shiphtml).show();
}else{
alert("No shipping method available");
}
$('submit').disabled = false;
},
onLoading:function(request, json){
$('submit').disabled = true;
},
parameters:jQuery('form').serialize(true)
}
);
}
}
</script>
أنت الآن بحاجة إلى إنشاء إجراء وحدة تحكم للتعامل مع طلب ajax.يرجى الرجوع إلى مقتطف الكود أدناه لذلك.
public function calculateAction()
{
$country = (string) $this->getRequest()->getParam('country_id');
$postcode = (string) $this->getRequest()->getParam('estimate_postcode');
$qty = intval($this->getRequest()->getParam('qty'));
if($qty == 0 || $qty == null){
$qty = 1;
}
$currentProductId = $this->getRequest()->getPost('currunt_product');
$quote = Mage::getModel('sales/quote')->setStoreId(Mage::app()->getStore('default')->getId());
$_product = Mage::getModel('catalog/product')->load($currentProductId);
$params = $this->getRequest()->getParams();
$reqOb = new Varien_Object($params);
$_product->getStockItem()->setUseConfigManageStock(false);
$_product->getStockItem()->setManageStock(false);
$quote->addProduct($_product, $reqOb);
$quote->getShippingAddress()->setCountryId($country)->setPostcode($postcode);
$quote->getShippingAddress()->collectTotals();
$quote->getShippingAddress()->setCollectShippingRates(true);
$quote->getShippingAddress()->collectShippingRates();
$groups = $quote->getShippingAddress()->getGroupedAllShippingRates();
$shippingRates = array();
$shippingHtml = "";
$shippingBlock = new Mage_Checkout_Block_Cart_Shipping();
foreach($groups as $code=>$_rates){
$shippingHtml .= "<dt>" . $shippingBlock->getCarrierName($code) . "</dt><dd><ul>";
foreach ($_rates as $_rate) {
//if($_rate->getPrice() > 0) {
$shippingHtml .= "<li><label>";
$shippingHtml .= $_rate->getMethodTitle();
$shippingHtml .= " - ";
$shippingHtml .= Mage::helper('core')->currency($_rate->getPrice(), true, false);
$shippingHtml .= "</label></li>";
}
$shippingHtml .= "</ul></dd>";
}
$this->getResponse()->setBody($shippingHtml);
}
لا تنتمي إلى magento.stackexchange