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 相关文章推荐
一键删除顽固的空文件夹 软件下载
Jan 26 PHP
PHP的引用详解
Feb 22 PHP
php中动态变量用法实例
Jun 10 PHP
php多重接口的实现方法
Jun 20 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
Laravel实现搜索的时候分页并携带参数
Oct 15 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
python中logging包的使用总结
2018/02/28 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
Python中创建二维数组
2018/10/17 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
keras中的卷积层&amp;池化层的用法
2020/05/22 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
办公室秘书自我鉴定
2014/01/18 职场文书
音乐教育感言
2014/03/05 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
小学数学国培研修日志
2015/11/13 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript