Возникла необходимость объеденить заказы одного или нескольких человек в один, причем со сложением одинаковых товаров - по ид, артикулу, атрибуту, но стоимость брать минимальную по списку.
Для начала добавим кнопку "Объеденение" в файле:
administrator/components/com_jshopping/view/orders/view.html.php
Добавляем кнопку:
class JshoppingViewOrders extends JViewLegacy
{
function displayList($tpl=null){
JToolBarHelper::title(_JSHOP_ORDER_LIST, 'generic.png');
JToolBarHelper::addNew();
JToolBarHelper::deleteList(_JSHOP_DELETE."?");
JToolBarHelper::link('', 'Объеденить', 'mergeorderbtn');
parent::display($tpl);
}
Далее в файле :
administrator/components/com_jshopping/view/orders/tmpl/list.php
Реализуем Ajax запросы и форму для объеденения и стили, просто добавив код:
<input type="hidden" id="siteurl" value="<?php echo JURI::root()?>">
<input type="hidden" id="scripturl" value="<?php echo JURI::root()?>administrator/index.php?option=com_jshopping&controller=orders">
<div class="radworkpanel" style="display:none"><div id="radworkpanel" ></div></div>
<script>
function get_sel_value(elem_id,nullval="")
{
var sel = document.getElementById(elem_id); var str='';
if (sel.options==null) return nullval;
else
{
for (var i = 0; i < sel.options.length; i++){if (sel.options[i].selected) str=str+sel.options[i].value+',';}
str=str.substring(0, str.length - 1);
return str;
}
}
function get_check_value(names)
{
var str='';
jQuery('.'+names).each(function(){
if (this.checked===true) str=str+this.id+',';
});
if (str!='') str=str.substring(0, str.length - 1);
return str;
}
jQuery(document).ready(function() {
document.querySelectorAll('#toolbar-mergeorderbtn button').forEach(el => el.removeAttribute('onclick'));
jQuery("body").on("click", ".closemerge", function(e){
jQuery('.radworkpanel').hide();
document.getElementById('radworkpanel').innerHTML='';
});
jQuery("body").on("click", ".makemergecancel", function(e){
jQuery('.radworkpanel').hide();
document.getElementById('radworkpanel').innerHTML='';
});
jQuery("body").on("click", ".chagenav", function(e){
var ids=this.id;
jQuery('.chagenav').removeClass('active');
jQuery('.chagenav_'+ids).addClass('active');
jQuery('.tab-pane').removeClass('active');
jQuery('#gtab'+ids).addClass('active');
});
jQuery("body").on("click", ".chagenav", function(e){
return false;
});
jQuery(document.body).on('change', '#orderdest', function (event)
{
var myData = 'orderdest='+document.getElementById('orderdest').value
+'&cid='+document.getElementById('radcids').value;
if (document.getElementById('reloadrestable')!=null) document.getElementById('reloadrestable').innerHTML='<img src="'+document.getElementById('siteurl').value+'administrator/components/com_jshopping/views/orders/tmpl/load2.gif" style="max-height:20px;">';
jQuery.ajax({
type: "POST",
url: document.getElementById('scripturl').value,
dataType:"text",
data:myData,
success:function(response)
{
document.getElementById('resulttablediv').innerHTML=response;
if (document.getElementById('reloadrestable')!=null)document.getElementById('reloadrestable').innerHTML='';
jQuery('.reloadsql').click();
},
error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
});
});
jQuery(document.body).on('click', '.reloadsql', function (event)
{
var myData = 'reloadsql='+document.getElementById('orderdest').value
+'&cid='+document.getElementById('radcids').value;
if (document.getElementById('gtab3')!=null) document.getElementById('gtab3').innerHTML='<img src="'+document.getElementById('siteurl').value+'administrator/components/com_jshopping/views/orders/tmpl/load2.gif" style="max-height:20px;">';
jQuery.ajax({
type: "POST",
url: document.getElementById('scripturl').value,
dataType:"text",
data:myData,
success:function(response)
{
document.getElementById('gtab3').innerHTML=response;
},
error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
});
});
jQuery(document.body).on('click', '.refreshpdf', function (event)
{
var myData = 'refreshpdf='+document.getElementById('orderdest').value;
jQuery.ajax({
type: "POST",
url: document.getElementById('scripturl').value,
dataType:"text",
data:myData,
success:function(response)
{
},
error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
});
});
jQuery(document.body).on('click', '.makemerge', function (event)
{
var myData = 'makemerge='+document.getElementById('orderdest').value
+'&cid='+document.getElementById('radcids').value;
if (document.getElementById('reloadrestable')!=null) document.getElementById('reloadrestable').innerHTML='<img src="'+document.getElementById('siteurl').value+'administrator/components/com_jshopping/views/orders/tmpl/load2.gif" style="max-height:20px;">';
jQuery.ajax({
type: "POST",
url: document.getElementById('scripturl').value,
dataType:"text",
data:myData,
success:function(response)
{
jQuery('.refreshpdf').click();
location.reload();
},
error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
});
});
jQuery(document.body).on('click', '#toolbar-mergeorderbtn button', function (event)
{
if (document.adminForm.boxchecked.value <2)
{ alert('Пожалуйста, выберите объекты из списка!'); }
else
{
var favorite = [];jQuery("input[name='cid[]']:checked").each(function(){favorite.push(jQuery(this).val());});
var cids=favorite.join(", ");
var myData = 'showmergeorder='+cids;
document.getElementById('radworkpanel').innerHTML='<img src="'+document.getElementById('siteurl').value+'administrator/components/com_jshopping/views/orders/tmpl/load2.gif" style="max-height:25px;margin-left:50%;">';
jQuery('.radworkpanel').show();
jQuery.ajax({
type: "POST",
url: document.getElementById('scripturl').value,
dataType:"text",
data:myData,
success:function(response)
{
document.getElementById('radworkpanel').innerHTML=response;
},
error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
});
}
return false;
});
});
</script>
Добавим обработчик aJax запросов, можно разместить в файле list.php или view.html.php:
Вы можете получить доступ,купив эту доработку