pbt Posted April 28, 2013 Share Posted April 28, 2013 (edited) Hola. Me gustaría que en el carrito, debajo del total, saliera la cantidad total ahorrada en los productos con descuento. ¿Alguien sabe si existe algún módulo o código para ello?. Lo he intentado con las variables del product.tpl pero no lo consigo. LO quiero mostrar en el carrito no en la página resumen del carrito. Saludos. Edited June 23, 2013 by pbt (see edit history) Link to comment Share on other sites More sharing options...
Enrique Gómez Posted April 29, 2013 Share Posted April 29, 2013 Si puedo le echaré un vistazo. El módulo del carrito es blockcart.php con su plantilla blockcart.tpl. Dentro de blockcart.php en assignContentVars() se meten las variables para la plantilla, como $totalToPay = $params['cart']->getOrderTotal($useTax); No se si en la clase Cart.php con getCartRules se pueden obtener los descuentos. Link to comment Share on other sites More sharing options...
Enrique Gómez Posted May 2, 2013 Share Posted May 2, 2013 (edited) Bueno, en blockcart.php en assignContentVars() podemos añadir la/s variables para la plantilla del carrito. Modificamos el bucle que recorre los productos para calcular la cantidad que se descuenta ($quant_discount) $quant_discount=0.0;//Añadido para que se vea el descuento total por cantidad. foreach ($products as $product){ $nbTotalProducts += (int)$product['cart_quantity']; if($product['quantity_discount_applies']){ $price_without_specific_price = Product::getPriceStatic($product['id_product'],!Product::getTaxCalculationMethod(),$product['id_product_attribute'],2, null,false,false,1,false,null,null,null,$null,true,true,null,true); $quant_discount += ((int)$product['cart_quantity']*$price_without_specific_price)-$product['total_wt']; } } Esta variable la añadimos $this->smarty->assign(array( 'products' => $products, 'customizedDatas' => Product::getAllCustomizedDatas((int)($params['cart']->id)), 'CUSTOMIZE_FILE' => _CUSTOMIZE_FILE_, 'CUSTOMIZE_TEXTFIELD' => _CUSTOMIZE_TEXTFIELD_, 'discounts' => $cart_rules, 'nb_total_products' => (int)($nbTotalProducts), 'shipping_cost' => $shipping_cost, 'shipping_cost_float' => $shipping_cost_float, 'show_wrapping' => $wrappingCost > 0 ? true : false, 'show_tax' => (int)(Configuration::get('PS_TAX_DISPLAY') == 1 && (int)Configuration::get('PS_TAX')), 'wrapping_cost' => Tools::displayPrice($wrappingCost, $currency), 'product_total' => Tools::displayPrice($params['cart']->getOrderTotal($useTax, Cart::BOTH_WITHOUT_SHIPPING), $currency), 'total' => Tools::displayPrice($totalToPay, $currency), 'order_process' => Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'order-opc' : 'order', 'ajax_allowed' => (int)(Configuration::get('PS_BLOCK_CART_AJAX')) == 1 ? true : false, 'static_token' => Tools::getToken(false), 'quant_discount' =>$quant_discount )); Luego en la plantilla blockcart.tpl despues de <p id="cart-prices"> añadimos un div {* Añadido para que se vea el descuento total por cantidad. *} <div id="div_cart_total_quant_discount" {if $quant_discount == 0} style="display: none;" {/if} > <span id="cart_block_total_quant_discount" class="price ajax_block_cart_total_quant_discount">{convertPrice price=$quant_discount}</span> <span>{l s='Total discount' mod='blockcart'}</span> </div> El css en global.css #div_cart_total_quant_discount{ color: darkred; font-weight: bold; margin-bottom: 10px; padding: 0 4px; } Falta el tema de ajax para el carrito Edited May 2, 2013 by egomezpe (see edit history) Link to comment Share on other sites More sharing options...
Feliz Garcia Posted May 2, 2013 Share Posted May 2, 2013 Bueno, en blockcart.php en assignContentVars() podemos añadir la/s variables para la plantilla del carrito. Modificamos el bucle que recorre los productos para calcular la cantidad que se descuenta ($quant_discount) $quant_discount=0.0;//Añadido para que se vea el descuento total por cantidad. foreach ($products as $product){ $nbTotalProducts += (int)$product['cart_quantity']; if($product['quantity_discount_applies']){ $price_without_specific_price = Product::getPriceStatic($product['id_product'],!Product::getTaxCalculationMethod(),$product['id_product_attribute'],2, null,false,false,1,false,null,null,null,$null,true,true,null,true); $quant_discount += ((int)$product['cart_quantity']*$price_without_specific_price)-$product['total_wt']; } } Esta variable la añadimos $this->smarty->assign(array( 'products' => $products, 'customizedDatas' => Product::getAllCustomizedDatas((int)($params['cart']->id)), 'CUSTOMIZE_FILE' => _CUSTOMIZE_FILE_, 'CUSTOMIZE_TEXTFIELD' => _CUSTOMIZE_TEXTFIELD_, 'discounts' => $cart_rules, 'nb_total_products' => (int)($nbTotalProducts), 'shipping_cost' => $shipping_cost, 'shipping_cost_float' => $shipping_cost_float, 'show_wrapping' => $wrappingCost > 0 ? true : false, 'show_tax' => (int)(Configuration::get('PS_TAX_DISPLAY') == 1 && (int)Configuration::get('PS_TAX')), 'wrapping_cost' => Tools::displayPrice($wrappingCost, $currency), 'product_total' => Tools::displayPrice($params['cart']->getOrderTotal($useTax, Cart::BOTH_WITHOUT_SHIPPING), $currency), 'total' => Tools::displayPrice($totalToPay, $currency), 'order_process' => Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'order-opc' : 'order', 'ajax_allowed' => (int)(Configuration::get('PS_BLOCK_CART_AJAX')) == 1 ? true : false, 'static_token' => Tools::getToken(false), 'quant_discount' =>$quant_discount )); Luego en la plantilla blockcart.tpl despues de <p id="cart-prices"> añadimos un div {* Añadido para que se vea el descuento total por cantidad. *} <div id="div_cart_total_quant_discount" {if $quant_discount == 0} style="display: none;" {/if} > <span id="cart_block_total_quant_discount" class="price ajax_block_cart_total_quant_discount">{convertPrice price=$quant_discount}</span> <span>{l s='Total discount' mod='blockcart'}</span> </div> El css en global.css #div_cart_total_quant_discount{ color: darkred; font-weight: bold; margin-bottom: 10px; padding: 0 4px; } Falta el tema de ajax para el carrito No me funciona, no me lo calcula bien, pero gracias. Link to comment Share on other sites More sharing options...
Enrique Gómez Posted May 2, 2013 Share Posted May 2, 2013 Para el tema de ajax del carrito la plantilla es blockcart-json.tpl. Después de "productTotal" añadimos "quantDiscountFloat": "{$quant_discount|html_entity_decode:2:'UTF-8'}",{* Añadido para que se vea el descuento total por cantidad. *} "quantDiscount": "{convertPrice price=$quant_discount|html_entity_decode:2:'UTF-8'}", Por último el fichero ajax-cart.js en el método updateCartEverywhere añadimos al principio //Añadido para que se vea el descuento total por cantidad. if (parseFloat(jsonData.quantDiscountFloat) > 0){ $('#div_cart_total_quant_discount').show(); $('.ajax_block_cart_total_quant_discount').text(jsonData.quantDiscount); }else{ $('#div_cart_total_quant_discount').hide(); } Link to comment Share on other sites More sharing options...
Feliz Garcia Posted May 2, 2013 Share Posted May 2, 2013 Para el tema de ajax del carrito la plantilla es blockcart-json.tpl. Después de "productTotal" añadimos "quantDiscountFloat": "{$quant_discount|html_entity_decode:2:'UTF-8'}",{* Añadido para que se vea el descuento total por cantidad. *} "quantDiscount": "{convertPrice price=$quant_discount|html_entity_decode:2:'UTF-8'}", Por último el fichero ajax-cart.js en el método updateCartEverywhere añadimos al principio //Añadido para que se vea el descuento total por cantidad. if (parseFloat(jsonData.quantDiscountFloat) > 0){ $('#div_cart_total_quant_discount').show(); $('.ajax_block_cart_total_quant_discount').text(jsonData.quantDiscount); }else{ $('#div_cart_total_quant_discount').hide(); } Me sigue sin funcionar, pero gracias. Link to comment Share on other sites More sharing options...
Enrique Gómez Posted May 2, 2013 Share Posted May 2, 2013 Las modificaciones las he probado directamente en los ficheros. Los ficheros css, js, y tpl se pueden sobrescribir en nuestro tema tal y como dice en la documentación oficial, pero, hasta donde yo se, no así el blockcart.php del módulo. Alguien sabe si se puede hacer un override del código de un módulo? Link to comment Share on other sites More sharing options...
pbt Posted June 21, 2013 Author Share Posted June 21, 2013 Muchas gracias, me funcionó a la primera. Link to comment Share on other sites More sharing options...
nadie Posted June 21, 2013 Share Posted June 21, 2013 me funcionó Estimado pbt, Si das el tema como solucionado, edita el titulo del tema, editando el primer mensaje, pulsando en editar, y después en "Usar editor completo", añadiendo la palabra "Solucionado" al titulo, esto ayudara, a mantener una mayor organización en el foro. Link to comment Share on other sites More sharing options...
Recommended Posts