2017-04-11 11:16:56 2268次浏览 3条回答 1 悬赏 10 金钱

配置如下,URL链接也是正确的 如:r=search/index&keyword=网站建设&page=4
但是结果始终之在第一页:200.png
请问是哪里错了。

`public function actionIndex(){

$sphinx = new SphinxClient();
$sphinx->setMatchMode(SPH_MATCH_ANY);
$sphinx->SetServer ( 'localhost', 9312 );//coreseek的主机名和端口
$sphinx->SetArrayResult ( true );//设置返回结果集为php数组格式
$key=Yii::$app->request->post('keyword','网站建设');
if(!$key){
	$key=Yii::$app->request->get('keyword');
}
$result = $sphinx->query ($key, "mysql");//xxxx是查询的内容,mysql是测试的配置文件中系统默认的类名

$total=$result['total'];
$config = ['params' => ['keyword' => $key],'totalCount'=>$total,'defaultPageSize'=>10];
$pagination = new Pagination($config);
$sphinx->SetLimits($pagination->offset,$pagination->limit,1000);
$sphinx->SetMaxQueryTime(10);//最大搜索时间
$result = $sphinx->query ($key, "mysql");
if($result['total']){
	$ids = ArrayHelper::getColumn($result['matches'], 'id');
}else{
	$ids =[];
}
$rows=Company::find()->where(['in','id',$ids])->asArray()->all();
    return $this->render('index',[
        'rows'=>$rows,
        'pagination'=>$pagination,
        'total'=>$total,
        'keyword'=>$key,
    ]);
}

`

补充于 2017-04-11 13:32

`

	<div class="row search-total">为您找到超过<?=Html::encode($total)?>条结果</div>
	<div class="row left-content">
		<div class="col-xs-8 padding0">
		<?php
			foreach ($rows as $value) {
				$value['url']=str_replace(' ', '', $value['url']);
				echo "<ul class='list-unstyled '>";
					echo "<li class='search-title'><a  target='_blank' href='http://".$value['url']."'>".$value['name']."</a></li>";
					echo "<li class='search-desc'>".$value['content']."</li>";
					echo "<li class='search-url'><a  target='_blank' href='http://".$value['url']."'>".$value['url']."</a></li>";
				echo "</ul>";
			}
		?>
		</div>
		<div class="col-xs-4"></div>
	</div>
	<div class="row">
		<?php
		echo LinkPager::widget([
		    'pagination' => $pagination,
		]);
		?>
	</div>
</div>`

最佳答案

  • YiiNewer 发布于 2017-04-11 14:16 举报

    可以这样解决,自己手动获取$page

    $page = (int)Yii::$app->request->get('page') - 1;
    

    再把它放到Pagination的配置里面去

    $config = ['params' => ['w' => '关键字'], 'page' => $page]
    new Pagination($config);
    

    你记得,本身不配置params的时候,它都是从get参数里去取的,所以在你的引导超链接里岛上w关键字,在控制器里去拿到查询,这样分页会自带这个关键字的。这样的分页,什么都不用配置,感觉比较好

    1 条回复
    回复于 2017-04-11 22:08 回复

    感谢!!!

  • 回答于 2017-04-11 11:49 举报

    点击第二页也还是显示的选中第一页吗?那展示出来的数据是第一页的还是第二页的?视图的代码呢

    1 条回复
    回复于 2017-04-11 13:37 回复

    不管点哪一页,都是显示的第一页,展示的数据也是第一页。但是如果不加 'params' => ['keyword' => $key],

    显示的,展示的都是正确的,只是没有办法传递关键词。

  • 回答于 2017-08-04 11:06 举报

    请问你的这个sphinx是怎么配置的,能就这样实例化的用?

您需要登录后才可以回答。登录 | 立即注册
okokad
经理

okokad

注册时间:2016-02-29
最后登录:2017-07-01
在线时长:49小时26分
  • 粉丝12
  • 金钱25
  • 威望80
  • 积分1315

热门问题