Question

Je veux afficher un petit utilitaire comme shipping calculator sur la page d'affichage du produit.

nous savons que magento natif fournit cette section sur la page du panier.

Comment puis-je l'implémenter sur la page d'affichage du produit ?

J'ai un petit formulaire contenant des champs tels que Country Dropdown et Zip Code.enter image description here

Quand quelqu'un clique sur Calculate le devis d'expédition doit alors être affiché en utilisant Ajax.

Je suis resté ici, jolie.S'il vous plaît aidez-moi.

J'ai créé controller & calculateAction() méthode.Quel code puis-je écrire là-dedans calculateaction() fonction ?

Était-ce utile?

La solution

Veuillez ajouter le code ci-dessous dans le fichier .phtml sous votre formulaire de calcul d'expédition pour l'appel 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>

Vous devez maintenant créer une action de contrôleur pour gérer la requête ajax.Veuillez vous référer à l'extrait de code ci-dessous pour cela.

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);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top