Jump to content

¿Cómo poner gastos envío gratis a partir x€ sólo en algunas zonas?


Recommended Posts

He buscado por ahí y no me queda claro si es posible: he visto soluciones complejas, creando diferentes transportistas por zonas y dejando alguno gratis con la condición de zona y precio, etc, pero no sé si en las últimas versiones de Prestashop (o toqueteando algún archivejo) será posible hacerlo.

 

Lo que quiero es establecer transporte gratuito a partir de x€ de compra, pero sólo para la zona "Península", no para Baleares o Canarias (sería una ruina dejarlos gratis...). ¿Cómo podría hacerlo?

 

Gracias.

Link to comment
Share on other sites

Si tienes creadas las zonas que comentas es muy sencillo, en transportistas crea uno nuevo, le das su nombre y todo pasas a la siguiente pagina y seleccionas los datos que te interesen de la parte superior y en la inferior seleccionas por ejemplo la zona peninsula y en la primera columna por ejemplo pones de 0€ a 75€ y en la casilla de peninsula le pones el precio, ahora añades otro rango de 75€ a XXXXXXX€ y en la casilla peninsula le pones 0 y sigues adelante, con eso ese transportista es gratuito a partir de 75€ luego creas los otros transportistas de igual forma para el resto de zonas 

Link to comment
Share on other sites

Bueno, con algo de retraso, pero he probado lo que contaban en http://blog.belvg.com/zone-based-shipping-limitations-and-choices-in-prestashop.html, con muy poco éxito (como ya apuntaban en los comentarios a esa misma entrada).

 

El caso es que todo lo que proponen parece lógico... pero algo hay mal en los archivos que mete en el override (el carrier, el cart, o el controlador) que se carga la web. El problema no está en la base de datos (le meto los campos nuevos y todo va bien, sin problema, como era de esperar) sino en alguno de esos archivos.

 

Los he examinado en detalle y no veo nada raro, pero claro, mi experiencia en esto es cercana a cero. Os copio aquí los archivos en cuestión por si alguien encuentra algún posible error. Creo que es interesante, porque de funcionar, sería muy útil para mucha gente, creo yo.

 

Adjunto los archivos en cuestión y un resumen de los pasos a seguir, sacado del blog anterior.

 

Saludos y suerte, si alguien se anima a intentar hacerlo funcionar.

 

 

Carrier.php

Cart.php

INSTRUCCIONES.doc

AdminCarrierWizardController.php

Edited by JotaCe (see edit history)
Link to comment
Share on other sites

Que  errores te muestra al petar la web

 

Pues al intentar entrar en la web aparece este bonito rosario de texto en el navegador:

 

'carrier', 'primary' => 'id_carrier', 'multilang' => true, 'multilang_shop' => true, 'fields' => array( /* Override reason */ 'shipping_free_price' => array('type' => self:: TYPE_FLOAT, 'validate' => 'isFloat'), 'shipping_free_weight' => array('type' => self:: TYPE_FLOAT, 'validate' => 'isFloat'), /* Classic fields */ 'id_reference' => array('type' => self::TYPE_INT), 'name' => array('type' => self::TYPE_STRING, 'validate' => 'isCarrierName', 'required' => true, 'size' => 64), 'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'required' => true), 'is_free' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'url' => array('type' => self::TYPE_STRING, 'validate' => 'isAbsoluteUrl'), 'shipping_handling' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'shipping_external' => array('type' => self::TYPE_BOOL), 'range_behavior' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'shipping_method' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'max_width' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'max_height' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'max_depth' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'max_weight' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat'), 'grade' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'size' => 1), 'external_module_name' => array('type' => self::TYPE_STRING, 'size' => 64), 'is_module' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'need_range' => array('type' => self::TYPE_BOOL), 'position' => array('type' => self::TYPE_INT), 'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), /* Lang fields */ 'delay' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 128), ), ); } 'carrier', 'primary' => 'id_carrier', 'multilang' => true, 'multilang_shop' => true, 'fields' => array( /* Override reason */ 'shipping_free_price' => array('type' => self:: TYPE_FLOAT, 'validate' => 'isFloat'), 'shipping_free_weight' => array('type' => self:: TYPE_FLOAT, 'validate' => 'isFloat'), /* Classic fields */ 'id_reference' => array('type' => self::TYPE_INT), 'name' => array('type' => self::TYPE_STRING, 'validate' => 'isCarrierName', 'required' => true, 'size' => 64), 'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'required' => true), 'is_free' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'url' => array('type' => self::TYPE_STRING, 'validate' => 'isAbsoluteUrl'), 'shipping_handling' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'shipping_external' => array('type' => self::TYPE_BOOL), 'range_behavior' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'shipping_method' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'max_width' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'max_height' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'max_depth' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'max_weight' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat'), 'grade' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'size' => 1), 'external_module_name' => array('type' => self::TYPE_STRING, 'size' => 64), 'is_module' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'need_range' => array('type' => self::TYPE_BOOL), 'position' => array('type' => self::TYPE_INT), 'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), /* Lang fields */ 'delay' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 128), ), ); }

Link to comment
Share on other sites

Por cierto, un detalle del que no me había dado cuenta hasta ahora, por si sirviera de pista:

 

Aunque los 3 archivos que se meten en el override son .php, el explorador de archivos de mi servidor los identifica como php uno de ellos (el controlador), como txt otro (el cart.php) y como C++ el otro (el carrier.php). 

Link to comment
Share on other sites

Los subo utilizando el explorador de archivos de mi host, por comodidad. Podría hacerlo por ftp, no hay problema. Supongo que piensas que puedan sufrir alguna transformación rara, ¿no? Hasta ahora no me ha dado problemas subir otros así, pero bueno, probaré por ftp esta tarde (ahora no puedo).

 

Sobre la ruta, los pongo donde indican (lo que no sé es si esto es correcto o no): el cart.php y carrier.php dentro de la carpeta \override\classes. El AdminCarrierWizardController.php, dentro de \override\controllers. Directamente en esas carpetas, no en ninguna de las subcarpetas que hay en cada uno de ellos.

 

Una duda que me surge (porque no sé cómo funciona el php y el tema de los overrides, mis conocimientos técnicos son más bien limitados) es si están bien hechos los archivos. Me explico: los archivos que subo a “override” contienen sólo una pequeña parte del archivo original. Si el “override” funciona leyendo el archivo “base” y aplicándole después encima lo que lee del archivo del “override”, entonces ok. Pero si el override funciona saltándose el archivo “base” o original, y tomando directamente el situado en “override”, entonces es lógico que no funcione, porque este archivo sólo tiene una pequeña parte de la información del archivo completo. No sé si me explico…

 

Saludos.

Edited by JotaCe (see edit history)
Link to comment
Share on other sites

Los archivos override sobreescriben las funciones incluidas en los archivos originales editandolas o añadiendo nuevas funciones.

En cuanto a las rutas en muy importante seguirlas ya que imitan a las de la instalación de base, es decir el archivo

AdminCarrierWizardController.php

Tendría que estas en la ruta

override/controllers/admin

Si alguna carpeta no existe tendrás que crearla

Link to comment
Share on other sites

ok, gracias, entonces veo que las rutas están mal. Probaré a ver si es ése el problema.

 

Por terminar de entenderlo (por culturilla), ?entonces los archivos override sobreescriben SOLO lo que ellos contienen, manteniendo el resto? ¿Es decir, son complementarios al original, no sustitutos?

Link to comment
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...