2015-08-04 2 views
1

У меня есть два cgridview, которые используют ту же модель. Когда я использую фильтры, имена текстовых полей одинаковы (класс модели).yii фильтр в двух cgrdiview с той же моделью

Возможно изменение этого названия?

пример:

$model1 = new ClassName; 
$model2 = new ClassName; 
if(isset($_GET['cgrdiview_1'])) { 
    $model1->attributes = $_GET['cgrdiview_1']; 
} 
if(isset($_GET['cgrdiview_2'])) { 
    $model2->attributes = $_GET['cgrdiview_2']; 
} 

Вместо этого у меня есть:

$_GET['model_class'] 

как для cgridview

ответ

0

Я решил свою проблему с пользовательским фильтром в каждой колонке:

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'cgridview_2', 
    'dataProvider' => $data, 
    'filter' => $filter, 
    'columns'=>array(
     array(
      'name' => 'column1', 
      'filter' => CHtml::textField("cgridview2[column1]", $filter->column1), 
     ), 
     array(
      'name' => 'column2', 
      'filter' => CHtml::textField("cgridview2[column2]", $object->column2), 
     ), 
0

Да, это возможно путем добавления поля идентификатора.

Атрибут id указывает уникальный идентификатор для элемента HTML (значение должно быть уникальным в документе HTML).

Атрибут id чаще всего используется для указания стиля в таблице стилей и JavaScript (через HTML DOM) для управления элементом с определенным идентификатором.

Если вы отметили , вы можете установить id field для CGridview.

По вашему мнению, изменить код CGridview содержать следующее:

'id' => 'cgridview_1' 

Этот код должен быть добавлен в верхней части GridView. Например:

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'cgridview_1', 
    'dataProvider'=>$dataProvider, 
    'columns'=>array(
     'title',   // display the 'title' attribute 
     'category.name', // display the 'name' attribute of the 'category' relation 
     'content:html', // display the 'content' attribute as purified HTML 
     array(   // display 'create_time' using an expression 
      'name'=>'create_time', 
      'value'=>'date("M j, Y", $data->create_time)', 
     ), 
     array(   // display 'author.username' using an expression 
      'name'=>'authorName', 
      'value'=>'$data->author->username', 
     ), 
     array(   // display a column with "view", "update" and "delete" buttons 
      'class'=>'CButtonColumn', 
     ), 
    ), 
)); 
+0

Хорошо, но есть способ отправить cgridview идентификатор хотя запрос? Поскольку мне нужно делать отдельные запросы в соответствии с запрашивающим cgridview и его фильтрами. –

+0

поле идентификатора всегда отправляется в запрос POST/GET, если он находится в вашей форме. Я бы предложил проверить его, выполнив var_dump в вашем контроллере. – ThomasVdBerge

+0

Проблема в том, что эти два cgridview не находятся внутри формы. –

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