2015-02-07 21 views
7

Khi tôi sử dụng mã bên dưới, nó sẽ ghi đè liên kết xóa/cập nhật hành động-cột.Hàng GridView dưới dạng liên kết, ngoại trừ các mục cột hành động trong Yii2

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

Như tôi có nhiều cột nó sẽ là tốt để xác định liên kết url ở một nơi thay vì sử dụng mã dưới đây vào mỗi cột:

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

Vì vậy, là có cách nào tốt nhất để cung cấp cho liên kết cho toàn bộ hàng trong GridView ngoại trừ cột hành động?

EDIT: Full GridView

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}  {delete}', 
     ], 
    ], 
]); 
+0

Bạn có thể giải thích chi tiết hơn không? Thêm đầy đủ 'GridView' rendering code. Có thể cung cấp một số ví dụ. Tôi không hiểu, tại sao nó lại cần thiết? – arogachev

+0

đã thêm chế độ xem lưới của tôi .. Tôi muốn chuyển hướng nó để cập nhật trang khi hàng được nhấp. Vấn đề là khi tôi nhấp vào nút xóa nó được chuyển hướng để cập nhật trang do đó ** rowOptions ** –

+0

Btw: Tham số của rowOptions trong 'Full GridView' là không chính xác. Nó phải là ($ model, $ key, $ index, $ grid) thay vì ($ model, $ index, $ widget, $ grid). – robsch

Trả lời

11

Bạn có thể thử này. Nó sẽ làm cho toàn bộ hàng có thể nhấp được miễn là người dùng nhấp vào một phần tử td không nằm trong phần tử khác. Vì vậy, cột hành động cũng là một phần của hàng có thể nhấp được, tuy nhiên, không phải là các dấu gạch ngang.

<?= 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; 
    }); 

"); 

Xem thêm tài liệu cho event.target:

tài sản

Mục tiêu có thể là yếu tố đã đăng ký cho sự kiện hoặc một hậu duệ của nó. Việc so sánh event.target với điều này thường hữu ích để xác định xem sự kiện đó có đang được xử lý do sự kiện sủi bọt không. Thuộc tính này rất hữu ích trong ủy quyền sự kiện, khi bong bóng sự kiện.

+0

được chấp nhận và upvoted. Điều đó hoạt động hoàn hảo. Cảm ơn vì đã dành thời gian cho tôi. –

+0

cảm ơn, hoạt động tuyệt vời :) –

+0

Thiên tài tuyệt đối cảm ơn một triệu – Liam

4

Tôi khuyên bạn nên sử dụng javascript bên dưới để ngăn sự kiện kích hoạt trên cột bộ lọc.

<?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; 
    }); 
"); 

Hoặc

<?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; 
    }); 
"); 
0

tài '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'=>' ', 
        ]); 
        ?> 
1
[ 
    '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',    
], 
0
GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $filterModel, 
     'rowOptions' => function ($m, $key, $index, $grid) { 
      return ['data-href' => 'book-vgift/girl-vgift?to=' . $m->user_id]; 
     }, 
     'columns' => [ 
      [ 

JavaScript tập tin

$('table tr[data-href]').click(function() { 

    if ($(this).data('href') !== undefined) { 
     window.location.href = $(this).data('href'); 
    } 

}); 
Các vấn đề liên quan