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
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);
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>
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: