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=" ...
随机推荐
- JavaWeb基础: 第一个Web应用(Servlet)
Servlet的生命周期 <servlet-mapping>和<servlet> Web应用的用户是通过指定浏览器中URL地址来访问Web应用提供的静态或者是动态资源,如果Se ...
- VirtualBox – Error In supR3HardenedWinReSpawn 问题解决办法
转:http://chenpeng.info/html/3510---------VirtualBox – Error In supR3HardenedWinReSpawn---------<h ...
- Tomcat数据库连接池的配置方法总结
Tomcat数据库连接池的配置方法总结 数据库连接是一种关键的有限的昂贵的资源,这在多用户网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标 ...
- css3导航-磊哥
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- synchronized和static synchronized的比较
群里讨论的一个问题,网上别人已经贴出了很详细的说明,这里补充记录下,后面加入个人测试代码. 起因:1月份的时候看群里讨论一道问题,问题内容如下: 一个日本作者-结成浩的<java多线程设计模式& ...
- discuzx3.1中引用 Jquery报错的解决办法
我们可以引用jQuery给JQ赋予一个变量var jq = jQuery.noConflict(); 修改成为:<script type="text/javascript"& ...
- 关于linux服务器的批量维护、批量升级、
由于版权费用原因,众多中小服务器采用linux服务器进行功能处理.在进行批量升级.更新业务程序时.可以采用如下批量方案: 1.打包成rpm包,并配置yum源服务器,以支持个人的yum服务器进行处理.一 ...
- MyEclipse10.X 的破解过程详细图解
http://wenku.baidu.com/view/423e95056c85ec3a87c2c512.html
- eclipse debug 过滤一些包
eclipse debug java程序的时候, 我们按F5的时候,常常会进入java自带类库里,这些类库并不是我们需要debug的代码,这样会影响debug的效率,我们可以在eclipse里设置,过 ...
- POJ 1068 Parencodings 模拟 难度:0
http://poj.org/problem?id=1068 #include<cstdio> #include <cstring> using namespace std; ...