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 相关文章推荐
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
php zlib压缩和解压缩swf文件的代码
Dec 30 PHP
PHP异步调用socket实现代码
Jan 12 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
ThinkPHP关于session的操作方法汇总
Jul 18 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
学习PHP Cookie处理函数
Aug 09 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
laravel migrate初学常见错误的解决方法
Oct 11 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读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
JavaScript异步加载浅析
2014/12/28 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
Python下简易的单例模式详解
2019/04/08 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
python help函数实例用法
2020/12/06 Python
详解python中的异常和文件读写
2021/01/03 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
展会邀请函范文
2014/01/26 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
单方投资意向书
2015/05/11 职场文书
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android