2009-12-17 11 views
0

Je dois créer une liste déroulante à l'aide de CAutoComplete. Tout est réglé et fonctionne très bien, voici mon code de l'action:Yii: Personnaliser les résultats de CAutoComplete

<?php 
    public function actionSuggestCharacter() { 
     if(Yii::app()->request->isAjaxRequest && isset($_GET['q'])) { 
      $name = $_GET['q']; 
      $criteria = new CDbCriteria; 
      $criteria->condition='`Character` LIKE :keyword'; 
      $criteria->params=array(':keyword'=>"$name%"); 
      $criteria->limit = 5; 
      $suggestions = zCharacter::model()->findAll($criteria); 
      $returnVal = ''; 
      foreach($suggestions as $suggestion) { 
       $returnVal .= $suggestion->Character."\n"; 
      } 
      if (isset($suggestion)) { 
       echo $returnVal; 
      } 
      $criteria->condition='`Character` LIKE :keyword'; 
      $criteria->params=array(':keyword'=>"%$name%"); 
      $criteria->limit = 5; 
      $suggestions = zCharacter::model()->findAll($criteria); 
      $returnVal = ''; 
      foreach($suggestions as $suggestion) { 
       $returnVal .= $suggestion->Character."\n"; 
      } 
      if (isset($suggestion)) { 
       echo $returnVal; 
      } 
     } 
    } 
?> 

Qu'est-ce que ce code fait est qu'il montre les 5 premiers matchs avec le mot-clé au début et les 5 prochains matchs avec le mot-clé dans n'importe où.

Exemple. Disons un type d'utilisateur dans le champ d'entrée « pdd » (ne pas vraiment d'importance, pourrait être tout texte), de sorte que les résultats retournés par autocomplete ressembleront:

1. pddtext... 
2. pddtext... 
3. pdd_some_other_text 
4. pdd_text 
5. pdd_text 
1. text_text_pdd 
2. text_pdd_text 
3. etc... 

Le problème est que je besoin de les séparer deux blocs par une sorte de ligne (<hr> ou <div> avec la bordure). Comment puis-je faire ceci?

Merci.

+0

Toute bonne raison pour laquelle vous essayez de le faire avec balisage au lieu de CSS? –

+0

Toutes les bonnes suggestions sur la façon de le faire avec CSS? :-) – Anthony

Répondre

2

Vous ne pouvez pas faire quelque chose comme ça?

<?php 
    public function actionSuggestCharacter() { 
     if(Yii::app()->request->isAjaxRequest && isset($_GET['q'])) { 
      ... 
      if (isset($suggestion)) { 
       echo $returnVal; 
      } 
      echo "Hey this is the delimiter\n"; 
      $criteria->condition='`Character` LIKE :keyword'; 
      .... 
     } 
    } 
?> 

Et puis sur le chèque côté client pour cette chaîne et quand vous rencontrez « » Hey Délimiteur » le remplacer par le séparateur.