Joomla! - Modulo Search SobiPro - Select OR

google-plus Scritto da . Postato in Joomla!

Grazie a Fede, un utente che ha letto questo blog, mi sono interessato su come includere un campo checkbox all'interno del modulo.

La cosa è abbastanza semplice visto ciò che è stato spiegato nei precedenti articoli. Tuttavia, questo pone di fronte al comportamento base dei field SobiPro checkbox e multiselect, i quali permettono si la ricerca ma ne consentono una ricerca di tipo AND.

Questo significa che se dovessi scegliere ad esempio di cercare delle entry per Regione (e il campo Regione con alias field_regione fosse un campo multiselect) e scegliessimo Veneto e Lombardia, restituirebbe entry che corrispondano a entrambe le regioni.

Se volessimo invece cercare Per Veneto o Lombardia (ricerca OR), saremmo costretti ad applicare un piccolo hack al campo (field) select di SobiPro:

Apriamo dunque il file: components/com_sobipro/opt/fields/select.php.

La funzione interessata alla modifica è la seguente:

public function searchData( $request, $section ){
    $sids = array();
    /* check if there was something to search for */
    if( ( is_array( $request ) && count( $request ) ) || ( is_string( $request ) && strlen( $request))){
        $db =& SPFactory::db();
        try {
            /* if we are searching for multiple options
            * and the field contains 'predefined_multi_data_multi_choice'
            * - we have to find entries matches all these options */
            if( is_array( $request ) && $this->multi ) {
                foreach ( $request as $opt ) {
                    $db->select( 'sid', 'spdb_field_option_selected', array('copy' => '0', 'fid' => $this->fid, 'optValue' => $opt ) );
                    if( !( isset( $results ) ) ) {
                        $results = $db->loadResultArray();
                    }
                    else {
                        $cids = $db->loadResultArray();
                        $results = array_intersect( $results, $cids );
                    }
                }
                $sids = $results;
            }else {
                $db->select( 'sid', 'spdb_field_option_selected', array( 'copy' => '0',
                'fid' => $this->fid, 'optValue' => $request ) );
                $sids = $db->loadResultArray();
            }
        }catch ( SPException $x ) {
...

Sostituire la parte evidenziata con:

$db->select( 'sid', 'spdb_field_option_selected', array( 'copy' => '0', 'fid' => $this->fid, 'optValue' =>$request ) );

Un grazie sentito a Federico che ci ha fornito questa piccola grande soluzione!

Se hai gradito l'articolo, condividilo, basta un click:

Aggiungi commento

I commenti lasciati dagli utenti del blog sono sempre soggetti a controllo prima di eventuale pubblicazione. I commenti non considerati adatti per contenuti, spam o forma saranno eliminati e non pubblicati. Leggi i Termini e Condizioni di utilizzo per maggiori informazioni.


Codice di sicurezza
Aggiorna

  • logo teoca
  • materexcel collabora
  • logo flash pulizie
  • revolution srl
  • logo arcotraslochi
  • montaggio mobili trento
  • logo elevatori sito
  • logo prontopro

Prima di andartene...

Perché non rimanere in contatto?

Clicca sul pulsante "Mi piace" qui sotto per rimanere aggiornato su tutti i nuovi contenuti e ricevere notifica degli articoli interessanti che condivido giornalmente sulla Pagina Facebook dedicata al blog.

Puoi anche iscriverti alla newsletter e al nuovo canale YouTube di blog.dangerx82 così da rimanere sempre aggiornato sui nuovi contenuti...

x

Per essere più facile ed intuitivo, il blog fa uso dei cookie, piccole porzioni di dati che consentono di capire come gli utenti navighino e ne visualizzino le pagine. I cookie non registrano alcuna informazione personale sull'utente ed eventuali dati identificabili non verranno memorizzati. Ti invitiamo a prendere visione della nostra Informativa sulla Privacy (aggiornata il 25/05/2020). Oppure visiona la nostra Cookie Policy (aggiornata il 17/10/2019):