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>
yii2 sphinx Ajax搜索分页 关键词的缓存的更多相关文章
- yii中sphinx,Ajax搜索分页
效果图: 控制器: <?phpnamespace backend\controllers; use Yii;use yii\web\Controller;use yii\data\Paginat ...
- Yii 框架ajax搜索分页
要想实现ajax搜索分页 其实很简单 第一步:在 Yii 框架自带的搜索和分页正常运行的情况下,在视图层
- php搜索分页
最近做搜索分页的时候,发现第一页显示正常,点击到下一页的时候,显示结果变成了搜索全部内容. 仔细查看代码,发现当第一次输入关键词,提交到查询控制器的时候,表单提交的关键字不为空,可是点击到下一页的时候 ...
- 利用Linq + Jquery + Ajax 异步分页的实现
在Web显示的时候我们经常会遇到分页显示,而网上的分页方法甚多,但都太过于消耗带宽,所以我想到了用Ajax来分页,利用返回的Json来处理返回的数据, 大大简化了带宽的压力. 先说下思路,无非就是异步 ...
- 02 - Unit08:搜索笔记功能、搜索分页、处理插入数据库乱码问题
搜索笔记功能 按键监听事件 $("#search_note").keydown(function(event){ var code=event.keyCode; if(code== ...
- SSM框架——实现分页和搜索分页
登录|注册 在路上 在路上,要懂得积累:在路上,要学会放下:我在路上!Stay hungry,Stay foolish. 目录视图 摘要视图 订阅 [公告]博客系统优化升级 ...
- Elasticsearch系列---搜索分页和deep paging问题
概要 本篇从介绍搜索分页为起点,简单阐述分页式数据搜索与原有集中式数据搜索思维方式的差异,就分页问题对deep paging问题的现象进行分析,最后介绍分页式系统top N的案例. 搜索分页语法 El ...
- Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)
回顾/:我们已经实现了显示附近的人的功能了,可以多个人看到附近的人页面了 但是还是要进行优化有几个问题:1.我们用户选择了其他的自定义头像之后,在首页可以看到头像的变化,但是在附近的人中头像会变成报错 ...
- Ajax做分页
Ajax做分页 用这种ajax做分页的方法比较简单,把代码直接复制就可以,然后根据实际更改一下里面的参数. .设置分页显示显示的样式,显示效果如下. 复制代码 <style type=" ...
随机推荐
- js 继承inheritance/extends
主要就是<javascript语言精粹>语言精粹中的内容 5.1伪类 Function.prototype.method = function(name,func){ this.proto ...
- bzoj2458: [BeiJing2011]最小三角形(分治+几何)
题目链接:bzoj2458: [BeiJing2011]最小三角形 学习推荐博客:分治法编程问题之最接近点对问题的算法分析 题解:先将所有点按x值排列,然后每次将当前区间[l,r]分成左右两半递归求解 ...
- QQ输入法评价
用户界面: 用户可以通过登录QQ展现自己的QQ头像,可以点击头像显示用户信息,可以中英文切换,全半角切换,打开属性设置,以为软键盘 记住用户选择: 当用户使用QQ输入法时,QQ输入法可以记住用户当前的 ...
- GBK编码相关
如上图.的GBK编码是A3AE, 那么·对应的无符号整数值应该是A*16**3+E*16**2+A+3, 无符号整数值所在地址的第一个自己是A3,第二个字节是AE
- HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置
答案:在将WebDataHelper升级到VS2013是出现的这个错误,这个程序使用了URL重写的技术, 解决方法是:需要将重写的配置,迁移到system.webServer配置节中
- GUID vs INT Debate【转】
http://blogs.msdn.com/b/sqlserverfaq/archive/2010/05/27/guid-vs-int-debate.aspx I recently read a bl ...
- ComboBox绑定
this.ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; this.ComboBox1.AutoCompleteSource ...
- redis sort
redis sort命令用法 1.命令描述返回或保存给定列表.集合.有序集合key中经过排序的元素.排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较. 2.一般sort用法最简单的sort ...
- PHP 长字符串替换操作性能(替换多换注释的代码)
因为写一个css合并工具,去掉注释时,发现正则表达式很难写,最后,还是用php来实现吧,但是一不小心写出来的代码居然报内存超出可用的128m!! 原因是因为我找到/*和*/之后 $str=substr ...
- 创建一个ROS msg
1. msg •msg:msg文件是简单的文本文件,用于描述ROS中消息(消息的各个参数项).用于为不同的编程语言生成有关消息的源代码. •srv:描述服务的文件,由两部分组成:请求和反馈: msg文 ...