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 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
PHP 判断常量,变量和函数是否存在
Apr 26 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
php 使用GD库为页面增加水印示例代码
Mar 24 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 PHP
Laravel5中contracts详解
Mar 02 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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 header()函数语法及使用代码
2013/11/04 PHP
PHP可变变量学习小结
2015/11/29 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
简单谈谈ES6的六个小特性
2016/11/18 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
低版本中Python除法运算小技巧
2015/04/05 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
python后端接收前端回传的文件方法
2019/01/02 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
python制作图片缩略图
2019/04/30 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
《灰椋鸟》教学反思
2014/04/27 职场文书
保安公司服务承诺书
2014/05/28 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
上下班时间调整通知
2015/04/23 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js