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

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

Телеграм : @radgura

K2_Store редактируемые заказы покупателей

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

Стоимость 400


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

K2_Store редактируемые заказы

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

Для проекта потребовалось редактировать сумму заказа после размещения в корзине - предоставление скидок, без выдачи купонов.

Количество и сумма хранятся в БД:

#_k2store_orders  - Общая информация о заказе и клиенте
#_k2store_orderitems - Состав заказа, сумма за единицу и кол-во

Нам необходимо на форме с деталями заказа разместить элементы редактирования и сделать процедуру сохранения изменений в двух таблицах.

Открываем файл

administrator/components/com_k2store/views/orders/tmpl/view.php

Обновляем строку с кол-вом, заменить

<?php echo $item->orderitem_quantity; ?>

На это

<input type="number" min="0" max="999" id="quant-<?php echo $item->orderitem_id;?>" style="width: 80px;border: 0;" value="<?php echo $item->orderitem_quantity; ?>" onchange="document.getElementById('div-<?php echo $item->orderitem_id;?>').style.display='';document.getElementById('quant-<?php echo $item->orderitem_id;?>').style.backgroundColor='#FFA9A9';">

И размещаем элемент с кнопкой "Сохранить":

<div style="display:none;position: relative;float: right;top: 8px;" id="div-<?php echo $item->orderitem_id;?>" >
 <a style="top: -4px;position: relative;" href="#" class="btn_ex_save" id="exs-<?php echo $item->orderitem_id;?>">
 <img src="/images/save.gif" />
</a>
</div>

Картинку можно взять с этого материала:

 Добавляем скрипт, который отслеживает нажатие кнопки:

 

<script> 
//изменить кол-во
jQuery("body").on("click", ".btn_ex_save", function(e) {
e.preventDefault();
//ищем ID в БД
var clickedID = this.id.split("-");
var DbNumberID = clickedID[1];
//данные для отправки POST запросом
var myData = 'recordToEx='+DbNumberID+'&quant='+document.getElementById('quant-'+DbNumberID).value+'&order=<?php echo $invoice_number;?>';
jQuery.ajax({
type: "POST",
url: "index.php?option=com_k2store&view=orders&task=view&id=<?php echo $invoice_number;?>",//ссылка на текущую страницу
dataType:"text",
data:myData,
success:function(response){
document.getElementById('div-'+DbNumberID).style.display = 'none';
document.getElementById('quant-'+DbNumberID).style.backgroundColor = 'white';
var mas = response.split(';;');
jQuery('#summ-'+DbNumberID).html(mas[0]);
jQuery('#sum-'+DbNumberID).html(mas[0]);
jQuery('#sub_summ').html(mas[1]);
jQuery('#total_summ').html(mas[1]);
},
error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
});
});
</script>

Далее размещаем обработку POST запроса, для этого редактируем страницу(необходима первая в очереди на загрузку):

administrator/components/com_k2store/views/orders/view.html.php

Добавляем обработку запроса:

if(isset($_POST["recordToEx"])){
$idToUpd = str_replace('-','',filter_var($_POST["recordToEx"],FILTER_SANITIZE_NUMBER_INT));
if (isset($_POST["quant"])) $quant = filter_var($_POST["quant"],FILTER_SANITIZE_STRING); else $quant='';
if (isset($_POST["order"]))$order = filter_var($_POST["order"],FILTER_SANITIZE_STRING); else $order='';
//обновляем кол-во
if (trim($quant) != '' and trim($order) != '')
{
$db = JFactory::getDbo();
$query =htmlspecialchars("update #__k2store_orderitems set orderitem_quantity ='".$quant."' where orderitem_id='".$idToUpd."'");
$db->setQuery($query);
if(!$db->query())
{
header('HTTP/1.1 500 '.JText::_("Ошибка ID = '".$idToUpd."' '".$db->stderr()));
exit();
}
}
//выводим сумму позиции после обновления
$query =htmlspecialchars("update #__k2store_orderitems set orderitem_final_price = (orderitem_price+ orderitem_attributes_price)*orderitem_quantity where orderitem_id='".$idToUpd."'");
$db->setQuery($query);
if(!$db->query())
{
header('HTTP/1.1 500 '.JText::_("Ошибка ID = '".$idToUpd."' '".$db->stderr()));
exit();
}
$query =htmlspecialchars("(select ROUND(sum(orderitem_final_price)) as total_summ,(select ROUND(orderitem_final_price) from #__k2store_orderitems where orderitem_id='".$idToUpd."') as summ_item from #__k2store_orderitems where order_id = (select order_id from #__k2store_orderitems where orderitem_id='".$idToUpd."'))");
$db->setQuery($query);
$res = $db->loadObject();
echo str_replace('.00000','.00 руб.',$res->summ_item).';;'.str_replace('.00000','.00 руб.',$res->total_summ);

//подсчитываем сумму общего заказа
$query =htmlspecialchars("update #__k2store_orders set is_editing='1',orderpayment_amount ='".$res->total_summ."',order_total ='".$res->total_summ."',order_subtotal ='".$res->total_summ."' where id ='".$order."'");
$db->setQuery($query);
if(!$db->query())
{
header('HTTP/1.1 500 '.JText::_("Ошибка ID = '".$idToUpd."' '".$db->stderr()));
exit();
}
exit();
}

После выполнения запроса на форме обновиться сумму единицы и общая сумма заказа.

Также запрос оставляет пометку о том. что было ручное редактирование, для этого необходимо добавить поле в таблицу 

ALTERTABLE #__k2store_orders ADDCOLUMN is_editing int(1) AFTER #__k2store_orders;

Обработку этого значения разместим в файле с общим списком заказов, редактируем файл:

administrator/components/com_k2store/views/orders/tmpl/default.php

Заменить текст:

<td>
<span class="editlinktip hasTip" title="<?php echo JText::_( 'K2STORE_ORDER_VIEW' );?>::<?php echo $this->escape($row->order_id); ?>">

На

<td <?php if ($row->is_editing == 1) echo 'style="background-color: #FFFFC9;"'?>>
<span class="editlinktip hasTip" title="<?php echo JText::_( 'K2STORE_ORDER_VIEW' );?>::<?php echo $this->escape($row->order_id); ?>">

Таким же образом можно редактировать стоимость позиции и стоимость опций, добавить скидку(изменение стоимости позиции и опции на определенный процент).

Результат:

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

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

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

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

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

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

Телеграм: @radgura

OnLine заказ

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

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


RAD компоненты

Please publish modules in offcanvas position.