Create a search

Ciao a tutti

Prima prova in italiano…

Volevo creare una search form con un campo TextField dove l’utente ha 2 opzioni:

  1. inserire direttamente il nome di una città nel textfield e cercarla.

  2. cliccare su serie di links sotto al campo (una specie di città suggerite…)

e Se l’utente clicca su questi link vorrei far valorizzare il campo textField della città in maniera automatica…

Sapete come è possibile farlo ?

My view …


<?php echo CHtml::beginForm(); ?>


<?php echo CHtml::errorSummary($search); ?>


<div class="simple">

<?php echo CHtml::activeLabel($search,'Where:');?>

<?php echo CHtml::activeTextField($search,'where');?>

</div>

I suggest to you....

<?php echo CHtml::Link('rome'); ?><br>

<?php echo CHtml::Link('New York'); ?><br>

<?php echo CHtml::Link('Tokio'); ?>

<div class="action">

<?php echo CHtml::submitButton('Search'); ?>

</div>


<?php echo CHtml::endForm(); ?>

che bello pensavo fossi il solo ad usare Yii :D ora è tardi domani mattina ci do un occhio perchè anche io ho bisogno di una cosa del genere byez

No no non sei solo :P

comunque ho già risolto, ho aggirato l’ostacolo utilizzando la funzione di AutoComplete…non è quello che avevo in mente…ma risolve il problema…

Se metti su qualcosa del genere…fammi sapere…

ti ringrazio

ciao

Quello che stai cercando di fare ha poco a che vedere con Yii e’ totalmente questione di javascript. Ti creerai una serie di div con un preciso id. Quando qualcuno clicca sul div fai popolare il campo ( utilizzando l’id css ) con il valore del div.

Ora non ho modo di farti vedere un esempio sottomano, ma Yii ( o pho in generale) non c’entrano nulla con quello che vuoi fare. O almeno c’entrano se tu facessi una chiamata ajax quando cliccano sul link e poi gestisci il risultato della chiamata, ma sono tempo e risorse buttate vie :)

Vai a darti un occhiata alla documentazione di jQuery ( se intendi usare questo framework gia’ integrato in Yii ), sicuramente ci sara’ un esempio simile, visto che e’ una cosa base base :)

ciao,

posso chiederti come hai gestito i risultati della ricerca?

ché io vorrei usare la ricerca per filtrare un campo di uno dei modelli… esempio:

ricerca nella index del modello Users:


<?php echo CHtml::beginForm(); ?>


<?php echo CHtml::errorSummary($search); ?>


<div class="simple">

<?php echo CHtml::activeLabel($search,'Nome utente:');?>

<?php echo CHtml::activeTextField($search,'username');?>

</div>

<div class="action">

<?php echo CHtml::submitButton('Cerca'); ?>

</div>


<?php echo CHtml::endForm(); ?>

quel che mi chiedo è: come faccio poi ad usare quel che l’utente hai inserito per filtrare i risultati?

grazie mille!

Prima di tutto, ti conviene usare activeLabelEx che genera la label in automatico a partire da attributeLabels

dentro il tuo modello.

Per semplicità, supponiamo che il tuo modello sia User e l’azione sia index (il form con action vuota fa il submit

usando la stessa azione di partenza).

Quello che devi fare è semplicemente inserire nella indexAction




$modelName = 'User';

$attribute = 'username';

if(isset($_POST[$modelName])) {

  if(isset($_POST[$modelName][$attribute]) && !empty($_POST[$modelName][$attribute])) { // ok è un po' verboso lo so : )

     $username = $_POST[$modelName][$attribute];

     // dovresti aver già creato un oggetto CDbCriteria

     // questo gli dice aggiungi una condizione username LIKE '%$username%' e mettila in OR con eventuali

     // altre condizioni già impostate 

     $criteria->addSearchCondition($attribute,  $username, true, 'OR');

  }

}


User::model()->findAll($criteria);




l’ho scritto a memoria, ma dovrebbe funzionare

grazie! :)

ho scoperto che passando alla versione 1.1.1 il tutto è già fatto!!

In JQuery sarebbe molto semplice prepopolare una input con testo contenuto in un link… ecco il codice:




<input type="text" id="search" value="Inserisci il nome di una città" />

<a href="#" rel="New York" class="writer">New York</a>

<a href="#" rel="Paris" class="writer">Paris</a>

<script type="text/javascript">

$(".writer").click(function(){

        //al click sui link della classe writer attribuisco il valore all'elemento con id search

	$("#search").attr("value",$(this).attr("rel"));

});

</script>



Che bella cosa =). Grazie mille =).

Ho cantato vittoria troppo presto. Ho usato <?php echo CHtml::beginForm(); ?> e <?php echo CHtml::endForm(); ?> per delimitare il form. Il submit viene effettuato, ma come lo gestisco? Mi ritorna alla pagina con la stessa querystring. Mi sapete aiutarmi?

E’ normale, è il funzionamento di “default” del form: se non viene indicato nessun percorso per il suo processamento, viene generato automaticamente il percorso controllore/azione attuale.

Siccome questo è spiegato nella guida definitiva, ti rimando a quella ;)

Ti consiglio di vedere l’esempio di sviluppo del blog, precisamente la combinazione:

  • controllore post, azione edit

  • vista post, vista edit

Obbedisco