Search code examples
cs-cart

How to add custom shipment CS-Cart


I need to add dynamic shipment option to the checkout page, the shipment's pricing, duration and name come from other API.

I tried these hook, none of these invoked during checkout.

    'get_available_shippings',
    'get_shipping_methods',
    'get_shipping_methods_post',
    'get_shipments_info_post'

tried to hook shipping_methods_list.pre.tpl

{assign var="s" value=$all_shippings[0][1]}
{$s["shipping_id"] = '2'}
{$all_shippings[0][2] = $s}

I'm using cs-cart 4.14


Solution

  • The right hook was shippings_get_shippings_list_post, since it's not adding to the database, it seems you need to hook orders:shipping_info on the backend for further customization.

    function fn_example_addons_shippings_get_shippings_list_post(&$group, &$lang, &$area, &$shippings_info)
    {
        $package_info = $group['package_info'];
        $fromZipcode = $package_info['origination']['zipcode'];
        $toZipcode = $package_info['location']['zipcode'];
        $weight = (int)round(ceil($package_info["W"]));
        $item_price = (int)round(ceil($package_info["C"]));
        $shipments = fn_example_addons_getRates($fromZipcode, $toZipcode, $weight, $item_price);
        foreach ($shipments as $key => $shipment) {
            $shippings_info[$key] = $shipment;
        }
    }
    

    for the shipments

                $shipments["SHIPMENT_ID"] = array(
                    "shipping_id" => "SHIPMENT_ID",
                    "shipping" => "Example Shipment"
                    "delivery_time" => "2-3 days",
                    "description" => "",
                    "rate_calculation" => "M",
                    "service_params" => array(),
                    "destination" => "I",
                    "min_weight" => "0.0",
                    "max_weight" => "0.0",
                    "service_id" => "0",
                    "free_shipping" => "N",
                    "module" => null,
                    "service_code" => null,
                    "is_address_required" => "Y",
                    "rate_info" => array(
                        "rate_id" => "0",
                        "shipping_id" => "0",
                        "rate_value" => array(
                            "C" => array(
                                array(
                                    "range_from_value" => 0,
                                    "range_to_value" => "",
                                    "value" => $price_in_point
                                )
                            )
                        ),
                        "destination_id" => "1",
                        "base_rate" => "0.0"
                    ),
                    "disable_payments_ids" => array()
                );