我有一个简单的搜索表单(site / search.php)来将搜索字符串发送到控制器并显示搜索结果(如果可用)。我正在使用CGridView来显示数据。 UPDATE 这是我的视图(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,
));
END UPDATE
我的问题是$ itemList有很多项,GridView会分页。但是,我点击按钮页面[2],浏览器直接到r=site/search&page=2
并且itemList丢失了!
我可以使用ajax直接转到r=site/search&page=2
???
答案 0 :(得分:1)
Yii寻呼机的默认实施会保留请求中的所有 GET 值,但您的搜索表单使用 POST ,因此搜索字词不会包含在分页链接中。尝试将表单方法更改为GET,您将获得所需的行为:
<?php echo CHtml::beginForm(array('site/search'), 'get'); ?>
PS :恕我直言搜索表单应始终使用 GET 方法发送搜索选项,因为它提供了复制包含所有搜索字词的网址的功能,然后将其发送到其他人(例如开发人员)或保存它以进一步复制相同的请求。