Supporto volontario e collaborativo per Joomla!® in italiano

ChronoConnectivity. Infiniti modi per vedere e gestire i contenuti di Joomla!

ricerca

Nel precedente articolo "Chronoforms e ChronoConnectivity. L'unione fa la forza." avevamo visto un esempio semplice di come lavorare con questa accoppiata, che però faceva prevedere ulteriori sviluppi . Oggi vedremo un esempio  specifico di uso queste risorse disponibili. Si tratta di un'applicazione della ricerca che ancora non aveva trovato soluzione in Chronoengine (non funzionava la paginazione della ricerca), e che qui in Joomla.it vedremo in anteprima assoluta. L'obiettivo del lavoro è mostrare nel frontend  i risultati di una ricerca su più campi nella tabella di Joomla jos_contents, che come sappiamo contiene tutti gli articoli. Il metodo però è applicabile a qualsiasi altra tabella nel nostro CMS, quindi possibili usi quasi senza limiti.

In questa applicazione non useremo form, utilizzeremo Chronoconnectivity allo stato puro. Chi vorrà implementare anche dei form potrà utilizzare l'esempio del precedente articolo.

Allora partiamo subito. Entriamo in Chronoconnectivity, facciamo clik sul bottone verde Nuovo in alto a destra e si aprirà la nostra connessione. Nella tab general andiamo subito in name e batteziamo la connessione con il nome contenuti. Scendiamo nel campo seguente TableName(s) dove sceglieremo la nostra tabella dei contenuti jos_contents. Fig. 1

figura-01

Proseguiamo il lavoro di configurazione ed andiamo del riquadro Query Related Settings dove ci sposteremo sulla voce WHERE SQL: facciamo click sul segno + accanto all'etichetta e si aprirà un campo di testo. Li inseriremo questo codice PHP. Fig. 2

 

 <?php
$session
=& JFactory::getSession('ricerca');
$search_array = array('title','introtext','fulltext');
$cerca = array();
foreach (
$search_array as $search ) {
$value = JRequest::getVar($search, '' , 'post');
if (
$value ) {
$cerca[] = " `$search` LIKE '%$value%' ";
}
}

if (empty(
$cerca) and (JRequest::getVar('submit','no','POST')=="Trova")) {
$session->set('cerca','0','ricerca');
JRequest::setVar('limitstart',0,'Get');
}

if ( !empty(
$cerca) ){
echo
" WHERE ".implode(' AND ', $cerca);
$session->set('cerca',$cerca,'ricerca');          
}

elseif ((
JRequest::getVar('submit','no','POST')<>"Trova") and ($session->get('cerca',0,'ricerca')<>0))
{
$cerca=$session->get('cerca',0,'ricerca');
echo
" WHERE ".implode(' AND ', $cerca);
}
else
{
echo
"";
}
?>

 

 

figura-02

 

Il codice evidenziato in rosso è la parte personalizzabile. Nell'array sono infatti inseriti i nomi dei tre campi della tabella di joomla jos_contents nei quali sarà fatta la ricerca: title, introtext e fulltext. Che rappresentano rispettivamente il titolo, testo introduttivo e testo intero dell'articolo. Qui con le stesse modalità avvremmo potuto inserire qualsiasi campo della nostra tabella.

Questo codice è il vero motore della ricerca, perchè consente la costruzione della query per il filtraggio dei campi e la navigazione fra le eventuali pagine di risposta conservando in memoria, grazie all'uso della sessione di joomla, il risultato dell'intera ricerca. Quest'ultimo aspetto è quello che innova questa funzione di ricerca rispetto a quella proposta nel sito della Chronoengine, che andava in bug nella navigazione fra le pagine.

Passiamo ora alla sezione Connection View Settings dovre faremo ulteriori settaggi. Intanto in Header/Title:, Enable Mambots:, Enable Form tags: e List Limit: possiamo inserire i settaggi visibili in figura 3. Che sono rispettivamente il Titolo della pagina di ricerca, l'abilitazione dei plugin, l'abilitazione dei tag del form ed il limite degli articoli (records) per pagina nella funzione di paginazione.

 

figura-03

Ora configuriamo la Header della pagina dove appariranno i campi nei quali effettuare le ricerche. Facciamo come consueto click sul segno + accanto al campo e si aprirà l'area di testo nella quale inseriremo questo codice HTML. Fig. 4

 

<div style="float:left; width: 100%; ">
<p>    Cerca in <b>Titolo</b>: <input type="text" name="title" />
<b>Introduzione</b>: <input type="text" name="introtext" />
<b>Testo esteso</b>: <input type="text" name="fulltext" /></p)
<p style="text-align:center;">
<input type="submit" value="Trova" name="submit" style='width:80px;
color:#cccccc; background-color:#135cae; cursor:pointer;' />
<input type="reset" name="reset" value="Reset" style='width:80px;
color:#cccccc; background-color:#135cae; cursor:pointer;' /></p>
<p style="text-align:center;"><b>Per resettare la ricerca lanciarla con campi vuoti</b></p>
</div>

 

 

figura-04

