Новосибирск +7(983)

По всем вопросам :

Телеграм : @radgura

JoomShopping - OneStepCheckout изменение стоимости доставки от кол-ва товаров

Заказать
Joomla 3.x

Стоимость 1500


@radgura.ru
Адриена Лежена
63089
Новосибирск
Адриена Лежена
+7(983)
3067856
Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Статьи

Вы можете Заказать 1500руб. RUB

Стандартный механизм JoomShopping не умеет делать сложный расчет доставки, необходимо вносить изменения.

Поставлена задача:

1. Добавлять 200р к доставке, если товаров больше одного, при этом есть исключения по товару.

Сначала вводим признак, по которому будем исключать товар, для этого создаем характеристику.Необходимо поставить эту характеристику всем товарам, которые не будут добавлять 200р к доставке.

Далее нам необходимо понять в какое поле она будет выгружаться, у нас получилось поле #__jshopping_products.extra_field_3,  ID характеристики 4. 

Следующий шаг расчета стоимости доставки

Карточки товара из корзины JoomShopping хранятся в сессии, для обновлении цены нам необходимо "на лету" изменить данные, открываем файл:

components/com_jshopping/templates/addons/onestepcheckout/default/checkout.php

Это шаблон корзины, реализуем подсчет кол-во товара:

<tbody>
<?php
$i=1;
$countprod = count($this->products);$qunt=0;
foreach ($this->products as $key_id=>$prod) {
$db->setquery("select extra_field_3 from #__jshopping_products where product_id='".$prod['product_id']."' ");$ext=$db->loadresult();//поле скрыто, получаем значение из БД
if ($ext!=4) $qunt=$qunt+$prod['quantity'];
?>
<tr class="jshop_prod_cart" >

И нужно переопределить вывод суммы:

$session = JFactory::getSession();
$price = $session->get("jshop_price_shipping");
//если товаров несколько то к каждой позиции кроме первой добавляем 200р
if ($price>0)
{
$quntprice=0;

if ($qunt>1) $quntprice=($qunt-1)*200; else $quntprice=0;
$this->summ_delivery=getRoundPriceProduct(floatval($price+$quntprice));
}

if (isset($this->summ_delivery)){ ?>
<tr>
<td class="name">
<?php echo JText::_('JSHOP_ONESTEPCHECKOUT_SHIPPING_PRICE') ?>
</td>
<td class="value SHIPPING_PRICE">
<?php
echo formatprice($this->summ_delivery) ?>
<?php echo $this->_tmp_ext_shipping?>
</td>
</tr>
<?php } ?>

Также переопределить итоговую сумму:

<?php 
$this->fullsumm=$this->summ_package+$this->summ_delivery+$this->summ;
?>
<tr class="total">
<td class="name">
<?php echo $this->text_total ?>
</td>
<td class="value">
<?php echo formatprice($this->fullsumm) ?>
<?php echo $this->_tmp_ext_total ?>
</td>
</tr>

Далее нам нужно после сохранения заказа, переписать суммы доставки и сумму итого:

/city-new/public_html/components/com_jshopping/models/checkoutorder.php
if ($jshopConfig->send_order_email && $order->order_created){
$send = $this->sendOrderEmail($order->order_id);
}
//обновляем стоимость доставки, исключаем кол-во товара по характеристике
if ($order->order_shipping>0)
{
$db = JFactory::getDbo();
$db->setquery("SELECT SUM(`product_quantity`) FROM `#__jshopping_order_item` WHERE order_id='".$order->order_id."' and product_id not in (select product_id from #__jshopping_products where extra_field_3=4)");$qunt=$db->loadresult();
$quntprice=0;
if ($qunt>1)
{
$quntprice=($qunt-1)*200;
$order_shipping=getRoundPriceProduct(floatval($order->order_shipping+$quntprice));
$db->setquery("update `#__jshopping_orders` set order_shipping='".$order_shipping."' WHERE order_id='".$order->order_id."' ");$db->execute();
$db->setquery("update `#__jshopping_orders` set order_total=order_shipping+order_subtotal+order_payment WHERE order_id='".$order->order_id."' ");$db->execute();
}
}

 

2.Стоимость доставки индивидуальна для каждого товара. Доставка рассчитывается: 100% от первого товара, 50% от второго. Стоимость доставки брать от наибольшей.

Решение аналогичны задаче 1

в файле "на лету" изменяем сумму:

components/com_jshopping/templates/addons/onestepcheckout/default/checkout.php
<tbody>
<?php
$first=0;$second=0;$prodid=array();
foreach ($this->products as $key_id=>$prod) {$prodid[]=$prod['product_id'];}
$db->setquery("select yan_local_delivery_cost as cost from #__jshopping_products where product_id in (".implode(',',$prodid).") order by yan_local_delivery_cost desc limit 2");$delcostlist=$db->loadobjectlist();
if (isset($delcostlist[0]->cost))
{
$first=$delcostlist[0]->cost;
if (isset($delcostlist[1]->cost)) $second=$delcostlist[1]->cost/2;
}
//выводим карточку
foreach ($this->products as $key_id=>$prod) {
if (isset($delcostlist[0]->cost) and $delcostlist[0]->product_id==$prod['product_id'] and $prod['quantity']>1) $second=(int)($delcostlist[0]->cost/2);
}
....
$this->summ_delivery=($first+$second);
if (isset($this->summ_delivery) and $this->summ_delivery>0){ ?>
<tr>
<td class="name">
<?php echo JText::_('JSHOP_ONESTEPCHECKOUT_SHIPPING_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>

Переписываем стоимость заказа:

/city-new/public_html/components/com_jshopping/models/checkoutorder.php
$first=0;$second=0;
$db->setquery("select yan_local_delivery_cost as cost from #__jshopping_products where product_id in (select product_id FROM `#__jshopping_order_item` WHERE order_id='".$order->order_id."' and product_id not in (select product_id from #__jshopping_products where extra_field_3=4)) order by yan_local_delivery_cost desc limit 2");$delcostlist=$db->loadobjectlist();
if (isset($delcostlist[0]->cost))
{
$first=$delcostlist[0]->cost;
if ($prod['quantity']>1)$second=(int)($delcostlist[0]->cost/2);
else
if (isset($delcostlist[1]->cost)) $second=$delcostlist[1]->cost;
}
$db->setquery("update `#__jshopping_orders` set order_shipping='".($first+$second)."' WHERE order_id='".$order->order_id."' ");$db->execute();
$db->setquery("update `#__jshopping_orders` set order_total=order_shipping+order_subtotal+order_payment+order_package WHERE order_id='".$order->order_id."' ");$db->execute();
return $order;

Комментарии (0)

Здесь ещё нет оставленных комментариев.

Оставьте свой комментарий

  1. Добавление комментария от гостя.
Вложения (0 / 3)
Share Your Location

Как с нами связаться

По всем вопросам пишите  

Телеграм: @radgura

OnLine заказ

Отправить сообщение

Нажимая на кнопку «Отправить сообщение», я соглашаюсь:
* с условиями публичной оферты
* обработку моих персональных данных


RAD компоненты

Please publish modules in offcanvas position.