Skip to main content

Come forzare la tipologia di ricerca di Joomla a Qualsiasi Parola o Frase Esatta

| Gianluca Gabella | Joomla!
share on facebook share on twitter share on linkedin

Indice:


Quando si utilizza il modulo standard di ricerca di Joomla, la ricerca è fatta in automatico con la modalità "tutte le parole". È possibile automatizzare il tipo di ricerca con un semplice override.

Come funziona la ricerca su Joomla?

Tutto il sistema di "ricerca" gira attorno ad un componente, uno o più plugin ed (eventualmente) un modulo:

  • Componente: stiamo parlando del componente "com_search" che si occupa della gestione e visualizzazione dei risultati;
  • Plugin: si tratta di uno o più plugin di tipo "search" che contengono le istruzioni su cosa andare a cercare nel database per quanto riguarda i diversi componenti di Joomla. Nativamente esistono i plugin di tipo "search" per il "com_content", ma se per esempio installiamo Virtuemart verrà installato un componente di tipo "search" anche per il componente ecommerce, che andrà a cercare all'interno dei singoli prodotti in vendita;
  • Modulo: è possibile configurare un modulo con un input per le ricerche generiche. Non è obbligatorio, perchè è possibile richiamare il componente "com_search" anche in altre modalità.

Quindi, in soldoni, come funziona la ricerca su Joomla?

  1. Attraverso il modulo "cerca" inserisco una o più parole in un form;
  2. Queste parole vengono inviate al componente "com_search" che controlla tutti i plugin di tipo "search" attivati;
  3. Ogni plugin "search" abilitato fa la ricerca sul database del componente al quale è collegato;
  4. "com_search" raccoglie i risultati che gli sono stati passati da ogni plugin "search" e restituisce la totalità di questi risultati all'utente.

E' modo molto furbo di gestire le ricerche, perchè permette di filtrare i risultati in base al contenuto (cercare per esempio solo in pagine statiche, o solo in prodotti in vendita di Virtuemart).

Che tipologie di ricerca posso fare?

Joomla permette 3 tipologie di ricerca:

  • "tutte le parole": è il tipo di ricerca di default. Se si ricerca più di una parola il componente tornerà risultati dove sono presenti tutte le parole cercate, in qualsiasi ordine (anche non consecutive).
  • "qualsiasi parola": se si ricerca più di una parola il componente tornerà risultati dove è presente almeno una delle parole cercate.
  • "frase esatta": se si ricerca più di una parola il componente tornerà i risultati dove sono presenti tutte le parole cercate, in quel specifico ordine.

I tipi di ricerca sono quindi distinti e danno risultati diversi a seconda della tipologia selezionata. Il problema è che il modulo standard di Joomla non ti permette di scegliere la tipologia ti ricerca, ma utilizza sempre la prima ("tutte le parole") come default. Una volta arrivati alla pagina dei risultati è possibile cambiare la tipologia, ma questo sistema obbliga l'utente ad un passaggio in più.

Come possiamo risolvere?

Ci sono molti modi per risolvere questo problema, agendo sul componente o sui plugin. Ma questi richiederebbero capacità di programmazione avanzate e ci sarebbe il rischio elevato di perdere le modifiche fatte al successivo aggiornamento del core.

La soluzione che vi propongo quindi va ad agire soltanto sul modulo: non è esaustiva (non risolve il problema nella sua interezza), ma è un trucchetto molto semplice che risolve immediatamente il problema senza andare a modificare file del core di Joomla.

Cominciamo!

La prima cosa da fare è creare un override del modulo di ricerca standard di Joomla.

Se non sai cos'è un override ti consiglio di leggere questo articolo del sito joomla.org, è inglese ma è semplice e spiega bene cos'è un override e come crearlo.

Andiamo quindi nel pannello di controllo di Joomla e clicchiamo su

Menu in alto -> Estensioni -> Template -> Lista Template

Clicchiamo sul nome del template di default che utilizziamo nel nostro sito. Per esempio "protostar".

nome del template

NB: se utilizzate un altro template cliccate sul titolo di quel template!

Clicchiamo a questo punto sulla linguetta: "crea override".

override mod search

Troveremo una lista dei moduli e componenti installati. Clicchiamo su "mod_search".

Se tutto è andato a buon fine ci apparirà un messaggio su sfondo verde con scritto:

Messaggio

Override creato in /templates/protostar/html/mod_search
Override creato.
 
Dal menu a sinistra clicchiamo ora su "html -> mod_search -> default".

Sulla destra apparirà il contenuto del file, che è sostanzialmente codice PHP.

Andiamo in fondo al file, dove troviamo queste righe:

<input type="hidden" name="task" value="search" />
<input type="hidden" name="option" value="com_search" />
<input type="hidden" name="Itemid" value="<?php echo $mitemid; ?>" />

Queste poche righe sono parametri nascosti che vengono inviati assieme all'input del form per poter gestire la ricerca.

Tutto quello che dobbiamo fare è aggiungere, subito dopo, questa riga di codice:

<input type="hidden" name="searchphrase" value="any" />

Che cosa significa?

Stiamo indicando al componente "com_search" che riceverà l'input da ricercare che noi vogliamo utilizzare "any" (ossia "qualsiasi parola") come tipologia di ricerca.

Abbiamo la possibilità di mettere tutte e tre le tipologie di ricerca all'interno della proprietà "value":

  1. all : significa "cerca tutte le parole", possiamo ometterlo perchè è il tipo di ricerca standard
  2. any: cerca almeno una delle parole
  3. exact: cerca la frase esatta

Conclusioni

Non è una soluzione completa: non ci permette di scegliere il tipo di ricerca da frontend e si limita alle ricerche fatte con il modulo ma è un ottimo sistema per raggiungere l'obiettivo, e soprattutto è sicuro perchè è una modifica solo a livello di override, che non va a toccare alcun file del core di Joomla.
Se avete altre idee su come personalizzare la ricerca scrivetelo nei commenti!


Se questo articolo ti è stato utile lascia un feedback!

Ti è stato utile questo articolo?

Come mai?

Ogni feedback è assolutamente benvenuto!

E se vuoi farlo leggere anche ai tuoi amici e colleghi, condividilo!

share on facebook share on twitter share on linkedin
condividi su Facebookcondividi su Twittercondividi su LinkedIncondividi su WhatsAppcondividi su Telegram