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 相关文章推荐
基于MySQL体系结构的分析
May 02 PHP
PHP函数http_build_query使用详解
Aug 20 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
php判断用户是否手机访问代码
Jun 08 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
Apr 27 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
php微信扫码支付 php公众号支付
Mar 24 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
详解package.json版本号规则
2019/08/01 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
物业管理毕业生个人的求职信
2013/11/30 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
小学生学习感言
2014/03/10 职场文书
政府个人对照检查材料
2014/08/28 职场文书
融资合作协议书范本
2014/10/17 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
Win11开始菜单添加休眠选项
2022/04/19 数码科技
MySQL批量更新不同表中的数据
2022/05/11 MySQL
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技