控制器层

<?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. 一些用于数据整理的excel函数

    我们经常要从外部数据源(如数据库.文本文件或网页等)将数据导入excel中,但是此类数据往往比较混乱,无法满足我们的要求,因此在进行数据分析之前,需要将这些数据进行整理清洗,excel由于将数据的管理 ...

  2. [转]用Python读写Excel文件

    [转]用Python读写Excel文件   转自:http://www.gocalf.com/blog/python-read-write-excel.html#xlrd-xlwt 虽然天天跟数据打交 ...

  3. Unique Binary Search Trees [LeetCode]

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  4. MATLAB随机森林回归模型

    MATLAB随机森林回归模型: 调用matlab自带的TreeBagger.m T=textread('E:\datasets-orreview\discretized-regression\10bi ...

  5. tsne降维可视化

    Python代码:准备训练样本的数据和标签:train_X4000.txt.train_y4000.txt 放于tsne.py当前目录.(具体t-SNE – Laurens van der Maate ...

  6. E-Eating Together(POJ 3670)

    Eating Together Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5579   Accepted: 2713 D ...

  7. HTML中的一些常见的事件句柄

    onclick 所有类似按钮的表单元素和标记<a>及<area>都支持该处理程序.当用户点击元素时会触发它.如果onclick处理程序返回false,则浏览器不执行任何与按钮或 ...

  8. [转]Java 泛型: 什么是PECS(Producer Extends, Consumer Super)

    以下内容转自: 原文链接: stackoverflow 翻译: ImportNew.com- 刘志军 译文链接: http://www.importnew.com/8966.html -------- ...

  9. java 面向对象编程 第20章 XML技术解析

    1.  XML:extended Markup Language  可扩展标记语言,利用标签和子标签方式描述数据. 2.  声明<?xml version=”1.0”?>版本号 注释< ...

  10. NSDateFormatter 根据时间戳求出时间

    NSDateFormatter 根据时间戳求出时间 - (void)detailWithStyle:(NSString*)style time:(NSInteger)time { // NSStrin ...