custom - ¿Cómo puedo procesar una columna de casilla de verificación de Yii2 gridview?
yii2 gridview filter (2)
No puede necesitar usar javascript
En su GridView
simplemente cambie [''class'' => ''yii/grid/CheckboxColumn'']
show below code
Mi _add.php
$itemsQuery = Inventory::find();
$itemsQuery->andFilterWhere([''inv_status'' => 1, ''inv_condition'' => 2]);
$dataProvider = new ActiveDataProvider([
''query'' => $itemsQuery,
]);
echo GridView::widget([
''id'' => ''griditems'',
''dataProvider'' => $dataProvider,
''columns'' => [
[
''attribute'' => ''inv_group'',
''value'' => ''invGroup.inv_group''
],
[
''attribute'' => ''inv_class'',
''value'' => ''invClass.inv_class''
],
''brand'',
''model'',
''description'',
[
''class'' => ''yii/grid/CheckboxColumn'', ''checkboxOptions'' => function($model) {
return [''value'' => $model->Your_unique_id];
},
],
],
]);
Ahora acceda a la casilla de verificación de datos seleccionados en el controller
. Agregue el código siguiente en su controlador para acceder a la fila seleccionada
isset($_REQUEST[''selection''])
Necesito insertar filas en una tabla de un conjunto de casillas de verificación en una vista de widget de vista de cuadrícula.
Mi código _add.php:
$itemsQuery = Inventory::find();
$itemsQuery->andFilterWhere([''inv_status'' => 1, ''inv_condition'' => 2]);
$dataProvider = new ActiveDataProvider([
''query'' => $itemsQuery,
]);
echo GridView::widget([
''id'' => ''griditems'',
''dataProvider'' => $dataProvider,
''columns'' => [
[''attribute'' => ''inv_group'', ''value'' => ''invGroup.inv_group''],
[''attribute'' => ''inv_class'', ''value'' => ''invClass.inv_class''],
''brand'',
''model'',
''description'',
[''class'' => ''yii/grid/CheckboxColumn''],
],
]);
He intentado usar JavaScript, sin embargo, no puedo obtener resultados:
$(''element'').one(''click'',function() {
var keys = $(''#griditems'').yiiGridView(''getSelectedRows'');
$.post({
url: ''picked-items/processselected'', // your controller action
dataType: ''json'',
data: {keylist: keys},
success: function(data) {
if (data.status === ''success'') {
alert(''Total price is '' + data.total);
}
},
});
});
He intentado varias soluciones posibles sin resultados, he leído documentaciones, blogs, foros y no puedo hacerlo.
¿Cómo puedo procesar datos en mi controlador desde un conjunto de casillas de verificación en una tabla gridview?
aquí mi solución. Pls, comentarios
En mi _add.php
<?php
$itemsQuery = Inventory::find();
$itemsQuery->andFilterWhere([''inv_status'' => 1, ''inv_condition'' => 2]);
$dataProvider = new ActiveDataProvider([
''query'' => $itemsQuery,
]);
echo GridView::widget([
''id'' => ''griditems'',
''dataProvider'' => $dataProvider,
''columns'' => [
[''attribute'' => ''inv_group'', ''value'' => ''invGroup.inv_group''],
[''attribute'' => ''inv_class'', ''value'' => ''invClass.inv_class''],
''brand'',
''model'',
''description'',
[''class'' => ''yii/grid/CheckboxColumn'', ''checkboxOptions'' => [''onclick'' => ''js:addItems(this.value, this.checked)'']],
],
]);
?>
En javascript
function addItems(item_id, checked){
var pick_id = getUrlVars()["id"];
// alert(checked);
if(checked){
$.ajax({
url: ''index.php'',
method: ''get'',
dataType: ''text'',
data: {r:''picked-items/add'', item:item_id, pick:pick_id}
}).done(function(){alert(''added'')}).error(function(){alert(''there was a problem...!'')});
}
else{
$.ajax({
url: ''index.php'',
method: ''get'',
dataType: ''text'',
data: {r:''picked-items/deselect'', item:item_id, pick:pick_id}
}).done(function(){alert(''deselected'')}).error(function(){alert(''there was a problem...!'')});
}}
Y en mi controlador
public function actionDeselect()
{
$picking_list = Yii::$app->request->get(''pick'');
$item_id = Yii::$app->request->get(''item'');
$deselectModel = PickedItems::find()->where([''item_id'' => $item_id, ''picking_list'' => $picking_list])->one();
$itemAdded = Inventory::find()->where([''inv_id'' => $item_id])->one();
$itemAdded->inv_status = 1;
$itemAdded->current_ot = ''0'';
$deselectModel->delete();
$itemAdded->save();
}
public function actionAdd()
{
$picking_list = Yii::$app->request->get(''pick'');
$item_id = Yii::$app->request->get(''item'');
$itemAdded = Inventory::find()->where([''inv_id'' => $item_id])->one();
$currentPicking = PickingList::find()->where([''pick_id'' => $picking_list])->one();
$currentOt = Ot::find()->where([''ot_id'' => $currentPicking->ot_id])->one();
if($itemAdded->composition === 2){
$parentGroup = $itemAdded->parent_code;
$otherItems = Inventory::find()->where([''parent_code'' => $parentGroup])->all();
foreach($otherItems as $item){
$addModel = new PickedItems();
$addModel->picking_list = $picking_list;
$addModel->item_id = $item->inv_id;
$addModel->save();
$item->inv_status = 2;
$item->current_ot = $currentOt->ot_id;
$item->save();
}
}
else{
$addModel = new PickedItems();
$addModel->picking_list = $picking_list;
$addModel->item_id = $item_id;
$addModel->save();
$itemAdded->inv_status = 2;
$itemAdded->current_ot = $currentOt->ot_id;
$itemAdded->save();
}
}
Aquí una explicación: necesito agregar elementos en lote cuando los artículos tienen su valor de composición en 2 ..., luego, encuentro todos los artículos con el mismo código padre y la actualización.
Sin embargo, trato de utilizar el método POST en JavaScript, pero no funciona ...,
¡Forma tu ayuda, GRACIAS!