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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
php 远程关机操作的代码
Dec 05 PHP
php 字符串压缩方法比较示例
Jan 23 PHP
php通过字符串调用函数示例
Mar 02 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
Apr 24 PHP
详解PHP编码转换函数应用技巧
Oct 22 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
PHP多进程简单实例小结
Nov 09 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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
用session做客户验证时的注意事项
2006/10/09 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
PHP使用递归生成文章树
2015/04/21 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
javascript防篡改对象实例详解
2017/04/10 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
Python实现的计数排序算法示例
2017/11/29 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
Python打印不合法的文件名
2020/07/31 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
台湾三立电视电商平台:电电购
2019/09/09 全球购物
民族团结先进集体事迹材料
2014/05/22 职场文书
开展读书活动总结
2014/06/30 职场文书
擅自离岗检讨书
2014/09/12 职场文书
解除劳动合同证明书
2014/09/26 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
考察邀请函范文
2015/01/31 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
建筑工程催款函
2015/06/24 职场文书