В этой записи было рассказано как реализовать обработку множества строк в таблице сформированной с помощью компонента zii виджета CGridView, теперь немного расширяя функционал расскажем как ,к примеру, удалить выделенные записи из таблицы базы данных MySQL, делать это будем отправляя post запрос из представления и принимая, а так же обрабатывая его в контроллере.
Итак, отправить post запрос можно следующим образом:
$.post( "", { delete_id: $(this).attr("value") }).done(function(result){ alert(result); });
В данном случае в пустых кавычках ничего не пишем, так как отправляем запрос с той же страницы, на которой и находимся, в запросе передаем параметр delete_id в котором содержится id записи в БД которую нам требуется удалить и принимаем результат запроса и выводим.
Далее принимаем этот параметр в соответствующем контроллере и в соответствующем экшене (action):
public function actionTest() { $delete_id = Yii::app()->request->getPost('delete_id'); if(Yii::app()->request->isAjaxRequest){ $result = TestTable::model()->deleteByPk($delete_id); echo CHtml::encode($result); Yii::app()->end(); } else { $this->render('test'); } }
В данном примере мы в переменную $delete_id
получаем id записи которую нужно удалить, далее в Yii::app()->request->isAjaxRequest
проверяем был ли запрос асинхронным, если бы, то выполняем следующие действия:
- Удаляем соответствующую запись и сохраняем в переменную результат действия
- Возвращаем результат выполнения (именно его и выведет на js код)
- Завершаем приложение
Если же запрос к нам пришел не асинхронный, то мы просто отрисовываем представление.
Визуально у вас должно получиться что-то похожее на это:
Теперь остается только привести полный код представления:
<script> function treat() { $(".checkclass").each(function() { if ($(this).prop("checked")) { $.post( "", { delete_id: $(this).attr("value") }).done(function(result){ alert(result); }); } }); } </script> <div style="margin-bottom: -30px;"> <button type="button" onclick="treat();"> <span>Удалить</span> </button> </div> <?php $dd = New test; $SqldataProvider = $dd->get_testtablet_dataProvider(); $this->widget('zii.widgets.grid.CGridView', array( 'dataProvider'=>$SqldataProvider, 'enablePagination' => true, 'ajaxUpdate' => false, 'hideHeader' => false, 'columns'=>array( array( 'class'=>'CCheckBoxColumn', 'selectableRows' => 2, 'checkBoxHtmlOptions' => array('class' => 'checkclass'), ), array( 'name' => 'id', 'value' => 'CHtml::encode($data["id"])', 'type' => 'raw', ), array( 'name' => 'name', 'header' => 'Имя', 'value' => 'CHtml::encode($data["first_name"])', 'type' => 'text', ), array( 'name' => 'Фамилия', 'value' => 'CHtml::encode($data["second_name"])', 'type' => 'raw', ), ), )); ?>
Ну а полный код контроллера расположен чуть выше, кстати для работы вам понадобится еще и модель таблицы TestTable которую можно автоматически сгенерировать в gii.
comments powered by HyperComments