La figura mette in evidenza in rosso i tag di input dei tre campi di ricerca che sono gli stessi della sezione WHERE SQL: title, introtext e fulltext. Anche qui potremo variare i campi della ricerca a nostro piacimento. L'unica attenzione che dovremo avere è quella che i campi dovranno essere gli stessi scelti nella sezione già citata WHERE SQL.

Il codice conterrà inoltre i bottoni di avvio della ricerca e di reset dei campi di testo. Il reset della ricerca impostata si avrà invece inserendo nuovi campi o lanciando una ricerca con campi vuoti.

Passiamo alla sezione Body dove inseriamo con le stesse modalità già usate sopra il seguenti codici PHP ed HTML. Fig. 5

 

<?php
$db
=& JFactory::getDBO();

$query = "

SELECT c.title, s.title
FROM #__categories as c, #__sections as s WHERE c.id = $MyRow->catid AND s.id = $MyRow->sectionid

"
;
$db->setQuery($query);
$nomes = $db->loadRow();
?>


<div>
<p>Numero articolo {id}</p>
<p>Titolo <b>{title}</b></p>
<p><?php echo "Categoria: <b>".$nomes[0]."</b> - Sezione: <b>".$nomes[1]."</b>"; ?></p>

<p>Introduzione {introtext}</p>
<p>Testo esteso {fulltext}</p>
<p>Data pubblicazione {publish_up}</p>
<p>Data fine pubblicazione {publish_down}</p>
</div>

<br/><br/>

 

 

figura-05

 

La prima parte del codice, in PHP, contiene i comandi necessari per  recuperare i nomi delle sezioni e delle categorie alle quali appartiene l'articolo, ciò si ottiene con l'uso di alcune API di Joomla e le normali tecniche di visualizzazione dei risultati. In sostanza in questo modo è possibile vedere i dati delle tabelle in relazione con la tabella princiale jos_contents. Questo è l'aspetto significativo e pratico. Da notare che in questa sezione all'interno degli scripts PHP i campi della tabella principale si ottengono con l'uso del seguente metodo $MyRow->nome_campo.

La seconda parte in HTML contiene dei tag HTML di visualizzazione che fanno riferimento ai campi, del record della tabella filtrato, con la notazione {nome_campo} che avevamo già incontrata nel primo articolo. In questo caso ci consentiranno di visualizare: numero articolo, titolo, introduzione, testo esteso, data di pubblicazone e data di fine pubblicazione.

Quindi in HTML i campi della tabella si ottengono con {nome_campo} ed in PHP con $MyRow->nome_campo.

Qui, chi a voglia di curare un risultato grafico più accattivante si potrà divertire a fare una formattazione meno spartana di quella che ho utilizzato.

L'ultimo passaggio in questa sezione è quello di inserire la paginazione dei risultati. Andiamo quindi nella sezione Footer dove inseriamo il comando di paginazione come visualizzato in figura. Fig. 6

 

figura-06

 

Andiamo ora alla tab FrontEnd Settings dove inseriamo i settaggi visibili nelle figure 7 e 8.

figura-07figura-08

Questi settaggi consentiranno l'accessibilità della ricerca a tutti i visitarori del sito. Eventuali altri settaggi permetteranno l'accesso riservato a determinate categorie di utenti loggati nel sito.

Ultima configurazone che ci rimane è quella della tab Admin Settings dove inseriemo i settaggi visibili in figura 9. Questi settaggi per questo impiego non hanno influenza, servono solo per consentire il salvataggio della connessione, perchè nel caso in cui mancassero queste impostazioni avremmo un segnale di errore.

 

figura-09

Siamo giunti alla fine anche di questo cammino. Risalviamo la nostra connessione e la colleghiamo ad una voce di menù con la procedura normale. Andiamo sulla voce di menù che abbiamo predisposto ed il risultato della ricerca visualizzerà, alla prima chiamata, tutti gli articoli del sito su più pagine, Figura 10.

figura-10

Con i tasti di navigazione potremo agilmente navigare tra le pagine. Se inseriamo dei valori nei campi di ricerca, dopo l'avvio di essa vedremo gli articoli che corrispondono a quei criteri. Questo è tutto ma è stata una bella battaglia.

Qui vedete una demo di funzionamento: http://valesweb.altervista.org/index.php?option=com_chronoconnectivity&Itemid=68

Anche questo esempio, come gli altri forniti in precedenza, evidenzia la flessibilità di questa estensione che, unita a Chronoforms, a mio parere consente di creare, visualizzare, modificare e gestire, come in questo caso, in infiniti modi i nostri dati archiviati in Joomla. Un vero creatore di applicazioni.

Mi fa piacere precisare che questo risultato è stato possibile grazie alla collaborazione dello staff di Joomla.it ed in particolare tonicopi, ventus85, sudoku e alexred che hanno dato suggerimenti e svolto il collaudo sul campo. L'unione fa la forza diceva il primo articolo e l'unione dello staff di Joomla è una vera potenza.

 

Grazie a tutti vales

http://valeweb.altervista.org

Commentacommenta questo articolo sul forum