本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
本文向大家介绍yii2实现分页,带搜索的分页功能示例,包括了yii2实现分页,带搜索的分页功能示例的使用技巧和注意事项,需要的朋友参考一下 一、模型配置 事例会用到三个models。文章类别表和文章表用gii生成下即可,最后一个是搜索验证模型。其中,只讲下一个联表和搜索验证。其他不用操作。 1.文章表关联 2.搜索模型 common/models/search/创建ArticleSearch.ph
本文向大家介绍Yii框架弹出框功能示例,包括了Yii框架弹出框功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii框架弹出框功能。分享给大家供大家参考,具体如下: 更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总
本文向大家介绍angularjs实现分页和搜索功能,包括了angularjs实现分页和搜索功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了angularjs实现分页和搜索展示的具体代码,供大家参考,具体内容如下 话不多说,上代码 javascript 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Django框架实现的简单分页功能示例,包括了Django框架实现的简单分页功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django框架实现的简单分页功能。分享给大家供大家参考,具体如下: 前面一篇《Django开发的简易留言板》写了个简单的留言板,如果数据量太多的话在一页显示就不那么友好了,本文就是做一个分页显示。 代码在上一篇的基础上修改。 导入分页模块并修改
本文向大家介绍thinkPHP3.2.3结合Laypage实现的分页功能示例,包括了thinkPHP3.2.3结合Laypage实现的分页功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP3.2.3结合Laypage实现的分页功能。分享给大家供大家参考,具体如下: 控制器 视图层 更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》
本文向大家介绍Yii框架分页实现方法详解,包括了Yii框架分页实现方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii框架分页实现方法。分享给大家供大家参考,具体如下: 下家公司用的框架是yii,这几天看了下相关教程,今儿把分页教程写下,最后把tp的分页也给整合进了yii,因为个人觉得yii分页没有tp用的顺手。 首页,在models目录里创建个Auth.php的模型文件,里面写