效果图:

控制器:

<?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中sphinx,Ajax搜索分页的更多相关文章

  1. yii2 sphinx Ajax搜索分页 关键词的缓存

    控制器层 <?php namespace frontend\controllers; use Yii; use yii\web\Controller; //use frontend\models ...

  2. Yii 框架ajax搜索分页

    要想实现ajax搜索分页 其实很简单 第一步:在 Yii 框架自带的搜索和分页正常运行的情况下,在视图层

  3. yii中sphinx索引配置解析

    #MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/#请先将var/test/documents.sql导入数据库,并配置好 ...

  4. 在yii中使用分页

    yii中使用分页很方便,如下两种方法: 在控制器中: 1. $criteria = new CDbCriteria(); //new cdbcriteria数据库$criteria->id = ...

  5. Javascript and AJAX with Yii(在yii 中使用 javascript 和ajax)

    英文原文:http://www.yiiframework.com/wiki/394/javascript-and-ajax-with-yii /*** http://www.yiiframework. ...

  6. thinkphp中的ajax分页

    thinkphp中用ajax分页和普通的ajax分页的区别在于处理位置的不同,thinkphp是在控制器的方法中处理ajax传的值,然后返回数据.下面是一个点击事件触发后,显示的内容用ajax分页. ...

  7. 2018.2.28 PHP中使用jQuery+Ajax实现分页查询多功能如何操作

    PHP中使用jQuery+Ajax实现分页查询多功能如何操作 1.首先做主页Ajax_pag.php 代码如下 <!DOCTYPE html> <html> <head& ...

  8. PHP中使用jQuery+Ajax实现分页查询多功能操作

    1.首先做主页面Ajax_pag.php 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UT ...

  9. ecshop后台通过ajax搜索原理

    ecshop的搜索其实是功能十分强大的,但是ecshop搜索功能前台和后台还不大一样,前台主要是通过get方式,提交的url进行分页,而在ecshop的后台,则是接受表单的搜索条件,然后通过js发布到 ...

随机推荐

  1. jquery easyui Combobox 实现 两级联动

    具体效果如下图:

  2. Mongo中更新总结

    mongo中的更新其实也可以当做添加来使用 mongo中跟新有几种方式 save.update.upsert 执行save的时候如果这个文档有_id这个参数,save 会调用 upsert,否则会调用 ...

  3. JVM GC (一)

    1. 先来说GC工作在哪块区域呢? 程序计数器,虚拟机栈(也就平时所说的栈), 本地方法栈这三区域随着线程而生,随着线程而灭,出栈入栈的操作,在栈中分配配的多少内存都具 有确定性,在这几个区域就不用考 ...

  4. 说说怎么写clean code

    前两天参加了公司组织的一个培训,主题是“如何写出好的代码” ,刚看到这个主题,第一反应是又不知道是哪个培训机构来忽悠钱的!老大安排了,就去听听呗. 说实在的,课程内容没有什么新鲜的东西,就是讲讲如何发 ...

  5. 采用asyncore进行实时同步

    最近在维护项目的时候,发现某个实时数据同步功能非常容易失败,故静下心来彻底弄清楚该设计的实现原理,以及其中用到的python异步sockethandler : asyncore. 实时数据同步功能的设 ...

  6. 转:ASP.NET MVC扩展之HtmlHelper辅助方法

    1.什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class F ...

  7. Android笔记:利用InputStream和BufferedReader 进行字节流 字符流处理

    通过socket获取字节流处理时最初使用的是BufferedReader和PrintWriter  这种方式在解析字符串时是比较方便的 但是在处理字节时不够方便最终还是回归到InputStream和O ...

  8. SQL Server 用SQL语句查找某个表的触发器

    select   *   from   sysobjects   where   xtype='TR'   and   parent_obj=object_id('表名') 再用sp_helptext ...

  9. Selenium2学习-037-WebUI自动化实战实例-IE浏览器显示比例问题:org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. Browser zoom level was set to 94%. It should be set to 100%

    好久没有写博文了,今天在给部门新人演示 Selenium WebDriver 启动其支持的各种浏览器时,启动 IE 时总是无法打开对应的百度网址,页面如下所示:

  10. MVC4怎么设置@Html.TextBoxFor这样的输入框的css样式

    在传统webForm中,输入框的这样的: <input id="userName" name="userName" type="text&quo ...