Yii架構結合sphinx,Ajax實現搜尋分頁功能樣本_php執行個體

來源:互聯網
上載者:User

本文執行個體講述了Yii架構結合sphinx,Ajax實現搜尋分頁功能的方法。分享給大家供大家參考,具體如下:

效果圖:

控制器:

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

更多關於Yii相關內容感興趣的讀者可查看本站專題:《Yii架構入門及常用技巧總結》、《php優秀開發架構總結》、《smarty模板入門基礎教程》、《php物件導向程式設計入門教程》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》

希望本文所述對大家基於Yii架構的PHP程式設計有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.