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的FTP学习(二)
Oct 09 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
Feb 24 PHP
php + nginx项目中的权限详解
May 23 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 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输出表格的实现代码(修正版)
2010/12/29 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
2014/06/06 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
PHP学习记录之数组函数
2018/06/01 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
文本加密解密
2006/06/23 Javascript
javascript 有趣而诡异的数组
2009/04/06 Javascript
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
js实现移动端轮播图
2020/12/21 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
python自定义解析简单xml格式文件的方法
2015/05/11 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
Python File readlines() 使用方法
2018/03/19 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
单位领导证婚词
2014/01/14 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
社团个人总结范文
2015/03/05 职场文书
护士2015年终工作总结
2015/04/29 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
golang中的空slice案例
2021/04/27 Golang
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL