Как добавить стоимость доставки, найдя самый большой размер с PHP?
На данный момент добавляю стоимость доставки 65Kr.
В магазине всего четыре цены.
Мне нужно изменить стоимость доставки следующим образом.
Продукту, который стоит 198Kr и 268Kr, нужно 25Kr, а для более высокой цены (418 и 498Kr) нужно 65Kr.
Если покупатель покупает 198Kr и 418kr, ему нужно заплатить 65Kr. Это означает, что если есть одна вещь, которая нуждается в 65Kr, то доставка будет 65Kr.
Если покупатель покупает 198Kr и 268Kr, ему нужно заплатить 25Kr.
Я не уверен, как добавить эту доставку к общей стоимости.
Я использую следующий код для обновления общей цены.
И я добавляю 65Kr на кассе.
function updateCart($productid,$fullproduct){
$cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : array();
$productid = id_clean($productid);
$totalprice = 0;
if (count($fullproduct)){
if (isset($cart[$productid])){
$prevct = $cart[$productid]['count'];
$prevname = $cart[$productid]['name'];
$prevprice = $cart[$productid]['price'];
$cart[$productid] = array(
'name' => $prevname,
'price' => $prevprice,
'count' => $prevct + 1
);
}else{
$cart[$productid] = array(
'name' => $fullproduct['name'],
'price' => $fullproduct['price'],
'count' => 1
);
}
foreach ($cart as $id => $product){
$totalprice += $product['price'] * $product['count'];
}
$_SESSION['totalprice'] = $totalprice;
$_SESSION['cart'] = $cart;
$msg = $this->lang->line('orders_added_cart');
$this->session->set_flashdata('conf_msg', $msg);
}
}
на кассе
...
$shipping= 65;
$grandtotal = (int)$totalprice + $shipping;
...
Как видите, я могу использовать сессию, чтобы отслеживать размер или цену. Поэтому я думаю, что могу использовать их, чтобы найти окончательную цену доставки.
Я буду признателен за любые руки помощи.
Заранее спасибо.
2 ответа
В вашей итерации корзины, которая вычисляет общую стоимость
foreach ($cart as $id => $product){
$totalprice += $product['price'] * $product['count'];
}
также рассчитайте стоимость доставки и поместите ее в сеанс.
$shippingprice = 25.0;
foreach ($cart as $id => $product){
$totalprice += $product['price'] * $product['count'];
if ( $product['price'] > 268 ){
$shippingprice = 65.0;
}
}
Я бы использовал что-то вроде:
function updateCart($productid,$fullproduct)
{
$cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : array();
$productid = id_clean($productid);
$totalprice = 0;
if (count($fullproduct))
{
if (isset($cart[$productid]))
{
$prevct = $cart[$productid]['count'];
$prevname = $cart[$productid]['name'];
$prevprice = $cart[$productid]['price'];
$cart[$productid] = array(
'name' => $prevname,
'price' => $prevprice,
'count' => $prevct + 1
);
}
else
{
$cart[$productid] = array(
'name' => $fullproduct['name'],
'price' => $fullproduct['price'],
'shipping' => $fullproduct['shipping']
'count' => 1
);
}
$shipping = 0;
foreach ($cart as $id => $product)
{
$shipping = $shipping < $product['shipping'] ? $product['shipping'] : $shipping;
$totalprice += $product['price'] * $product['count'];
}
$_SESSION['totalprice'] = $totalprice;
$_SESSION['cart'] = $cart;
$_SESSION['shipping'] = $shipping;
$msg = $this->lang->line('orders_added_cart');
$this->session->set_flashdata('conf_msg', $msg);
}
}
Таким образом, вы можете иметь любую стоимость доставки, и вы будете взимать только более высокую цену.
Однако при этом учитывается только стоимость доставки одного товара. Я бы тоже принял во внимание количество или предметы. Потому что стоимость доставки меняется при отгрузке одного товара и при отгрузке сто.