Quindi dici di sostituire la riga:
echo ""; con echo "where `id` = '0';";

Ad ogni modo io ho studiato il tuo codice (di seguito), e mi sembra che le due istruzione dell'elseif non verranno mai eseguite, giusto? Provo a mettere dei commenti, in quelle che non ci sono non so bene il significato, magari faresti un favore a tutti se aggiungi tu un commento...
<?php
$session =& JFactory::getSession('ricerca');
$search_array = array('title','introtext','fulltext');// creo un array con questi valori (sono campi della tabella)
$cerca = array(); //inizializzo un array
foreach ( $search_array as $search ) { // assegno con un ciclo for alla variabile $search i 3 valori di su
$value = JRequest::getVar($search, '' , 'post'); // in questa variabile vanno i contenuti da noi inseriti nei campi di ricerca
if ( $value ) {
$cerca[] = " `$search` LIKE '%$value%' "; // in pratica avremo: title LIKE '...' ; introtext LIKE '...' e cosi via
}
}
if (empty($cerca) and (JRequest::getVar('submit','no','POST')=="Trova")) { // questo è vero quando tutti i campi sono vuoti ed effettuo una ricerca io, cliccando sul bottone trova
$session->set('cerca','0','ricerca'); //ricerca.cerca=0
JRequest::setVar('limitstart',0,'Get'); /// ????
}
if ( !empty($cerca) ){ // questo è vero quando ci sono dei dati inseriti da ricercare
echo " WHERE ".implode(' AND ', $cerca); // ??
$session->set('cerca',$cerca,'ricerca'); // ??
}
elseif ((JRequest::getVar('submit','no','POST')<>"Trova") and ($session->get('cerca',0,'ricerca')<>0)) // la prima condizione è vera la prima volta (non si è ancora premuto trova) mentre la seconda non sarà mai vera...
{
$cerca=$session->get('cerca',0,'ricerca');
echo " WHERE ".implode(' AND ', $cerca);
}
else
{
echo ""; // nessuna where (questo sarà verificato all'inizio)
}
?>