yii2 sphinx Ajax搜索分页 关键词的缓存

		
	控制器层

<?php
namespace frontend\controllers;

use Yii;
use yii\web\Controller;
//use frontend\models\Zhan;
use yii\data\Pagination;
use SphinxClient;
use yii\db\Query;
use yii\widgets\LinkPager;
use yii\caching\MemCache;
class SphinxController extends Controller
{
        //搜索   商品名称和价格
	public function actionGoods(){
		$key=Yii::$app->request->post('key',null);
		$mem = new Memcache;
		if($key != ''){
			$sou = md5($key);
			$num = $mem->get($sou);
			if($num){
				if($num < 5){
					$num++;
					$mem->set($sou,$num,60*60);
				} else {
					//$mem->delete($sou);
					$data = $mem->get('sou');
					if($data == ''){
						$data = array();
					}
					if(!in_array($key,$data)){
						$data[] = $key;
						$mem->set('sou',$data,60*60);
					}					
				}
			} else {
				$mem->set($sou,'1',60*60);
			}
		}
		$info = $mem->get('sou');
		$minPrice=intval(Yii::$app->request->post('minPrice'));
		$maxPrice=intval(Yii::$app->request->post('maxPrice'));
		$minTime=Yii::$app->request->post('minTime');
		$minTime=strtotime($minTime);
		$maxTime=Yii::$app->request->post('maxTime');
		$maxTime=strtotime($maxTime);

		$cl = new SphinxClient;
		$goodsmodel = new Goods;

		$cl ->_limit=$goodsmodel->find()->count();
		$cl ->SetServer('127.0.0.1',9312);
		$cl ->SetConnectTimeout(3);
		$cl ->SetArrayResult(true);
		if($key!=null){
			$cl -> SetMatchMode(SPH_MATCH_ANY);
		}else{
			$cl -> SetMatchMode(SPH_MATCH_FULLSCAN);
		}
		//var_dump($num);die;
		
		if($minPrice && $maxPrice){
			$cl -> SetFilterRange('g_price',$minPrice,$maxPrice);
		}
		if($minTime && $maxTime){
			$cl -> SetFilterRange('g_time',$minTime,$maxTime);
		}
		//echo $pages->offset,$pages->limit;die;
		//$cl ->SetLimits($pages->offset,$pages->limit);

		$res=$cl ->query($key,'mysql_goods');
		$pages = new Pagination();
		$pages ->totalCount=$res['total'];
		$pages ->defaultPageSize=3;
		if(isset($res['matches'])){
		    foreach($res['matches'] as $k=>$v){
			$ids[]=$v['id'];
		    }
		    $data=Goods::find()->where(['in','g_id',$ids])->limit($pages->limit)->offset($pages->offset)->asArray()->all();
		    if($key!=null){
		         foreach($data as $k=>$v){
			   $data[$k]['g_name']=$cl ->BuildExcerpts([$v['g_name']],'mysql_goods',$key,['before_match'=>"<font style='font-weight:bold;color:red;'>",'after_match'=>"</font>"])[0];
			 }
		    }
		    //var_dump($data);die;
		}else{
			if($key!=null){
			   $data="未搜索到关于<font style='font-weight:bold;color:red;'>{$key}</font>的数据";				
			}else{
				$data="没有数据";
			}
		}
		if(Yii::$app->request->isAjax){
		   return $this->renderPartial('goods',['pages'=>$pages,'data'=>$data,'minPrice'=>$minPrice,'maxPrice'=>$maxPrice,'minTime'=>$minTime,'maxTime'=>$maxTime,'key'=>$key,'info'=>$info]);	
		}
		return $this->render('goods',['pages'=>$pages,'data'=>$data,'minPrice'=>$minPrice,'maxPrice'=>$maxPrice,'minTime'=>$minTime,'maxTime'=>$maxTime,'key'=>$key,'info'=>$info]);
	}
	
	
}
?>



	
		视图层

<?php
use yii\widgets\LinkPager;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\web\View;

?>
<div id='cont'>
<?php $form = ActiveForm::begin() ?>
<input type="text" name="key" placeholder="<?=$key ?>" >
<input type="text" name="minPrice" placeholder="<?=$minPrice ?>" >minPrice
<input type="text" name="maxPrice" placeholder="<?=$maxPrice ?>" >maxPrice
<input type="text" name="minTime" placeholder="<?=$minTime ?>" >minTime
<input type="text" name="maxTime" placeholder="<?=$maxTime ?>" >maxTime
<?= Html::submitButton('搜索', ['class'=>'btn btn-primary']) ?>
<?php ActiveForm::end() ?>
<div>
	<p>
		<?php if($info){
		foreach ($info as $key => $v) {?>
			<font color="red"><?php echo $v;?></font>

		<?php  } }?>
	</p>

</div>
<?php if(is_array($data)){ ?>
	<table border="1">
		<tr>
			<th>name</th>
			<th>price</th>
			<th>date</th>
		</tr>
	<?php foreach($data as $k=>$v){ ?>
		<tr>
			<th><?=$v['g_name'] ?></th>
			<th><?=$v['g_price'] ?></th>
			<th><?=$v['g_time'] ?></th>
		</tr>	
	<?php } ?>
	</table>
<?php }else{ ?>
	<p><?=$data ?></p>
<?php } ?>

<?php echo LinkPager::widget(['pagination'=>$pages]); ?>
</div>	
<?php $this->beginBlock('abc') ?>
	$(document).on('click','.pagination a',function(e){
		e.preventDefault();
		var url=$(this).attr('href');
		var key=$(':input[name=key]').attr('placeholder');
		var minPrice=$(':input[name=minPrice]').attr('placeholder');
		var maxPrice=$(':input[name=maxPrice]').attr('placeholder');
		var minTime=$(':input[name=minTime]').attr('placeholder');
		var maxTime=$(':input[name=maxTime]').attr('placeholder');
		var data='{';
		if(key!=''){
			data+="'key':'"+key+"',";
		}
		if(minPrice!=''){
			data+="'minPrice':'"+minPrice+"',";
		}
		if(maxPrice!=''){
			data+="'maxPrice':'"+maxPrice+"',";
		}
		if(minTime!=''){
			data+="'minTime':'"+minTime+"',";
		}
		if(maxTime!=''){
			data+="'maxTime':'"+maxTime+"',";
		}
		data+='}';
		//alert(data);
		data=eval('('+data+')');
		$.post(url,data,function(msg){
			$('#cont').html(msg);
		});
	});
<?php $this->endBlock(); $this->registerJs($this->blocks['abc'],View::POS_END)?>

</div>


posted on 2016-04-07 14:09  *孤独的夜行者*  阅读(701)  评论(0编辑  收藏  举报

导航