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

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

Телеграм : @radgura

JoomShopping & One page checkout- Подарки

Заказать доработку
Joomla 3.x

Стоимость 1000


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

Статьи

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

Дата обновления:
2019-07-30
Версия:
1.0.0.1

Требования для работы

Версия Joomla:
3.x
Версия PHP:
5.6 +
Расширения PHP:
Нет дополнительных требований
JoomShopping
4x

Описание

Для реализации этого механизма вам необходимо вести 2 списка: Список товаров и список подарков к этим товарам. Пример составлен для дополнения one page checkout.

Нам необходимо внести изменения в файле корзины one page checkout:

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

В начале файла добавить составление массива ID товаров и подарков (их отличие в нулевой стоимости):

$prodid=array();$prodprice=array();
foreach ($this->products as $key_id=>$prod)
{
$prodid[]=$prod['product_id'];//ID товаров
$prodprice[$prod['product_id']]=$prod['price'];//ID подарков
}

Убрать поле с вводом кол-ва у подарка:

<div class="quantity">
<span class="quantitymore" <?php if ($prod['price']*1<=0) echo 'style="display:none1;"'?> onclick="qty=jQuery('#quantity<?php echo $key_id ?>');qty.val(parseFloat(qty.val())+1);qty.change()"></span>
<input type="text" id="quantity<?php echo $key_id ?>" name="quantity[<?php echo $key_id ?>]" <?php if ($prod['price']*1<=0) echo 'disabled="disabled"'?> value="<?php echo $prod['quantity'] ?>" data-quantity="<?php echo $prod['quantity'] ?>" onkeyup="oneStepCheckout.refreshForm(this,800)" onchange="oneStepCheckout.refreshForm(this,0)" />
<span class="quantityless" <?php if ($prod['price']*1<=0) echo 'style="display:none1;"'?> onclick="qty=jQuery('#quantity<?php echo $key_id ?>');qty.val(parseFloat(qty.val())-1);qty.change()"></span>
</div>

Добавить код, для вставки формы добавления подарка:

