控制器层

<?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>

yii2 sphinx Ajax搜索分页 关键词的缓存的更多相关文章

  1. yii中sphinx,Ajax搜索分页

    效果图: 控制器: <?phpnamespace backend\controllers; use Yii;use yii\web\Controller;use yii\data\Paginat ...

  2. Yii 框架ajax搜索分页

    要想实现ajax搜索分页 其实很简单 第一步:在 Yii 框架自带的搜索和分页正常运行的情况下,在视图层

  3. php搜索分页

    最近做搜索分页的时候,发现第一页显示正常,点击到下一页的时候,显示结果变成了搜索全部内容. 仔细查看代码,发现当第一次输入关键词,提交到查询控制器的时候,表单提交的关键字不为空,可是点击到下一页的时候 ...

  4. 利用Linq + Jquery + Ajax 异步分页的实现

    在Web显示的时候我们经常会遇到分页显示,而网上的分页方法甚多,但都太过于消耗带宽,所以我想到了用Ajax来分页,利用返回的Json来处理返回的数据, 大大简化了带宽的压力. 先说下思路,无非就是异步 ...

  5. 02 - Unit08:搜索笔记功能、搜索分页、处理插入数据库乱码问题

    搜索笔记功能 按键监听事件 $("#search_note").keydown(function(event){ var code=event.keyCode; if(code== ...

  6. SSM框架——实现分页和搜索分页

    登录|注册     在路上 在路上,要懂得积累:在路上,要学会放下:我在路上!Stay hungry,Stay foolish.       目录视图 摘要视图 订阅 [公告]博客系统优化升级     ...

  7. Elasticsearch系列---搜索分页和deep paging问题

    概要 本篇从介绍搜索分页为起点,简单阐述分页式数据搜索与原有集中式数据搜索思维方式的差异,就分页问题对deep paging问题的现象进行分析,最后介绍分页式系统top N的案例. 搜索分页语法 El ...

  8. Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)

    回顾/:我们已经实现了显示附近的人的功能了,可以多个人看到附近的人页面了 但是还是要进行优化有几个问题:1.我们用户选择了其他的自定义头像之后,在首页可以看到头像的变化,但是在附近的人中头像会变成报错 ...

  9. Ajax做分页

    Ajax做分页 用这种ajax做分页的方法比较简单,把代码直接复制就可以,然后根据实际更改一下里面的参数. .设置分页显示显示的样式,显示效果如下. 复制代码 <style type=" ...

随机推荐

  1. jQuery图表开源软件

    jQuery图表插件 jQchart jQchart 是一个jQuery的插件,用来绘制图表的.支持各种形状的图表. 示例代码: == Mini sample == $('#canvasMyID'). ...

  2. Spring 事务机制详解

    原文出处: 陶邦仁 Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考. Spring声明式事务让我们从复杂的事务处理中得到 ...

  3. while, do-while ,switch···case语句的学习与运用

    1.while语句:当···的时候 格式:初始条件           while(循环条件)         {          循环体;          状态改变;         } 相当于 ...

  4. 【北京站】详解Visual Studio 2013:开发iOS及android应用!现场图集

    现场图集: 活动介绍地址:http://huiyi.csdn.net/module/meeting/meeting/info/660/biz

  5. oracle Redhat64 安装

    详细可以参考:http://blog.csdn.net/chenfeng898/article/details/8782679 直接执行如下yum安装命令后,如果再出错,跳到2 yum -y inst ...

  6. VBA解密

    1.关闭要解密的excel文件,新建一个excel文件 2.打开新建的这个Excel,按下alt+F11,打开vb界面,新建一个模块,如图所示 3.将代码复制到这个模块中,代码如下:Private S ...

  7. 表单form的属性,单行文本框、密码框、单选多选按钮

    基础表单结构: <body> <h1> <hr /> <form action="" name="myFrom" en ...

  8. 用while循环语句计算1!+2!+……20!之和

    package nothh; public class mmm { public static void main(String[] args) { // TODO Auto-generated me ...

  9. c# MVC在WEB.Config中配置MIME

    在IIS中,默认没有添加.json格式的MIME,所有无法读取服务器中的.json格式的文件,返回结果404 方式一:在IIS中手动添加MIME 1.点击MIME进入MIME列表 2.添加MIME 3 ...

  10. ASP.NET MVC 4使用Bundle的打包压缩JS/CSS

    打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...