كيفية الحصول على عرض أسعار الشحن على صفحة عرض المنتج؟

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

  •  13-12-2019
  •  | 
  •  

سؤال

أريد عرض فائدة صغيرة مثل shipping calculator في صفحة عرض المنتج.

نحن نعلم أن الماجنتو الأصلي يوفر هذا القسم في صفحة سلة التسوق.

كيف يمكنني تنفيذ ذلك على صفحة عرض المنتج؟

لدي نموذج صغير لحقول المحتوى مثل قائمة البلد المنسدلة والرمز البريدي.enter image description here

عندما ينقر شخص ما على 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);
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top