2014-12-10 16 views
8

Yii2'deki kartik ızgara görünümü, ızgara görünümünde onay kutularını görüntüleme seçeneği sunar. Onay kutularını işaretleyerek toplu verileri nasıl silerim? Herhangi bir yardım büyük olurdu.Yii 2: Kartik ızgara görünümünde verileri toplu nasıl silebilirim?

<?php use kartik\grid\GridView;?> 
<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'pjax'=>true, 
    'pjaxSettings'=>[ 
     'neverTimeout'=>true, 
    ], 
    'columns' => [ 
     ['class' => '\kartik\grid\CheckboxColumn'], 
     ['class' => 'yii\grid\SerialColumn'], 

     'hotel_id', 
     'name', 
     'address', 
     'phone_no', 
     'contact_person', 
     ['class' => 'yii\grid\ActionColumn'], 
    ], 
]); ?> 
+0

Tam olarak silmek istediğiniz nedir? – arogachev

+0

Onay kutusu işaretli tüm verileri silmek istiyorum. – Stark

cevap

7

1. oto sınıfları oluşturulmuş sizi bağlı değildir bu yüzden

, GridView ile pjax kaba sınıfını veya id eklemek Ya pjax kaba özel sınıf veya id ekleyin ve: İşte benim kodudur kimlikleri (veya bir sayfada birden fazla GridView widget'ınız varsa).

kartik\grid\CheckboxColumn sadece yii\grid\CheckboxColumn genişletilmiş sürümüdür.

kartik\grid\Viewid otomatik olarak oluşturulan ve bu özelliği kullanılarak değiştirilemez gibi görünüyor, buradan class belirtebilirsiniz containerOptions sahiptir. üretilen çıktının

'containerOptions' => ['class' => 'hotel-pjax-container'], 

Örnek:

<div class="hotel-pjax-container table-responsive" id="w0-container">...</div> 

yii\grid\View\options vardır, buradan id belirtebilirsiniz. Sonuç taşıyıcısı kimliği, örneğin iletilen değerin öneki edilecektir:

'options' => ['id' => 'hotel-pjax'], 

üretilen çıktı:

<div class="table-responsive" id="hotel-pjax-container">...</div> 

sınıfı bu durumda göz ardı edilir.

Kimlik belirtmenizi öneririm.

2. oluşturma veya yönlendirme etti gii ile oluşturulan varsayılan delete eylem oto By kontrolörü

silinmek üzere harekete değiştirmek, bu yüzden birden silinmesi için başka bir eylem oluşturabilir (veya birinde bu işleyebilir Sana kalmış). Eğer deleteAll() herhangi koşulu belirtmek olmasaydı, tablodaki tüm kayıtları silineceğini

public function actionDeleteMultiple() 
{ 
    $pk = Yii::$app->request->post('pk'); // Array or selected records primary keys 

    // Preventing extra unnecessary query 
    if (!$pk) { 
     return; 
    } 

    return Hotel::deleteAll(['hotel_id' => $pk]); 
} 

Not! Bununla doğru ol.

Ayrıca böyle VerbFilter harekete belirtebilirsiniz:

use yii\filters\VerbFilter; 

/** 
* @inheritdoc 
*/ 
public function behaviors() 
{ 
    return [ 
     'verbs' => [ 
      'class' => VerbFilter::className(), 
      'actions' => [ 
       'delete' => ['post'], 
       'delete-multiple' => ['post'], 
      ], 
     ], 
    ]; 
} 

3.kravat bazı javascript yaz hep birlikte

Böyle seçilen satırların birincil anahtarları alabilirsiniz:

$.post(
    "delete-multiple", 
    { 
     pk : $('#hotel-pjax-container').yiiGridView('getSelectedRows') 
    }, 
    function() { 
     $.pjax.reload({container:'#hotel-pjax-container'}); 
    } 
); 

You:

$('#hotel-pjax-container').yiiGridView('getSelectedRows'); 

(örneğin düğme tıklaması) Bu javascript ekle Bu issue içinde GridView ile pjax güncellemesi hakkında daha fazla bilgi bulabilirsiniz. Belki de şunu deneyin: $('#hotel-pjax-container').yiiGridView('applyFilter'); alternatif olarak; Öğeleri kullanarak js'yi veya yalnızca registerJs() ile; index.php silmek birden için bir düğme oluşturmak

<input type="button" class="btn btn-info" value="Multiple Delete" id="MyButton" > 

Adım 2:

7

yerine bu kartik\grid\CheckboxColumn kullanımı bu yii\grid\CheckboxColumn

Adım 1, ben bu size yardımcı olacağını umuyoruz, bu deneyin senin index.php (aynı sayfa) bu jquery için kullanılır

<?php 

    $this->registerJs(' 

    $(document).ready(function(){ 
    $(\'#MyButton\').click(function(){ 

     var HotId = $(\'#w4\').yiiGridView(\'getSelectedRows\'); 
      $.ajax({ 
      type: \'POST\', 
      url : \'index.php?r=hotel/multiple-delete\', 
      data : {row_id: HotId}, 
      success : function() { 
       $(this).closest(\'tr\').remove(); //or whatever html you use for displaying rows 
      } 
     }); 

    }); 
    });', \yii\web\View::POS_READY); 

?> 

bu javascript kullanmak

Adım 3 Seçili satırın değerini (id) olsun: otel (HotelController.php) bir kontrolördeki bir eylem oluşturmak bu mutlaka bu size yardımcı olacaktır deneyin

public function actionMultipleDelete() 
    { 
     $pk = Yii::$app->request->post('row_id'); 

     foreach ($pk as $key => $value) 
     { 
      $sql = "DELETE FROM hotel WHERE hotel_id = $value"; 
      $query = Yii::$app->db->createCommand($sql)->execute(); 
     } 

     return $this->redirect(['index']); 

    } 

çoklu-sil ..

+0

harika, sadece '$ = \' # w4 \ 'yaptığınız için' id = 'w4' 'eklentisini eklemeniz gerekiyor. YiiGridView (\' getSelectedRows \ '); ' –

+0

projemde çalışmıyor. Bu kimliği nasıl = w4 & nereye ?? – Goli

+0

@Nodemon bir göz atın .. https://stackoverflow.com/questions/47844216/delete-multiple-rows-selected-by-checkbox-column?noredirect=1#comment82652658_47844216 – Goli