2015-12-08 6 views
1

Я просто пытаюсь обернуть голову вокруг рамки yii на данный момент, и я создал функцию для одновременного удаления нескольких записей базы данных. По мнению у меня есть сетка с упоминанием каждого элемента и флажок рядом с нимYii Framework - использование CCheckBoxColumn для удаления нескольких

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider, 
    'htmlOptions'=>array(
     'class'=>'' 
    ), 
    'columns'=>array(
... 
array(
    'class'=>'CLinkColumn', 
    'header'=>'Handle', 
    'labelExpression'=>'$data->handle', 
    'urlExpression'=>'Yii::app()->createUrl(".../item/view", array("id"=>$data->id))', 
     ), 
array(
    'class'=>'CCheckBoxColumn', 
    'header'=>'Select', 
    'selectableRows'=>'2', 
     ), 
    ), 

Затем дальше вниз страницы, я хочу кнопку (удалить выбранный), который посылает массив всех элементов к функции удаления. Мои мысли были это было бы что-то похожее на это:

<a href=" 
<?php echo Yii::app()->createUrl('.../item/bulkDelete','array("id" => $data->id)')?>" 
class="btn">Delete Selected</a> 

Но я не понимаю, как получить ссылку для каждого проверяемого элемента вместо:

"id" => $data->id 

, как я называл передать элемент функции просмотра ранее. Если кто-то может помочь, он будет очень признателен.

Edit:

Вид:

$form = $this->beginWidget('CActiveForm', array(
     'id' => 'itemForm', 
     'action' => array('.../item/bulkDelete'), 
     )); 

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider, 
    'htmlOptions'=>array(
     'class'=>'' 
    ), 
array(
    'class'=>'CLinkColumn', 
    'header'=>'Handle', 
    'labelExpression'=>'$data->handle', 
    'urlExpression'=>'Yii::app()->createUrl(".../item/view", array("id"=>$data->id))', 
), 
array(
    'class'=>'CCheckBoxColumn', 
    'header'=>'Select', 
    'selectableRows'=>'2', 
), 
... //More Columns 
), //End of Grid 
... 
echo CHtml::SubmitButton('Delete Multiple'); 
$this->endWidget(); 

Контроллер:

public function actionBulkDelete() 
{ 

    if(isset($_POST['id'])&& !empty($_POST['id'])) 
    { 
     Yii::app()->user->setFlash('success', 'Delete Items'); 
      $this->redirect(array('.../item/index')); 
    } 
    else 
    { 
     Yii::app()->user->setFlash('success', 'No Items Selected'); 
      $this->redirect(array('.../item/index')); 
    } 


} 

ответ

1

Wrap вид сетки внутри формы, и сделать следующие изменения в вашем columns массиве:

$form = $this->beginWidget('CActiveForm', array(
     'id' => 'some-grid-form', 
     'action' => array('myController/myAction'), 
)); 

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider, 
    'selectableRows' => 2, 
    'columns'=>array(
    array(
      'id' => 'id', 
      'class' => 'CCheckBoxColumn', 
     ), 
    //... rest of your columns 
    ), 
    array(
     'class'=>'CButtonColumn', 
    ), 
), 
)); 

echo CHtml::SubmitButton('Multiple Delete'); 
$this->endWidget(); // end form 

А вашего контроллера myAction:

public function actionmyAction() 
    { 
     if(isset($_POST['id']) && !empty($_POST['id'])) { //you'll get all the ids in an array 
      //print_r($_POST['id']); 
      //your delete function here, also add a few validation here to authenticate deletion 
      $ids = $_POST['id']; 
      $criteria = new CDbCriteria; 
      $criteria->addInCondition('id',$ids); 
      MyModel::model()->deleteAll($criteria); 
      //.... render with success flash message etc. 
     } 
    } 
+0

Большое вам спасибо за вашу помощь! это действительно полезно для меня! –

+0

Извините, почему-то 'isset ($ _ POST ['id])' всегда возвращает false –

+0

@AlecGamble вы можете разместить свой код, просто добавьте его в существующий вопрос? – Criesto

 Смежные вопросы

  • Нет связанных вопросов^_^