Distinto precio en el shipping dependiendo del peso del pedido de nuestra tienda online con Drupal Commerce

Hacker

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:

Shipping Commerce depending on weight - distinto precio dependiendo del peso

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:

Matriz Weight Tariff Commerce Drupal

¡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 ;-)

Doncs bé això és tot, espere que trobes útil aquest article i que et motive a compartir els teus trucs, els teus coneixements i els teus experiments amb el Programari Lliure. Pensa-ho, va, que la Comunitat del Programari Lliure va creixent gràcies a la documentació, el disseny, la formació o la programació, sigues part de la Comunitat :-)

La cultura i la lliure circulació de les idees és l'arma més efectiva contra les dictadures del pensament i contra la ignorància.