Yii框架结合sphinx,Ajax实现搜索分页功能示例


Posted in PHP onOctober 18, 2016

本文实例讲述了Yii框架结合sphinx,Ajax实现搜索分页功能的方法。分享给大家供大家参考,具体如下:

效果图:

Yii框架结合sphinx,Ajax实现搜索分页功能示例

控制器:

<?php
namespace backend\controllers;
use Yii;
use yii\web\Controller;
use yii\data\Pagination;
use SphinxClient;
use yii\db\Query;
use yii\widgets\LinkPager;
use backend\models\Goods;
class SouController extends Controller
{
  //显示搜索页面
  public function actionIndex()
  {
    //接受搜索值
    $sou=Yii::$app->request->get('sou');
    $p1=Yii::$app->request->get('p1');
    $p2=Yii::$app->request->get('p2');
    //echo $sou.$p1.$p2;die;
    //sphinx搜索
    $cl = new SphinxClient();
    $cl -> SetServer('127.0.0.1',9312);
    $cl -> SetConnectTimeout(3);
    $cl -> SetArrayResult(true);
    if($sou)
    {
      //只搜索条件
      $cl -> SetMatchMode(SPH_MATCH_ANY);
    }
    else
    {
      //全局扫描
     $cl -> SetMatchMode(SPH_MATCH_FULLSCAN);
    }
    //设置价格(注意:创建索引时,价格属性定义为int)
    if($p1&&$p2)
    {
    $cl->SetFilterRange('price',$p1,$p2);
    }
    //搜索查询关键字
    $res = $cl->Query($sou,"mysql_goods");
    //ajax分页
    $model=new Goods();
    foreach ($res['matches'] as $key => $val)
    {
     $ids[] = $val['id'];
    }
    //查询条件数据
    $query = $model->find()->where(['id'=>$ids]);
    $countQuery = clone $query;
    $pages = new Pagination(['totalCount' => $countQuery->count(),'defaultPageSize'=>3]);
    //分页
    $models = $query->offset($pages->offset)
    ->limit($pages->limit)
    ->all();
    //关键字变红
    foreach($models as $k=>$v)
    {
      $models[$k]['goods_name']=str_replace("$sou","<font color='red'>$sou</font>",$v['goods_name']);//将关键字替换成红色字体
    }
    //显示列表,分配数据
    return $this->render('index', [
       'res' => $models,
       'pages' => $pages,
       'sou'=>$sou,
       'p1'=>$p1,
       'p2'=>$p2
    ]);
   }
}
?>

视图层:

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\widgets\LinkPager;
$form = ActiveForm::begin([
  'action' => 'index.php?r=sou/index',
  'method' => 'get'
]) ?>
<center>
<div id="list">
  商品名称:
  <input type="text" name="sou" value="<?php echo $sou?>">
  价格区间:
  <input type="text" name="p1" value="<?php echo $p1?>">---<input type="text" name="p2" value="<?php echo $p2?>">
  <input type="submit" value="搜索">
  <table border="1" style="width:500px;">
    <tr>
      <th>ID</th>
      <th>商品名称</th>
      <th>商品价格</th>
    </tr>
    <?php foreach($res as $key=>$v){?>
    <tr>
      <td><?php echo $v['id'];?></td>
      <td><?php echo $v['goods_name'];?></td>
      <td><?php echo $v['price'];?></td>
    </tr>
    <?php }?>
 </table>
<!--分页-->
<?= LinkPager::widget(['pagination' => $pages]) ?>
</div>
</center>
<?php ActiveForm::end() ?>
<!--显示-->
<?php $this->beginBlock('test2') ?>
  $(document).on('click', '.pagination a', function(e)
  {
    //阻止page显示,看地址
    e.preventDefault();
    var href = $(this).attr('href');
    $.post(href,function(msg){
      $('#list').html(msg);
    })
  });
<?php $this->endBlock();
$this->registerJs($this->blocks['test2'] , yii\web\View::POS_END)
?>

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
Jun 09 PHP
php给图片加文字水印
Jul 31 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
Yii数据库缓存实例分析
Mar 29 PHP
php自定义函数实现JS的escape的方法示例
Jul 07 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
Oct 29 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 PHP
PHP的imageTtfText()函数深入详解
Mar 03 PHP
php文件上传、下载和删除示例
Aug 28 #PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 #PHP
php中array_slice和array_splice函数解析
Oct 18 #PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 #PHP
Yii框架实现邮箱激活的方法【数字签名】
Oct 18 #PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 #PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 #PHP
You might like
收集的PHP中与数组相关的函数
2007/03/22 PHP
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
PHP答题类应用接口实例
2015/02/09 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
js 调整select 位置的函数
2008/02/21 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
Python安装whl文件过程图解
2020/02/18 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
Python3获取cookie常用三种方案
2020/10/05 Python
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
C#公司笔试题
2014/03/28 面试题
爱心捐款倡议书
2014/04/14 职场文书
节水标语大全
2014/06/11 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
工作简报范文
2015/07/21 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书