<?php 
//выбор подарка
//список товаров в $prodid
//список включенных подарков в $gifts
//товары в карточки $prodidstr
//подарки в карточке $cartgiftsstr
//смотрим в какие активные акции с типом подарок попадают товары
$prodidstr=implode(',',$prodid);
$cartgiftsstr=implode(',',$gifts); if (count($gifts)==0) $cartgiftsstr='0'; if (trim($cartgiftsstr)=='') $cartgiftsstr='0';
echo '<input type="hidden" id="prodstr" value="'.$prodidstr.'">';
if (trim($prodidstr)!='')
{
Доступ к этому контенту разрешен только участникам проекта.
Вы можете получить доступ,купив эту доработку

?>
<script>
jQuery(document).ready(function() {
jQuery("body").on("click", ".setgift", function(e) {
    var ids=this.id;
    var myData = 'setgift='+ids;
    jQuery.ajax({
            type: "POST",
            url: document.getElementById('siteurl').value+"index.php?<ссылка на файл, который обработает запрос>",
            dataType:"text",
            data:myData,
            success:function(response){
            location.reload();
            },
            error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
     });
});
});
</script>

Необходимо внести изменения в модель корзины- чтобы подарки не меняли стоимость и кол-во, файл:

components/com_jshopping/models/cart.php
function updateCartProductPrice() {
$jshopConfig = JSFactory::getConfig();
foreach($this->products as $key=>$value) {
$product = JSFactory::getTable('product', 'jshop');
$product->load($this->products[$key]['product_id']);
$attr_id = unserialize($value['attributes']);
$freeattributes = unserialize($value['freeattributes']);
$product->setAttributeActive($attr_id);
$product->setFreeAttributeActive($freeattributes);
//корректировка подарка
if ($this->products[$key]['price']>0)
$this->products[$key]['price'] = $product->getPrice($this->products[$key]['quantity'], 1, 1, 1, $this->products[$key]);
if ($jshopConfig->cart_basic_price_show){$this->products[$key]['basicprice'] = $product->getBasicPrice();}
}
$dispatcher = JDispatcher::getInstance();
$dispatcher->trigger('onAfterUpdateCartProductPrice', array(&$this));
$this->loadPriceAndCountProducts();
$this->reloadRabatValue();
$this->saveToSession();
}
function refresh($quantity){
$jshopConfig = JSFactory::getConfig();
$dispatcher = JDispatcher::getInstance();
$dispatcher->trigger('onBeforeRefreshProductInCart', array(&$quantity, &$this));
if (is_array($quantity) && count($quantity)){
$lang = JSFactory::getLang();
$name = $lang->get('name');
foreach($quantity as $key=>$value){
if ($jshopConfig->use_decimal_qty){
$value = floatval(str_replace(",",".",$value));
$value = round($value, $jshopConfig->cart_decimal_qty_precision);
}else{
$value = intval($value);
}
if ($value < 0) $value = 0;
$product = JSFactory::getTable('product', 'jshop');
$product->load($this->products[$key]['product_id']);
$attr = unserialize($this->products[$key]['attributes']);
$free_attr = unserialize($this->products[$key]['freeattributes']);
$product->setAttributeActive($attr);
$product->setFreeAttributeActive($free_attr);
$qtyInStock = $product->getQtyInStock();
$checkqty = $value;
$dispatcher->trigger('onRefreshProductInCartForeach', array(&$this, &$quantity, &$key, &$product, &$attr, &$free_attr, &$qtyInStock, &$checkqty, &$value));
foreach($this->products as $key2 => $value2){
if ($key2!=$key && $value2['pid_check_qty_value']==$this->products[$key]['pid_check_qty_value']){
$checkqty += $value2["quantity"];
}
}
if ($jshopConfig->max_count_order_one_product && ($checkqty > $jshopConfig->max_count_order_one_product)){
JError::raiseNotice(111, sprintf(_JSHOP_ERROR_MAX_COUNT_ORDER_ONE_PRODUCT, $jshopConfig->max_count_order_one_product));
return 0;
}
if ($jshopConfig->min_count_order_one_product && ($checkqty < $jshopConfig->min_count_order_one_product)){
JError::raiseNotice(112, sprintf(_JSHOP_ERROR_MIN_COUNT_ORDER_ONE_PRODUCT, $jshopConfig->min_count_order_one_product));
return 0;
}
if (!$product->unlimited && $jshopConfig->controler_buy_qty && ($checkqty > $qtyInStock)){
JError::raiseWarning(113, sprintf(_JSHOP_ERROR_EXIST_QTY_PRODUCT_BASKET, $product->$name, $qtyInStock));
continue;
}
//корректировка подарка
if ($this->products[$key]['price']>0)
$this->products[$key]['price'] = $product->getPrice($value, 1, 1, 1, $this->products[$key]);

if ($jshopConfig->cart_basic_price_show){$this->products[$key]['basicprice'] = $product->getBasicPrice();}
//корректировка подарка
if ($this->products[$key]['price']>0)
$this->products[$key]['quantity'] = $value;
Доступ к этому контенту разрешен только участникам проекта.
Вы можете получить доступ,купив эту доработку


unset($product);
Доступ к этому контенту разрешен только участникам проекта.
Вы можете получить доступ,купив эту доработку

}
}
$this->loadPriceAndCountProducts();
$this->reloadRabatValue();
$this->saveToSession();
$dispatcher->trigger('onAfterRefreshProductInCart', array(&$quantity, &$this));
return 1;
}

Остается файл, который обработает запрос при добавлении подарка:

//установка подарка
if (isset($_POST['setgift']) and strlen($_POST['setgift']))
{
$ids=$_POST['setgift'];
require_once(JPATH_ROOT.DS.'components'.DS.'com_jshopping'.DS.'models'.DS.'cart.php');
require_once(JPATH_ROOT.DS.'components'.DS.'com_jshopping'.DS.'models'.DS.'tempcart.php');
$cart = new jshopCart();
$tempcart = new jshopTempCart();
$cart->load();
//добавляем подарок
Доступ к этому контенту разрешен только участникам проекта.
Вы можете получить доступ,купив эту доработку

exit();
}

Демонстрация

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

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

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

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

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

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

Телеграм: @radgura

OnLine заказ

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

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


RAD компоненты

Please publish modules in offcanvas position.