example content column array php gridview yii2

php - content - Fila de GridView como enlace, excepto los elementos de la columna de acción en Yii2



yii2 gridview column content (5)

Recomiendo usar a continuación javascript para evitar el desencadenamiento de eventos en columnas de filtros.

<?php $this->registerJs(" $(''td'').click(function (e) { var id = $(this).closest(''tr'').data(''id''); if (e.target == this && id) location.href = ''" . Url::to([''thread/view'']) . "?id='' + id; }); ");

O

<?php $this->registerJs(" $(''tbody td'').css(''cursor'', ''pointer''); $(''tbody td'').click(function (e) { var id = $(this).closest(''tr'').data(''id''); if (e.target == this) location.href = ''" . Url::to([''thread/view'']) . "?id='' + id; }); ");

Cuando utilizo el siguiente código, anula los enlaces eliminar / actualizar de la columna de acción.

''rowOptions'' => function ($model, $key, $index, $grid) { return [ ''id'' => $model[''id''], ''onclick'' => ''location.href="'' . Yii::$app->urlManager->createUrl(''accountinfo/update'') .''?id="+(this.id);'', ]; },

Como tengo muchas columnas, sería bueno especificar la URL del enlace en un solo lugar en lugar de usar el siguiente código en cada columna:

''value'' => function ($data) { return Html::url(''site/index''); }

Entonces, ¿hay alguna forma de dar un enlace para toda la fila en GridView, excepto en la columna de acción?

EDITAR: Gridview completo

GridView::widget([ ''dataProvider'' => $dataProvider, ''filterModel'' => $searchModel, ''rowOptions'' => function ($model, $index, $widget, $grid) { if ($widget == 1) return [ ''id'' => $model[''id''], ''onclick'' => ''location.href="'' . Yii::$app->urlManager->createUrl(''accountinfo/update'') . ''?id="+(this.id);'' ]; }, ''columns'' => [ [''class'' => ''yii/grid/SerialColumn''], // ''id'', ''f_name'', ''l_name'', ''address'', ''country'', ''state'', ''city'', ''pincode'', [ ''attribute'' => ''status'', ''value'' => function ($model, $key, $index, $column) { return $model->status == ''1'' ? ''Enabled'' : ''Disabled''; }, ''filter'' => [1 => ''Enabled'', 0 => ''Disabled''], ], ''card'', ''note'', ''balance'', ''is_new'', [ ''attribute'' => ''is_new'', ''value'' => function ($model, $key, $index, $column) { return $model->is_new == ''1'' ? ''Yes'' : ''No''; }, ''filter'' => [1 => ''Yes'', 0 => ''No''], ], [ ''class'' => ''yii/grid/ActionColumn'', ''template'' => ''{update}&nbsp;&nbsp;{delete}'', ], ], ]);


Podrías probar esto. Permitirá hacer clic en toda la fila siempre que el usuario haga clic en un elemento td que no esté cubierto por otro elemento. Así que también la columna de acción es parte de la fila clicable, sin embargo, no los glificones.

<?= GridView::widget([ ... ''rowOptions'' => function ($model, $key, $index, $grid) { return [''data-id'' => $model->id]; }, ... ]); ?> <?php $this->registerJs(" $(''td'').click(function (e) { var id = $(this).closest(''tr'').data(''id''); if(e.target == this) location.href = ''" . Url::to([''accountinfo/update'']) . "?id='' + id; }); ");

Ver también documentación para event.target :

La propiedad de destino puede ser el elemento que se registró para el evento o un descendiente de él. A menudo es útil comparar event.target con esto para determinar si el evento se está manejando debido al burbujeo del evento. Esta propiedad es muy útil en la delegación de eventos, cuando los eventos burbujean.


Usuario ''filterPosition''=>'' '',

<?= GridView::widget([ ''dataProvider'' => $dataProvider, ''filterModel'' => $searchModel, ''resizableColumns'' => true, ''containerOptions'' => [''style'' => ''overflow: auto''], // only set when $responsive = false ''headerRowOptions'' => [''class'' => ''kartik-sheet-style''], ''filterRowOptions'' => [''class'' => ''kartik-sheet-style''], ''pjax'' => true, ''hover'' => true, ''export'' => false, ''columns'' => $gridColumns, ''filterPosition''=>'' '', ]); ?>


[ ''attribute''=>''website'', ''format'' => ''raw'', ''value''=>function ($data) { $wsite = Agents::find() ->all(); return Html::a(Html::encode($wsite[0]->website), $wsite[0]->website); }, ''label''=>''Website'', ''vAlign''=>''middle'', ''width''=>''150px'', ],


GridView::widget([ ''dataProvider'' => $dataProvider, ''filterModel'' => $filterModel, ''rowOptions'' => function ($m, $key, $index, $grid) { return [''data-href'' => ''book-vgift/girl-vgift?to='' . $m->user_id]; }, ''columns'' => [ [

Archivo JavaScript

$(''table tr[data-href]'').click(function () { if ($(this).data(''href'') !== undefined) { window.location.href = $(this).data(''href''); } });