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中使用memcache存储session的三种配置方法
Apr 05 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
php上传文件常见问题总结
Feb 03 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
php实现简单的语法高亮函数实例分析
Apr 27 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
PHP中array_keys和array_unique函数源码的分析
Feb 26 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
php测试kafka项目示例
Feb 06 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 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/12/04 PHP
测试您的 PHP 水平的题目
2007/05/30 PHP
PHP5.3新特性小结
2016/02/14 PHP
基于jquery的表格排序
2010/09/11 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
element中的$confirm的使用
2020/04/26 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
重命名批处理python脚本
2013/04/05 Python
Python中的yield浅析
2014/06/16 Python
Python Socket编程入门教程
2014/07/11 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
python如何调用php文件中的函数详解
2020/12/29 Python
详解python中的异常和文件读写
2021/01/03 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
初中体育教学反思
2014/01/14 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
班主任工作总结范文
2015/08/13 职场文书
Python实现文字pdf转换图片pdf效果
2022/04/03 Python