Перекопал документацию и примеры но так и не могу найти КАК сделать.
Обычно описано как выводить НЕСКОЛЬКО таблиц в один грид а у меня задача противоположная ОДНУ таблицу в несколько гридов.
Суть: на странице во вьюхе выводится несколько виджетов GridView использующие ОДНУ таблицу описанную одной моделью (ТАБЛИЦА-1).
Виджеты вывожу в цикле подключая через renderPartial отдельный файлик.
ТАБЛИЦА-1 - справочник источник записей для выбора (использую колонку чекбоксов для выбора нужных записей).
Проблема в том, что модель одна и таже, потому и поля в таблицах грид имеют одинаковые имена и соответственно имя поля получаемое в контроллере привязано к модели таблицы (в формате ИМЯ_МОДЕЛИ[ИМЯ_ПОЛЯ].
В итоге когда например в первой табличке грид я использую фильтр записей (в шапке таблицы ввожу значение) и нажимаю ентер, то на сервер отправляются поля шапки ВСЕХ грид таблиц страницы
и поскольку они имеют одинаковые имена то введенное значение затирается значениями последней таблички грид.
По идее достаточно задавать имя полей для грид с уникальной приставкой для каждой таблички, но грид как я понял автоматом подставляет эту приставку на основе имени модели таблицы источника данных для грид.
Вот и вопрос  А КАК управлять этим  именем
? или как решить проблему?  Не  создавать же руками кучу  моделей  для  каждой грид таблички, если их будет много то это тоскливо (((.
Пробовал цеплять приставку (ИД грида) к имени полей но тогда ругается что такого поля нет в модели.
Возможно все банально решается, но как не пойму.
Фрагмент скриптов как все это крутится:
в контроллере обработчик запроса на фильтрацию записей:
/**
 * Обновление Grid таблицы после Ajax запроса
 *
 * @param string $id - ID выбраной записи
 * @param string $table - имя выбраной таблицы
 */
public function actionUpdate_grid_ajax()
{
	//адрес возврата
	//$urlRefer = $_SERVER['HTTP_REFERER'];
	$urlRefer = Yii::app()->sesion->getParam('urlRef');
	
	$nameTable = Yii::app()->request->getParam('table');
	$nameModelForm = Yii::app()->request->getParam('nameModelForm');
	$nameFieldForm = Yii::app()->request->getParam('nameFieldForm');
	$idRow = Yii::app()->request->getParam('id');
	$idTableGrid = Yii::app()->request->getParam('idGrid');
	$ajaxUrl = Yii::app()->request->getParam('ajaxurl');
	
	$arrayRequestCheckBoxes = Yii::app()->request->getParam($idTableGrid);
	$arrayCheckBoxes = $arrayRequestCheckBoxes['check_boxes_id'];
	
	//подключение модели  ТАБЛИЦЫ
	$nameModelTable = strtolower($nameTable);
	$nameModelTable = ucfirst($nameModelTable); //имя модели ТАБЛИЦЫ
	$modelTable = new $nameModelTable; //модель ТАБЛИЦЫ
	
	//подключение модели  ФОРМЫ
	$modelForm = new $nameModelForm;
	
	//массив настроек полей ФОРМЫ
	$arraySetingsFieldsForm = $modelForm->fieldsSettings();
	
	//подключение модели  таблицы источника
	$nameTableSource = $arraySetingsFieldsForm[$nameFieldForm]['tableSource'];
	$nameModelSource = ucfirst($nameTableSource);
	$modelSource = new $nameModelSource;
	
	//массив описания настроек полей таблицы источника
	$arraySetingsFieldsTableSource = $modelSource->fieldsSettings();
	
	//массив  полученных данных фильтра сортировки записией таблицы источника
	$arrayParamRequestModelSource = array();
	
	//формируем условие поиска
	$criteriaRowsSource = new CDbCriteria;
	
	//вводим в модель данные  фильтра столбцов таблицы Grid
	if (is_array($arrayParamRequestModelSource)) {
		foreach ($arrayParamRequestModelSource as $nameFieldSource => $valueField) {
			if ($valueField != '' && !is_null($valueField)) {
				if ( ($arraySetingsFieldsTableSource[$nameFieldSource]['settings']['type'] == TYPE_FIELD_FORM_TEXT)
				|| ($arraySetingsFieldsTableSource[$nameFieldSource]['settings']['type'] == TYPE_FIELD_FORM_TEXTAREA)
				){
					$criteriaRowsSource->compare($nameFieldSource, $valueField, true, 'LIKE');
				}
				else {
					$criteriaRowsSource->compare($nameFieldSource, $valueField);
				}
			}
		}
	}
	
	//добавляем условия  выбора  записей
	$listValue = $modelSource->getListSource(
			$arraySetingsFieldsForm[$nameFieldForm]['tableValueFilter'], //таблица источник значения
			$arraySetingsFieldsForm[$nameFieldForm]['fieldValueFilter'], //поле источник значения
			$idRow
	); //массив список значений для выбора
	
	$modeSelect = $arraySetingsFieldsForm[$nameFieldForm]['modeSelectFilter'];
	//
	if ($modeSelect == CODE_ENABLE) {
		//селект выбранных
		$criteriaRowsSource->addInCondition(FIELD_ID, explode(",", $listValue));
	}
	else {
		//исключение выбранных
		$criteriaRowsSource->addNotInCondition(FIELD_ID, explode(",", $listValue));
	}
	
	$nameFieldPageCount = 'pageCount_'.$nameFieldForm; //имя  поля выбора числа записей в списке
	$sessionPageCount = Yii::app()->session->get($nameFieldPageCount);
	
	//выбранные записи из талицы источника
	$dataProviderSource = new CActiveDataProvider(
			$nameTableSource,
			array(
					'criteria' => $criteriaRowsSource,
					'pagination'=>array(
							'pageSize' => (!is_null($sessionPageCount)) ? $sessionPageCount : ConfigSite::$_defPageCount,
					),
			)
	);
	//вывод  таблицы записей из БД
	echo $this->renderPartial('/admintable/_sel_rows_grid',
			array(
					'arrayData'=>array(
							'dataProvider' => $dataProviderSource, //выбранные записи из таблицы источника
							'model'        => new $modelSource,  //модель талицы источника данных
							'table'        => $modelTable->tableName(),  //имя таблицы сохранения записи
							'idRow'        => $idRow,  //ID записи редактируемой в форме
							'idTableGrid'  => $idTableGrid, //ID Таблицы Grid
							'ajaxUrl' 	   => $ajaxUrl, //URL обработчика Ajax обновления Grid
					)
			)
			, false, true
	);
}
вызов в основном файле вьюхи (в цикле) файлика: _sel_rows_grid.php
…
//вывод  таблицы записей из таблицы БД
echo $this->renderPartial(
	'/admintable/_sel_rows_grid', 
	array(
		'arrayData'=>array(
			'dataProvider' => $dataProviderSource, //выбранные записи из таблицы источника
			'model'        => new $modelSource,  //модель талицы источника данных
			'table'        => $modelTable->tableName(),  //имя таблицы сохранения записи
			'idRow'        => $modelForm->id,  //ID записи в таблице сохранения записи
			'idTableGrid'  => $idTableGrid, //ID Таблицы Grid
			'ajaxUrl' 	   => $ajaxUrl, //URL обработчика Ajax обновления Grid
		)
	)
);
…
Подключаемый файлик: _sel_rows_grid.php
<?php
/**
 *  Шаблон таблицы выбора записей в формате  Grid таблицы
 * 
 */
//Входные данные:
$arrayData = $arrayData; //массив входных данных 
$model = $arrayData['model']; //модель текущей талицы
$dataProvider = $arrayData['dataProvider']; //выбранные записи из таблицы текущей моделис учетом фильтра
$idTableGrid = $arrayData['idTableGrid']; //ID Таблицы Grid
$tableSave = $arrayData['table']; //имя таблицы сохранения записи
$idRowTableSave = $arrayData['idRow']; ////ID записи в таблице сохранения записи
$ajaxUrl = $arrayData['ajaxUrl']; //URL обработчика Ajax обновления Grid
$arraySettingsTable = $model->tableSettings(); //массив описания настроек текущей таблицы
$nameTable = $arraySettingsTable['name']; //имя таблицы в БД
//массив описания настроек полей таблицы
$arraySetingsFields = $model->fieldsSettings();
//массив список порядка отображения полей
$arrayNameFieldView = ($arraySettingsTable['settings']['select']['fields'] != '') ? $arraySettingsTable['settings']['select']['fields'] : array();
//формирование массива списка отображаемых полей таблицы с учетом порядка отображения
if (count($arrayNameFieldView) == 0) {
	foreach ($arraySetingsFields as $nameField => $arrayParamField)
	{
		$arrayNameFieldView[] = $nameField;
	}
}
//СКРИПТ управления активации Датапикера (при ОБНОВЛЕНИИ СТРАНИЦЫ)
$datePickerUpdate = NULL;
//формирование массива описания полей для таблицы Grid
$arrayColumnsTable = array();
//добавляем колонку поля чекбокса
$arrayColumnsTable[] = array(
	'id'=>$idTableGrid.'_check_boxes',
	'checked'=>"0", //значение по умолчанию (0-не помечена)
	'class'=>'CCheckBoxColumn', //используем стандартные CCheckBoxColumn элементы Yii
	'selectableRows' => 2, // из какого по счету столбца брать значения для поля value
	'checkBoxHtmlOptions' => array('class' => 'checkclass', 'name'=>$idTableGrid.'[check_boxes_id][]'),
	'htmlOptions'=>array('class'=>'group-checkbox-column'),
);
?>
<?php
//перебор имен полей для колонок таблицы
foreach ($arrayNameFieldView as $key => $nameField) {
	//массив настроек текущего поля таблицы
	$arrayParamField = $arraySetingsFields[$nameField];
	
	//общие пераметры для всех полей
	$arrayParamColumnsTable = array(
		'name' => $arrayParamField['name'], //имя поля в таблице БД 
		'header' => $arrayParamField['label'], //имя Колонки для поля
		//поле фильтра
		'filter' => $model->$nameField,//'', // оставляем фильтр по УМОЛЧАНИЮ пустым 
		'htmlOptions' => $arrayParamField['settings']['htmlOtions'], //HTML опции форматироывания поля по умолчанию
	); 
	
	//вывод для поля типа 'select'
	if ( $arrayParamField['settings']['type'] == 'select') {
		//замена  отображаемого значения Название значения  вместо ID значения для  полей содержащих ID записи из справочника
		$arrayParamColumnsTable['value'] = '$data->convert_IdValue("'.$arrayParamField["settings"]["table"].'", "title", "$data->'.$arrayParamField['name'].'")';
		
		// генерируем фильтр просто подставив обычный массив состоящий из пар ID=>наименование
		// ВАЖНО!!! код не нужно указывать в кавычках как в value!!!!
		$arrayParamColumnsTable['filter'] =  $arrayParamField['settings']['listData'];
	}
	
	//вывод для поля типа 'data'
	if ( $arrayParamField['settings']['type'] == TYPE_FIELD_FORM_DATE) {
		// + не забудьте указать в своих скриптах код afterAjaxUpdate для работы фильтра даты
		$arrayParamColumnsTable['filter'] =  $this->widget(
			'zii.widgets.jui.CJuiDatePicker', 
			array(
				'model' => $model,
				'attribute' => $nameField,
				'language' => 'ru',
				'options' => array(
					'showAnim' => 'fold',
					'dateFormat' => 'yy-mm-dd',
					'changeMonth' => 'true',
					'changeYear' => 'true',
					'showButtonPanel' => 'true',
				),
				'htmlOptions' => array(
					'id' => $nameField,
					'size' => '10',
				),
			),
			true
		);
		$datePickerUpdate = "function() {
			jQuery('#".$nameField."').datepicker(
				jQuery.extend(
					jQuery.datepicker.regional['ru'], {
						'showAnim':'fold',
						'dateFormat':'yy-mm-dd',
						'changeMonth':'true',
						'showButtonPanel':'true',
						'changeYear':'true'
					}
				)
			);
		}";
	}
	
	//вывод для поля типа 'datetime'
	if ( $arrayParamField['settings']['type'] == TYPE_FIELD_FORM_DATETIME) {
		$arrayParamColumnsTable['filter'] =  '';
	}
	
	//вывод для поля СТАТУС
	if ($arrayParamField['name'] == 'status_id') {
		$arrayParamColumnsTable['class'] = "ext.Status_id"; //обработчик значения поля
	}
	//сохраняем итоговый блок описания столбца таблицы
	$arrayColumnsTable[] = $arrayParamColumnsTable;
}
//массив описания настроек кнопок
$arrayButtons = array();
//массив списка шаблонов используемых кнопок
$template = array();
//массив описания кнопок управления записью
$arraySettingsButtonRow = array(
 	'info' => array(
 		'label'=>'просмотреть',
 		'imageUrl'=>ICON_VIEW_32,
 		'options'=>array('style'=>"margin-left:5px;", 'title'=>'Просмотреть запись'),
 		'url'=>'Yii::app()->createUrl("admintable/table_view/table/$data->code")',
 	),
);
if (is_array($arraySettingsButtonRow) && (count($arraySettingsButtonRow)>0) ){
	//формируем массив описания кнопок для Grid
	foreach ($arraySettingsButtonRow as $codeButton => $arrayParamButton) {
		if ( !isset($arraySettingsTable['settings'][$codeButton]['status'])
		|| ((isset($arraySettingsTable['settings'][$codeButton]['status']))
				&& ($arraySettingsTable['settings'][$codeButton]['status'] == TRUE)
		)){
			$arrayButtons[$codeButton] = $arrayParamButton;
			$template[] = $codeButton;
		}
	}
	
	//формирование строки списка шаблонов кнопок
	$templateList = '';
	foreach ($template as $key => $val) {
		$templateList .= '{'.$val.'}'; 
	}
	
	//Кнопки управления записью
	$arrayColumnsTable[] =	array(
		'class'              => 'CButtonColumn',
		'header'             => 'Управление',//наименование колонки
		'htmlOptions'        => array('style'=>'text-align: center; width:150px;' ),
		'template'           => $templateList, //строка список шаблонов кнопок
		'buttons'            => $arrayButtons,
	 );
}
//Дополнительная Настройка офрмления полей отображаемой таблицы
if(isset($arrayColumnsTable['id'])) {
	//замена настроек по умолчанию
	$arrayColumnsTable['id']['htmlOptions'] = array('style'=>'text-align: center; width:50px; font-weight: bold; font-size: 18px;');
}
 
//вывод  таблицы записей из БД 
$this->widget('zii.widgets.grid.CGridView', 
	array(
		'id' => $idTableGrid,
		
		//обновление таблицы после Ajax запроса
		'ajaxUpdate' => true,
		
		//URL  обработчика запроса обновления таблицы (полсе фильтрации)
		'ajaxUrl' => array($ajaxUrl),
		
		// источник данных		
		'dataProvider' => $dataProvider,
		// фильтр
		'filter' => $model,
		
		//Устанавливаем позицию фильтра
		'filterPosition' => 'body', //под названием столбца 
		
		// текст описывающий общее количество элементов и количество элементов на текущей странице пагинатора
		'summaryText' => "Записи {start}—{end} из {count}",
		
		// текст выводимый при отсутствии записей в БД или когда все записи не удовлетворяют значениям фильтров
		'emptyText' => 'Записи не найдены',
		// заголовок пагинатора
		'pager'=>array(
				'header'=>'Навигация: '
		),
		// при каждом обновлении запускаем jQuery скрипт для датапикера
		'afterAjaxUpdate' => $datePickerUpdate,
		
		//массив описания и настроек столбцов, которые должны выводиться
		'columns' => $arrayColumnsTable,
	)
);