<?php use yii\bootstrap\Modal; use kartik\grid\GridView; use yii\helpers\ArrayHelper; use yii\bootstrap\Html; use sya\ecommerce\Ecommerce; $ecommerce = Ecommerce::module(); // Declare column in product $defaultColumns = [['attribute' => '_id', 'hAlign' => 'center', 'vAlign' => 'middle', 'contentOptions' => ['class' => 'productId']]]; $productColumns = ArrayHelper::merge($defaultColumns, $productColumns); $productColumns[] = ['header' => Yii::t('ecommerce', 'Quantity'), 'hAlign' => 'center', 'vAlign' => 'middle', 'contentOptions' => ['class' => 'productQty'], 'value' => function ($model, $key, $index, $widget) use($ecommerce) { $options = ['class' => 'form-control qty_' . $model->_id]; if ($ecommerce->multiple) { $options['onkeyup'] = 'return productQtyOrder(this);'; } else { $options['readonly'] = ''; } return Html::textInput('qty', 1, $options); }, 'format' => 'raw']; // Modal product Modal::begin(['id' => 'product_modal', 'size' => 'modal-lg', 'header' => '<h4 class="modal-title" id="myModalLabel">' . Yii::t('ecommerce', 'List Product') . '</h4>', 'toggleButton' => ['label' => '<i class="fa fa-plus"></i> ' . Yii::t('ecommerce', 'Create') . ' ' . Yii::t('ecommerce', 'Product'), 'class' => 'btn btn-xs btn-primary pull-right'], 'footer' => '<button type="button" onclick="addProduct();" class="btn btn-primary">' . Yii::t('ecommerce', 'Create') . ' ' . Yii::t('ecommerce', 'Product') . '</button>']); echo GridView::widget(['panel' => ['heading' => Yii::t('ecommerce', 'Product')], 'id' => 'product-grid', 'pjax' => TRUE, 'dataProvider' => $productDataProvider, 'filterModel' => $productSearchModel, 'columns' => $productColumns, 'responsive' => true, 'hover' => true, 'toolbar' => []]); Modal::end(); echo Html::hiddenInput('product_list', \sya\ecommerce\Module::getProductList($model->product), ['id' => 'product_list']); echo Html::hiddenInput(\yii\helpers\StringHelper::basename(get_class($model)) . '[product_text]', $model->product_text, ['id' => 'product_text']); // Register js code $this->registerJs("\r\n // Add or remove product when click product\r\n function productOrder(){\r\n \$('#product-grid-container table tbody tr').click(function(){\r\n // Get id of product and qty\r\n var id = \$(this).find('.productId').text();\r\n var qty = \$(this).find('.productQty input');\r\n \r\n // Get id and qty selected\r\n var product_list = new Array();\r\n if(\$('#product_list').val()){\r\n var productSelected = \$('#product_list').val().split(',');\r\n }else{\r\n var productSelected = null;\r\n }\r\n \r\n if(\$(this).hasClass('selected')){ // remove from hidden field\r\n removeProductId(productSelected, product_list, id, qty, this);\r\n } else { // add too hidden field\r\n addProductId(productSelected, product_list, id, qty, this);\r\n }\r\n });\r\n }\r\n \r\n // Add or remove product when qty = 0\r\n function productQtyOrder(element){\r\n // Get id of product and qty\r\n var id = \$(element).parent().parent().find('.productId').text();\r\n var qty = \$(element);\r\n \r\n // Get id and qty selected\r\n var product_list = new Array();\r\n if(\$('#product_list').val()){\r\n var productSelected = \$('#product_list').val().split(',');\r\n }else{\r\n var productSelected = null;\r\n }\r\n\r\n if(qty.val() == 0){ // remove from hidden field\r\n removeProductId(productSelected, product_list, id, qty, \$(element).parent().parent());\r\n } else { // add too hidden field\r\n addProductId(productSelected, product_list, id, qty, \$(element).parent().parent());\r\n }\r\n }\r\n \r\n // Function remove id product\r\n function removeProductId(productSelected, product_list, id, qty, element){\r\n if(productSelected.length){\r\n j = 0;\r\n for(i =0;i< productSelected.length;i++){\r\n info = productSelected[i].split(':');\r\n if(info[0]!=id){\r\n product_list[j] = info[0]+':'+info[1];\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n \$('#product_list').val(product_list.length?product_list.join():'');\r\n \$(element).removeClass('selected');\r\n qty.val(0);\r\n }\r\n \r\n // Function add id product\r\n function addProductId(productSelected, product_list, id, qty, element){\r\n if (qty.val() == 0) qty.val(1);\r\n \$(element).addClass('selected');\r\n\r\n if(productSelected){\r\n updateValue = false;\r\n for(i =0;i< productSelected.length;i++){\r\n info = productSelected[i].split(':');\r\n if(info[0]==id){\r\n product_list[i] =info[0]+':'+qty.val();\r\n updateValue = true;\r\n }else{\r\n product_list[i]=info[0]+':'+info[1];\r\n }\r\n }\r\n if(!updateValue){\r\n product_list[product_list.length] = id+':'+qty.val();\r\n }\r\n }\r\n \$('#product_list').val(product_list.length?product_list.join():(id+':'+qty.val()));\r\n }\r\n \r\n // Selected product\r\n function setSelect(){\r\n var product_list = \$('#product_list').val();\r\n if(product_list){\r\n var field = product_list.split(',');\r\n var total = field.length;\r\n for(var i=0; i<total; i++){\r\n var product = field[i].split(':');\r\n \$('.qty_'+product[0]).val(product[1]);\r\n \$('.qty_'+product[0]).parent().parent().addClass('selected');\r\n }\t\t\r\n }\r\n }\r\n \r\n // Add product in order\r\n function addProduct(){\r\n var shipping = \$('#syaShipping').val();\r\n \$.ajax({\r\n url: '" . \yii\helpers\Url::to(['/ecommerce/ajax/addproduct']) . "',\r\n type: 'post',\r\n dataType: 'json',\r\n data: {data: \$('#product_list').val(), shipping: shipping},\r\n }).done(function (data) {\r\n \$('#product_info').html(data.template);\r\n \$('#product_text').val(data.titles);\r\n totalProduct();\r\n \$('#product_modal').modal('hide');\r\n });\r\n }\r\n", yii\web\View::POS_END); $this->registerJs("\r\n productOrder();\r\n setSelect();\r\n \$(document).on('pjax:complete', function () {\r\n productOrder();\r\n setSelect();\r\n });\r\n", yii\web\View::POS_READY);