2016-05-02 15 views
8

Devo filtrare CGridView con campo di testo personalizzato. Ho personalizzato dataprovider (CSqlDataProvider) che ritorno e riempire il tavolo con. La tabella va bene, ma quello che mi sembra un dolore è filtrarlo. Ho passato alcune ore a cercare di capirlo e il supporto è scarso. Ho visto che c'è qualche metodo jQuery usato per aggiornare CGridView e che ci vuole il parametro 'data', il cui valore non so come formattare. Ecco cosa ho creato nel mio file/create in cui ho bisogno di questa cosa.Filtro CGridView con campo di testo personalizzato

PHP:

<?php 
Yii::app()->clientScript->registerScript('search', " 
$('.search-form form').submit(function(){ 
    $.fn.yiiGridView.update('studentiSaSmjeraData', { 
     data: $(this).serialize(), -----------> this should be changed to get data from my text input using GET I guess, but I dont know the format 
    }); 
    return false; 
    }); 
"); 
?> 

HTML e PHP considerando modulo di ricerca:

<div class="search-form"> 
     <p> 
      Pretraga po broju indeksa: 
     </p> 
     <?php $form=$this->beginWidget('CActiveForm', array(
      'action'=>Yii::app()->createUrl($this->route), 
      'method'=>'get', 
     )); ?> 
     <div class="row"> 
      Broj indeksa: <input type="text" class="br_ind" name="br_ind" id="br_ind" value=""></input> 
     </div> 
     <div class="row buttons"> 
      <?php echo CHtml::submitButton('Search'); ?> 
     </div> 
     <?php $this->endWidget(); ?> 
</div> 

La colonna in dataProvider voglio confrontare questo testo con si chiama 'br_ind'.

EDIT: Sembra che il nome del campo di input e id hanno a che fare qualcosa con questo troppo (che dovrebbero essere in qualche formato specifico). Il mio problema è che i dati non provengono da nessun modello specifico. È ottenuto da un prodotto tabella e alcuni vincoli aggiuntivi su due tabelle, quindi non ho un modello particolare per l'uso di filtri o altro che abbia un supporto (afaik) in Yii. Ma quello che voglio sembra semplice, eppure trasformato in un incubo per me. La documentazione sui parametri di funzionamento è così scarsa. Spero che qualcuno possa aiutarti. Chiunque si è imbattuto in questo e non ha potuto risolverlo?

+0

può si prega di aggiungere il codice che genera il tuo GridView? – Asped

+0

stai cercando qualcosa di simile? http://yiiplayground.com/index.php?r=UiModule/dataview/gridView se così può essere facilmente con le funzionalità native CGridView standard. Fammi sapere che arriverò con una spiegazione più dettagliata nella risposta. –

+0

Aggiungi il tuo codice cgridview e, se possibile, allegare schermate in modo da comprendere meglio la tua domanda. –

risposta

0

$.fn.yiiGridView.update() utilizza la funzione di jQuery ajax dietro le quinte (se l'aggiornamento di un servizio è abilitato per la griglia). Puoi consultare i documenti jQuery per details on the data parameter e altre opzioni che è possibile passare a .ajax().

Utilizzando $(this).serialize() come si sta facendo dovrebbe rendere jQuery aggiungere br_ind=whatever_the_value_is come parametro querystring alla richiesta GET al server (ancora una volta, supponendo che si sta utilizzando GET, non si vede un motivo per usare POST o un altro verbo, ma non abbastanza informazioni fornite in questione). Utilizza gli strumenti di sviluppo del tuo browser per verificare l'URL richiesto e il contenuto della risposta.

Quindi è il caso che il server stia elaborando correttamente la richiesta. Non hai fornito alcun dettaglio quindi non posso aiutarti molto lì.

0

Questo è un esempio

$.fn.yiiGridView.update('activity-grid', { 
     data: 'Activity[Type]='+tp+'&Activity[idAgent]='+agent+'&Activity[StartTime]='+start+'&Activity[EndTime]='+end 
    }); 

in questo esempio, nel lato server, è sufficiente per ottenere $ _GET [attività]

+0

hai provato la mia risposta @Luka Bulatovic? – tinybyte

Problemi correlati