Yii CGridView Пейджер генерировать ссылку неправильно?
У меня есть простая форма поиска (site/search.php), чтобы отправить строку поиска на контроллер и показать результаты поиска, если таковые имеются. Я использую CGridView, чтобы показать данные.ОБНОВЛЕНИЕ Вот мой файл view (site/search.php):
<form name="quickSearchForm" action="<?php echo Yii::app()->createUrl("site/search"); ?>" method="POST">
<div data-role="fieldcontain">
<input type="search" name="searchText" id="searchText" value="<?php echo $searchText; ?>"/>
<input type="submit" name="submitBtn" id="submitBtn" value="search"/>
<a href="#">Advanced</a>
</div>
</form>
<?php
if (!empty(itemList)) {
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'task-grid',
'dataProvider'=>$itemList,
'pager'=>array(
'header' => '',
'firstPageLabel' => '<<',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'lastPageLabel' => '>>',
),
'template'=>'{pager}{items}{pager}',
'columns'=>array(
array(
'name' => 'name',
'value' => '$data->name',
),
array(
'name' => 'date',
'value' => 'date("d/m/Y",strtotime($data->date) )',
),
),
),);
} //end if
?>
В контроллере я использую $searchText для получения данных с помощью CActiveDataProvider, а затем отрисовываю их обратно в search.php.
<?php
$this->render($view = "search", array(
'searchText' => $searchText,
'itemList' => $itemListBySearch,
'taskResult' => $tasks,
));
КОНЕЦ ОБНОВЛЕНИЯ
Моя проблема в том, что $itemList содержит много элементов, GridView будет разбит на страницы. Но я нажимаю на кнопку кнопки [2], браузер направляет r=site/search&page=2
и itemList потерян!
Могу ли я использовать AJAX вместо прямой r=site/search&page=2
???
1 ответ
Реализация по умолчанию в Yii-пейджере сохраняет все значения GET из запроса, но ваша форма поиска использует POST, поэтому поисковый термин не включается в ссылки на страницы. Попробуйте изменить метод формы на GET, и вы получите желаемое поведение:
<?php echo CHtml::beginForm(array('site/search'), 'get'); ?>
PS: ИМХО формы поиска всегда должны использовать метод GET для отправки параметров поиска, потому что он предоставляет возможность скопировать URL-адрес, содержащий все поисковые термины, а затем отправить его кому-то другому (например, разработчикам) или сохранить его для дальнейшего воспроизведения того же самого запрос.