yii中sphinx,Ajax搜索分页

mac2022-06-30  25

效果图:

控制器:

<?phpnamespace 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        ]);         }}?>

视图层:

<?phpuse 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)?>

转载于:https://www.cnblogs.com/shaohuixia/p/5381612.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)