Introducción
Queremos montar una tienda online con las características comunes y, en la parte de la logística y el shipping, queremos que Drupal Commerce nos calcule el peso de los productos y, según el peso, nos aplique un precio de envío distinto.
Me basaré en la siguiente matriz:
De tal manera, si nos compran algo que pesa 1 kilo, el precio del envío ha de ser 6,91 EUR pero si el peso son 8 kilos el precio ha de ser 11,18 EUR.
Voy a ser lo más escueto posible, porque para literatura podéis ir a la web de mi libro y comprarlo por 0,99 EUR ;-) (spam encubierto, por si no lo habías notado.)
Manos a la obra:
Para empezar, instalaremos el módulo Commerce Shipping Weight Tariff y lo activamos.
Ahora, para crear la matriz de precios de shipping dependiendo del peso, lo haremos de una forma peculiar - tal como el módulo Commerce Shipping Weight Tariff que acabamos de instalar, nos pide, y es creando nuevos productos desde /admin/commerce/products/add y veremos un nuevo tipo de producto llamado: Create Shipping tariff.
Crearemos las distintas variables (en libras, en kilos o en la unidad de peso que queramos).
Una vez finalizado esto, añadimos el campo "peso" (llámale como quieras" al tipo de contenido producto, y te tocará a partir de ahora decirle el peso exacto a todos tus productos.
A continuación - ya casi acabamos - necesitamos crear un servicio para el tipo de shipping por peso, y eso lo haremos editando el fichero commerce_shipping_weight_tariff.commerce.inc y añadiendo en la función function commerce_shipping_weight_tariff_commerce_shipping_service_info() lo siguiente:
$shipping_services = array();
$shipping_services['mi_servicio_shipping_por_peso'] = array( //arbitrary name w/ 'service' in there
'title' => t('Precio del envio basado en el peso'), //titulo de la interfaz en "shipping" + "shipping services"
'description' => t('Precios de envio variables dependiendo del peso'),
'display_title' => t('Envio de la web XZY'),
'shipping_method' => 'weight_tariff_shipping', //comes from the tariff module...
'price_component' => 'shipping', //from commerce_shipping
'callbacks' => array(
'rate' => 'commerce_shipping_weight_tariff_service_rate',), //rate callback comes from tariff module
);
return $shipping_services;
Y finalmente, editamos el módulo commerce_shipping_weight_tariff.module y le tenemos que especificar la constante del campo peso que hayamos creado en el tipo de contenido producto:
/**
* The physical weight field on ordinary products.
*/
/* define('COMMERCE_SHIPPING_WEIGHT_TARIFF_PRODUCT_WEIGHT_FIELD', 'field_p_weight'); */
define('COMMERCE_SHIPPING_WEIGHT_TARIFF_PRODUCT_WEIGHT_FIELD', 'field_peso');
A modo informativo y para que nos aseguremos de que lo hemos hecho correctamente, en la página /admin/commerce/config/shipping/methods/weight-tariff-shipping/matrix veremos la matriz que configuremos:
¡Funciona de categoría! Ahora puedes hacer unas pruebas comprando y creando pedidos... y a la hora de cumplimentar el formulario y ver el precio del envío verás que cambia perfectamente según la matriz de precios y pesos que le has configurado.
Relacionado:
Creando distintos métodos de pago y tarificaciones en Drupal Commerce
http://joancatala.net/categoria-drupal-i-php/creando-distintos-metodos-…
Configurando los decimales en los precios de los productos en Drupal Commerce
http://joancatala.net/categoria-drupal-i-php/configurando-los-decimales…
Creando una vista que muestra los últimos productos en Drupal Commerce
http://joancatala.net/categoria-drupal-i-php/actualizado-creando-una-vi…
Espero que te haya gustado, que te sirva y que si tienes otras experiencias, las compartas en tu blog.
El Software Libre no existiría si quienes lo usamos y desarrollamos no compartimos nuestros truquitos y avances. Por un mundo mejor, comparte tu conocimiento ;-)