Pergunta

Quero exibir um utilitário pequeno como shipping calculator na página de visualização do produto.

sabemos que o magento nativo fornece esta seção na página do carrinho.

Como posso implementá-lo na página de visualização do produto?

Eu tenho um pequeno formulário com campos de conteúdo como lista suspensa de país e código postal.enter image description here

Quando alguém clica em Calculate então a cotação de envio deve ser exibida usando Ajax.

Eu fiquei aqui bonito.Por favor me ajude.

eu criei controller & calculateAction() método.Que código posso escrever nisso calculateaction() função?

Foi útil?

Solução

Adicione o código abaixo no arquivo .phtml no formulário da calculadora de frete para chamada 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>

Agora você precisa criar uma ação de controlador para lidar com a solicitação ajax.Consulte o trecho de código abaixo para isso.

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);
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top