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 选项及相关信息函数库
Dec 04 PHP
Godaddy空间Zend Optimizer升级方法
May 10 PHP
Windows下XDebug 手工配置与使用说明
Jul 11 PHP
php使用websocket示例详解
Mar 12 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
php实现比较全的数据库操作类
Jun 18 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
Mar 10 PHP
php简单实现sql防注入的方法
Apr 22 PHP
PHP实现验证码校验功能
Nov 16 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 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实现分页的一个示例
2006/10/09 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
Vue实现路由跳转和嵌套
2017/06/20 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python抓取网页内容示例分享
2014/02/24 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
python英语单词测试小程序代码实例
2019/09/09 Python
Python装饰器用法与知识点小结
2020/03/09 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
大学生求职自荐信
2013/12/12 职场文书
计算机专业学生求职信分享
2013/12/15 职场文书
政府个人对照检查材料
2014/08/28 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS