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中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
php动态生成函数示例
Mar 21 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 PHP
php头像上传预览实例代码
May 02 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
js select option对象小结
2013/12/20 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
JavaScript的词法结构精华篇
2018/10/17 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
Python配置mysql的教程(推荐)
2017/10/13 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
Python同步遍历多个列表的示例
2019/02/19 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
python tkinter组件摆放方式详解
2019/09/16 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
.NET程序员的数据库面试题
2012/10/10 面试题
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
酒店销售经理岗位职责
2014/01/31 职场文书
旷课检讨书3000字
2014/02/04 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
环保专项行动方案
2014/05/12 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
手术室护士个人总结
2015/02/13 职场文书
地道战观后感2000字
2015/06/04 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis