example custom column arraydataprovider gridview checkbox yii2

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!