Heim  >  Artikel  >  Backend-Entwicklung  >  Das Yii-Framework kombiniert Sphinx und Ajax, um die Such-Paging-Funktion example_php example zu implementieren

Das Yii-Framework kombiniert Sphinx und Ajax, um die Such-Paging-Funktion example_php example zu implementieren

WBOY
WBOYOriginal
2016-12-05 13:28:181224Durchsuche

Das Beispiel in diesem Artikel beschreibt, wie das Yii-Framework Sphinx und Ajax kombiniert, um die Such-Paging-Funktion zu implementieren. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Rendering:

Controller:

<&#63;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
    ]);
   }
}
&#63;>

Ebene anzeigen:

<&#63;php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\widgets\LinkPager;
$form = ActiveForm::begin([
  'action' => 'index.php&#63;r=sou/index',
  'method' => 'get'
]) &#63;>
<center>
<div id="list">
  商品名称:
  <input type="text" name="sou" value="<&#63;php echo $sou&#63;>">
  价格区间:
  <input type="text" name="p1" value="<&#63;php echo $p1&#63;>">---<input type="text" name="p2" value="<&#63;php echo $p2&#63;>">
  <input type="submit" value="搜索">
  <table border="1" style="width:500px;">
    <tr>
      <th>ID</th>
      <th>商品名称</th>
      <th>商品价格</th>
    </tr>
    <&#63;php foreach($res as $key=>$v){&#63;>
    <tr>
      <td><&#63;php echo $v['id'];&#63;></td>
      <td><&#63;php echo $v['goods_name'];&#63;></td>
      <td><&#63;php echo $v['price'];&#63;></td>
    </tr>
    <&#63;php }&#63;>
 </table>
<!--分页-->
<&#63;= LinkPager::widget(['pagination' => $pages]) &#63;>
</div>
</center>
<&#63;php ActiveForm::end() &#63;>
<!--显示-->
<&#63;php $this->beginBlock('test2') &#63;>
  $(document).on('click', '.pagination a', function(e)
  {
    //阻止page显示,看地址
    e.preventDefault();
    var href = $(this).attr('href');
    $.post(href,function(msg){
      $('#list').html(msg);
    })
  });
<&#63;php $this->endBlock();
$this->registerJs($this->blocks['test2'] , yii\web\View::POS_END)
&#63;>

Leser, die an weiteren Yii-bezogenen Inhalten interessiert sind, können sich die speziellen Themen auf dieser Website ansehen: „Einführung in das Yii-Framework und Zusammenfassung gängiger Techniken“, „Zusammenfassung des ausgezeichneten PHP-Entwicklungsframeworks“, „Grundlegendes Tutorial für den Einstieg“. mit Smarty-Vorlagen“, „Einführungs-Tutorial zum objektorientierten PHP-Programmierung-Design“, „Zusammenfassung der PHP-String-(String-)Verwendung“, „Einführungs-Tutorial zum PHP+MySQL-Datenbankbetrieb“ und „Zusammenfassung allgemeiner PHP-Datenbankbetriebsfähigkeiten“

Ich hoffe, dieser Artikel hilft Ihnen beim Entwerfen von PHP-Programmen basierend auf dem Yii-Framework.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn