Интернет магазину часто необходимо указывать свою стоимость доставки/самовывоза, например для крупногабаритного груза, но стандартный функционал не позволяет это реализовать.
Для внедрения этого функционала необходимо в базе данных содать нужные поля - стоимость доставки(deleviry_cost) и стоимость самовывоза(pickup_cost).
Необходимо внести изменения в шаблон корзины One Step Checkout, файл:
components/com_jshopping/templates/addons/onestepcheckout/default/checkout.php
В нашем случае самовывоз это shipping_id=1, все остальное это доставка(транспортной компанией, до квартиры и тд), необходимо внести изменения в блок с выводом стоимости, элемент <td class="name SHIPPING_PRICE">:
$totalpickup_cost=0;$delivery=0;//обнуляем общую стоимость до цикла вывода товаров в карточке foreach ($this->products as $key_id=>$prod)
{
if ($shipngid==1)
{
$db->setquery("select pickup_cost from #__jshopping_products where product_id='".$prod['product_id']."'");$pickup_cost=$db->loadresult();
if (trim($pickup_cost)=='') $pickup_cost='0';
$totalpickup_cost=$totalpickup_cost+($pickup_cost*$prod['quantity']);
}
if ($shipngid!=1)
{
$db->setquery("select yan_pickup_cost from #__jshopping_products where product_id='".$prod['product_id']."'");$delivery_cost=$db->loadresult();
if (trim($delivery_cost)=='') $delivery_cost='0';
$price=$price+($delivery_cost*1);
$delivery=$delivery+($delivery_cost*$prod['quantity']);
}
if ($shipngid!=1) $this->summ_delivery=$delivery;
if ($shipngid==1) $this->summ_delivery=$totalpickup_cost;
if (isset($this->summ_delivery) and $this->summ_delivery>0)
{ ?>
<tr>
<td class="name SHIPPING_PRICE">
<?php if ($is_shiping) echo JText::_('JSHOP_ONESTEPCHECKOUT_SHIPPING_PRICE'); else echo 'Стоимость самовывоза' ?>
<input type="hidden" id="formula" value="shipngid: <?php echo $shipngid?> qunt: <?php echo $qunt?> first: <?php echo $first?> second: <?php echo $second?> delcost: <?php echo $price?>">
</td>
<td class="value SHIPPING_PRICE">
<?php
echo formatprice($this->summ_delivery) ?>
<?php echo $this->_tmp_ext_shipping?>
<input type="hidden" id="pagequant" value="<?php echo $qunt?>">
<input type="hidden" id="delprice" value="<?php echo getRoundPriceProduct(floatval($price+$quntprice))?>">
</td>
</tr>
<tr style="display:none;">
<td class="name mkad">Выезд за МКАД: расстояние 1км/40руб</td>
<td class="value SHIPPING_PRICE" id="mkadtd">40 руб.</td>
</tr>
<?php } ?>
Но это только шаблон корзины, также необходимо включить стоимость доставки при создании заказа, необходимо файле после создания заказа $order->saveOrderItem($cart->products) добавить код пересчета стоимости:
components/com_jshopping/models/checkoutorder.php
$order->saveOrderItem($cart->products);
if ($order->shipping_method_id!='1')//доставка
{
$db->setquery("select sum(delivery_cost) from #__jshopping_products where product_id in (select product_id from #__jshopping_order_item where order_id='".$order->order_id."') ");$shipselfsumm=$db->loadresult();
$db->setquery("update `#__jshopping_orders` set order_shipping='".$shipselfsumm."' WHERE order_id='".$order->order_id."' ");$db->execute();
$db->setquery("update `#__jshopping_orders` set order_total=(order_shipping+order_subtotal+order_payment+order_package-order_discount) WHERE order_id='".$order->order_id."' ");$db->execute();
}
if ($order->shipping_method_id=='1')//самовывоз
{
$db->setquery("select sum(pickup_cost) from #__jshopping_products where product_id in (select product_id from #__jshopping_order_item where order_id='".$order->order_id."') ");$shipselfsumm=$db->loadresult();
$db->setquery("update `#__jshopping_orders` set order_shipping='".$shipselfsumm."' WHERE order_id='".$order->order_id."' ");$db->execute();
$db->setquery("update `#__jshopping_orders` set order_total=(order_shipping+order_subtotal+order_payment+order_package-order_discount) WHERE order_id='".$order->order_id."' ");$db->execute();
}
Для изменения подписи "стоимость доставки" на "стоимость самовывоза" в шаблоне письма для покупателя, необходимо редактировать файл:
components/com_jshopping/templates/sitecorp/checkout/ordermail.php
<?php if (!$this->config->without_shipping){?>
<tr>
<td colspan="4" align="right" style="padding-right:15px;" ><?php if ($order->shipping_method_id==1) echo 'Стоимость самовывоза '; else print _JSHOP_SHIPPING_PRICE ?>:</td>
<td class="price"><?php print formatprice($this->order->order_shipping, $order->currency_code); ?><?php print $this->_tmp_ext_shipping?></td>
</tr>
<?php } ?>
Осталось добавить новую подпись в PDF файл, редактируем файл:
components/com_jshopping/lib/generate_pdf_order.php
if (!$jshopConfig->without_shipping){
$pdf->SetXY(20,$y + 5);
$pdf->Rect(20,$y + 5,170,5,'F');
if ($order->shipping_method_id=='1') $shiptxt='Стоимость самовывоза' ;else $shiptxt=_JSHOP_SHIPPING_PRICE;
$pdf->MultiCell(130,5,$shiptxt,'1','R');
$pdf->SetXY(150,$y + 5);
$pdf->MultiCell(40,5, formatprice($order->order_shipping, $order->currency_code),'1','R');
if ($order->order_package>0 || $jshopConfig->display_null_package_price){
$y=$y+5;
$pdf->SetXY(20,$y + 5);
$pdf->Rect(20,$y + 5,170,5,'F');
$pdf->MultiCell(130,5,'Выезд за МКАД: расстояние 1км/40руб','1','R');
$pdf->SetXY(150,$y + 5);
$pdf->MultiCell(40,5, formatprice($order->order_package, $order->currency_code),'1','R');
}
}else{$y = $y - 5;}