PaulaF Posted May 29, 2017 Share Posted May 29, 2017 (edited) Hola buenas tardes. Me llamo Paula y desde hace casi un año estoy administrando la web https://www.electronicamente.com/ es la versión 1.6 y tema leo_moonsun. Antes teníamos una tarifa plana para los envíos de 5.90€. Pero recientemente hemos añadido dos opciones: --> 3.50€: Para algunas categorías especificas y cuya compra sea menor de 30€. Solo para la península y baleares. --> Envío gratuito : Para 20 productos específicos, pero con la condición de que si hay un producto de envío gratuito en el carrito de compra, el resto de artículos añadidos deben ser también gratuitos. Solo para península y baleares. No puedo incluir los transportes a cada articulo, porque no cumpliría la condición que se me solicita para envió gratuito. A excepción del precio y zona no hay nada más que pueda usar de las opciones del transporte. En prioridades de producto tengo que el envío de 5.90€ sea la prioridad, al menos hasta que lo haya solucionado. Para que se pudiera implementar de forma inmediata, lo que hice fue modificar el order-carrier.tpl, para que solo salgan las opciones de envío según unas condiciones. No puede ser más que una solución temporal. Di por hecho que a estas alturas lo tendría solucionado. Pensé que la solución es un override de Carrier.php de la función getCarriersForOrder() Elimine esta condición: if ($shipping_method != Carrier::SHIPPING_METHOD_FREE){} Y añadí este código: //especificaciones unicas para el transporte gratuito if ($row['id_carrier'] == 39 || $row['id_carrier'] == 42 || $row['id_carrier'] == 43 || $row['id_carrier'] == 46) { $products = $cart->getProducts(); foreach ($products as $product) { $r = $product['reference']; if ($r == 'H000186' || $r == 'C000138' || $r == 'C000077' || $r == 'C000084' || $r == 'C000238' || $r == 'C000250' || $r == 'c000251' || $r == 'C000234' || $r == 'C000235' || $r == 'C000257' || $r == 'c000258' || $r == 'XPRO64/4W' || $r == 'XPRO64/4B' || $r == 'B000151' || $r == 'B000150' || $r == 'B000147' || $r == 'B000146' || $r == 'B000174' || $r == 'VXM401' || $r == 'VXM400') { /*envio gratis para todos*/ print_r(' envio gratis para todos'); } else{ print_r('Nada de envío gratis'); unset($result[$k]); continue; } } } El problema viene cuando me sale por pantalla que he entrado al else 'nada de envío gratis', pero el transportista es el gratuito. Y tengo listo para implementar, que no lo implementare hasta que haya solucionado primero los gratuitos, el siguiente añadido: //especificaciones unicas para el transporte Paquete 72 horas if ($row['id_carrier']==36 || $row['id_carrier']==38 || $row['id_carrier']==40 || $row['id_carrier']==44 || $row['id_carrier']==48 || $row['id_carrier']==49) { $products = $cart->getProducts(); foreach ($products as $product){ $id=$product['id_product']; print_r('id_product'); print_r($id); $idResultado=Db::getInstance()->getValue(' select id_product from ps_product where price*1.21<30 and (id_category_default = 1099 or id_category_default = 1100 or id_category_default = 1101 or id_category_default = 1102 or id_category_default = 1103 or id_category_default = 1108 or id_category_default = 1109 or id_category_default = 1111 or id_category_default = 1028 or id_category_default = 925 or id_category_default = 141 or id_category_default = 932 or id_category_default = 98 or id_category_default = 124 or id_category_default = 171 or id_category_default = 275 or id_category_default = 122 or id_category_default = 946 or id_category_default = 272 or id_category_default = 1043 or id_category_default = 142 or id_category_default = 1022 or id_category_default = 970 or id_category_default = 86 or id_category_default = 89 or id_category_default = 93 or id_category_default = 184 or id_category_default = 892 or id_category_default = 959 or id_category_default = 81 or id_category_default = 82 or id_category_default = 99 or id_category_default = 100 or id_category_default = 186 or id_category_default = 187 or id_category_default = 188 or id_category_default = 190 or id_category_default = 191 or id_category_default = 194 or id_category_default = 195 or id_category_default = 954 or id_category_default = 965 or id_category_default = 1076 or id_category_default = 87) and id_product='.$id.';'); print_r('resultado'); print_r($idResultado); if(empty($idResultado)){ print_r('Si la consulta da un resultado vacío destruye los resultados'); unset($result[$k]); continue; } } } Estos cambios los estoy probando en una versión no publica que tengo para pruebas de la web. Donde tengo la misma configuración mencionada a excepción del .tpl, que esta sin modificar, y de las prioridades que están en orden del más barato primero. Os paso captura del problema y el override en archivos adjuntos. Esta es la primera vez que añado un tema al foro. Gracias por vuestra ayuda. Paula Carrier.zip Edited May 30, 2017 by PaulaF (see edit history) Link to comment Share on other sites More sharing options...
PaulaF Posted May 30, 2017 Author Share Posted May 30, 2017 (edited) Me auto contesto Conseguí que el código funcionará a un 50%, unas veces sí, otras no. Al no encontrar la variable que hace que a veces funcione, y a veces no. Descarte el código. Lo que hice fue poner los transportistas producto por producto y un vale descuento con acción envío gratuito y en las condiciones añadir una nueva regla de grupo al que añadí los productos. De esa manera lo que hace que el transportista de 5.90 lo pone como gratuito. No es que seleccione el transporte gratuito pero nos valdrá igual. Si no funciona a la primera debes ponerle un código al azar, guardar y luego eliminar el código y volver a guardar. Así os funcionara según la condición y sin necesidad de que el cliente deba poner un código. Os adjunto captura de pantalla. He aprendido mucho sobre la configuración de transportistas y vales descuento por aquí, así que igualmente es como si el foro me hubiera ayudado. Pero especial agradecimiento a mi compañero Dani que fue el que me dio la idea de los vales. Saludos Paula Edited May 30, 2017 by PaulaF (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts