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 相关文章推荐
php中文本数据翻页(留言本翻页)
Oct 09 PHP
PHP之COOKIE支持详解
Sep 20 PHP
rephactor 优秀的PHP的重构工具
Jun 09 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
Jun 24 PHP
php图片上传类 附调用方法
May 15 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
PHP 类与构造函数解析
Feb 06 PHP
php项目中类的自动加载实例讲解
Sep 12 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 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通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
Python getopt模块处理命令行选项实例
2014/05/13 Python
简单总结Python中序列与字典的相同和不同之处
2016/01/19 Python
Python Requests安装与简单运用
2016/04/07 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
python计算列表内各元素的个数实例
2018/06/29 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
医院节能减排方案
2014/06/13 职场文书
老干部工作先进事迹
2014/08/17 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
分享提高 Python 代码的可读性的技巧
2022/03/03 Python