Complimenti per l'articolo. Per visualizzare come desiderato i risultati si deve modificare il codice in joomla che si occupa di quella parte
Ottimo articolo, bravo! :)
Ti meriti il titolo di re del Chrono...
concordo anche io su vales. chiedevo il motiovo per il quale la ricerca si avvia automaticamente, cioè vengono subito mostrati tutti i risultati, per evitare ciò cosa occorre modificare? Non capisco neanche come cambiare da 5 10 15 a 1 2 3... Aspetto chiarimenti e ringrazio anticipatamente
function getLimitBox()
{
global $mainframe;
// Initialize variables
$limits = array ();
$limits[] = JHTML::_('select.option', '1');
$limits[] = JHTML::_('select.option', '2');
$limits[] = JHTML::_('select.option', '3');
// Make the option list
for ($i = 5; $i <= 30; $i += 5) {
$limits[] = JHTML::_('select.option', "$i");
}
$limits[] = JHTML::_('select.option', '50');
$limits[] = JHTML::_('select.option', '100');
$limits[] = JHTML::_('select.option', '0', JText::_('all'));
$selected = $this->_viewall ? 0 : $this->limit;
// Build the select list
if ($mainframe->isAdmin()) {
$html = JHTML::_('select.genericlist', $limits, 'limit', 'class="inputbox" size="1" onchange="submitform();"', 'value', 'text', $selected);
} else {
$html = JHTML::_('select.genericlist', $limits, 'limit', 'class="inputbox" size="1" onchange="this.form.submit()"', 'value', 'text', $selected);
}
return $html;
}
Per risolvere quel problema c'è una strada(e chissa quante altre ma io ora ne vedo una):
aggiungerei un'altra elseif e lavorare un po' sulla sessione, cioè nel caso del primo avvio della ricerca anzichè farli mostrare tutti i record, come nel caso della ricerca con campi vuoti, fargli compiere una ricerca forzata su una chiave sicuramente impossibile da trovare come per esempio: "zxykv192837465" che darà sicuramente risultato nullo ed il gioco dovrebbe essere fatto.
else
{
echo "where `id` = '0';";
}
?>
<?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)
}
?>
<?php
$session =& JFactory::getSession('ricerca');/*apro una sessione e
la chiamo '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 sui 3 valori dei campi di ricerca */
$value = JRequest::getVar($search, '' , 'post'); /* estrae il valore
di un campo di ricerca. Il ciclo agirà su tutti i campi. */
if ( $value ) { /* se il valore esiste crea il contenuto dell'array
$cerca */
$cerca[] = " `$search` LIKE '%$value%' "; /* ogni array contiene
una condizione della ricerca. L'uso di LIKE consente di eseguire la
ricerca per il valore contenuto nel campo della tabella */
}
}
if(empty($cerca) and (JRequest::getVar('submit','no','POST')=="Trova")){ /*questo è
vero quando tutti i campi sono vuoti ed avvio unaricerca con campi
vuoti cliccando sul bottone trova */
$session->set('cerca','0','ricerca'); /*resetto la sessione della
ricerca a 0 */
JRequest::setVar('limitstart',0,'Get'); /* forzo la visualizzazione alla
prima pagina della navigazione */
}
if ( !empty($cerca) ){ /* questo è vero quando ci sono dei dati
inseriti da ricercare */
echo " WHERE ".implode(' AND ', $cerca); /* scrivo tutto l'array
$cerca e creo la condizione di ricerca. */
$session->set('cerca',$cerca,'ricerca'); /* memorizzo nella
sessione l'array $cerca che userò quando navigo fra le pagine e
voglio conservare i criteri della ricerca precedentemente inviati. */
}
elseif((JRequest::getVar('submit','no','POST')<>"Trova") and($session->get('cerca',0,'ricerca')<>0)) /* questa condizione
serve a stabilire quando navigo fra le pagine, cioè non ho usato il
tasto trova ed esiste già una ricerca memorizzata nella sessione */
{
$cerca=$session->get('cerca',0,'ricerca');/*carico la precedente
ricerca memorizzata nella sessione */
echo " WHERE ".implode(' AND ', $cerca);/* scrive la condizione
della ricerca */
}
else
{
echo ""; /* nessuna where (questo sarà verificato all'inizio) e in
caso di ricerca con campi nulli */
}
?>
else
{
$var=0;
echo "WHERE cf_id = $var";
}
perchè altrimenti non andava.JRequest::setVar('limitstart',0,'Get'); /* forzo la visualizzazione alla
prima pagina della navigazione */
Ciao e grazie per la risposta.
Avevo visto anche quel tuo articolo (veramente "prezioso"!).
Ma la mia esigenza attuale e esclusivamente di far vedere agli utenti un archivio prima con i risultati su una tabella (solo alcuni campi principali: es. Titolo, autore, fonte, ...). Poi dare la possibilità all'utente, selezionando la voce "dettagli", di vedere tutte le voci di quel record (Titolo, autore, fonte, abstract, lingua, anno, ecc.).
In questo caso non mi interessa che l'utente modifichi, inserisca o altro.
Grazie tanto per la tua disponibilità.
Titolo | Autore | Dettagli |
.... | .... | Link per vedere tutti i dettagli |
.... | .... | Link per vedere tutti i dettagli |
.... | .... | Link per vedere tutti i dettagli |
Titolo | Autore | Dettagli |
... | ... | LINK |
Titolo | Autore | Dettagli |
... | ... | LINK |
Titolo Autore Dettagli
si, ok, non vengono resettati grazie alla sessione, io però volevo dire che non li vedo piu all'interno dei campi dopo che avvio la ricerca
<input type="text" name="title" value="<?php echo JRequest::getVar('title', '' , 'post'); ?>"/>
Straordinaria guida per chiarezza e completezza, grazie Vales!
Seguendo le tue istruzioni ho realizzato un "Modulo ricerca" per Eventlist.
Il modulo effettua la ricerca su vari campi ( Titolo; Descrizione; Tipologia; Sede; Data inizio; Data fine) della tabella eventi e pare funzionare perfettamente.
Non riesco però a far effettuare la ricerca sui campi Città e Provincia che, in eventlist, si trovano in un'altra tabella.
E' possibile utilizzare ChronoConnectivity per effetture la ricerca sui campi di due distinte tabelle? E Come?
In ChronoConnectivity - General setting posso indicare solo una tabella ?
....
Una Guida preziosissima GRAZIE!!!!
Un'esigenza però molto utile da applicare è far visualizzare e quindi modificare e cancellale i dati relativi solo all'utente che gli ha creati (dunque registrati) cioè ogni utente può agire solo sui propri dati inviati tramite un form e non anche su quelli degli altri.
E' possibile realizzare questo? e come?
GRAZIE e BUON ANNO a TUTTI
<?php
$nome_selected = JRequest::getInt('locid', '', 'post');
$db =& JFactory::getDBO();
$query = "
SELECT `id`, `locid`, `dates`
FROM `#__eventlist_events`
ORDER BY `locid`
";
$db->setQuery($query);
$nomes = $db->loadAssocList();
$nome_options = "";
foreach ( $nomes as $v ) {
if ( $nome_selected == $v['locid'] ) {
$selected = "selected='selected'";
} else {
$selected = '';
}
$nome_options .= "<option value='".$v['locid']."' $selected >".$v['locid']."</option>";
}
?>
<div style="float:left; width: 100%; ">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2"><img src="bordo_superiore.gif"></td>
</tr>
<tr bgcolor="#003366">
<TD WIDTH=15%><b>Titolo</b>: </td>
<TD WIDTH=35%><input type="text" name="title" /></td>
<TD WIDTH=15%><b>Descrizione</b>: </td>
<TD WIDTH=35%><input type="text" name="datdescription" /></td>
</tr>
<tr bgcolor="#003366">
<TD WIDTH=15%><b>Sede</b>: </td>
<TD WIDTH=35%><select name="locid" class="form">
<option value="">Seleziona una Sede</option>
<?php echo $nome_options; ?>
</select></td>
<TD WIDTH=15%><b>Tipologia</b>: </td>
<TD WIDTH=35%><select name="catsid" class="form">
<option value="0">--- Scegli la tipologia</option>
<option value='1'>Feste popolari e religiose</option>
<option value='2'>Sagre</option>
</select></td>
</tr>
<tr>
<TD WIDTH=15%><b>data inizio</b>: </td>
<TD WIDTH=35%><input type="text" name="dates" /></td>
<TD WIDTH=15%><b>data fine</b>: </td>
<TD WIDTH=35%><input type="text" name="enddates" /></td>
</tr>
<tr>
<td colspan="2"><img src="bordo_inferiore.gif"></td>
</tr>
</table>
<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>
<br/>
<br/>
<?php
$nome_selected = JRequest::getInt('venue', '', 'post');
$db =& JFactory::getDBO();
$query = "
SELECT `id`, `venue`
FROM `#__eventlist_venues`
ORDER BY `venue`
";
$db->setQuery($query);
$nomes = $db->loadAssocList();
$nome_options = "";
foreach ( $nomes as $v ) {
if ( $nome_selected == $v['venue'] ) {
$selected = "selected='selected'";
} else {
$selected = '';
}
$nome_options .= "<option value='".$v['id']."' $selected >".$v['venue']."</option>";
}
?>
<?php
$nome_selected = JRequest::getInt('catname', '', 'post');
$db =& JFactory::getDBO();
$query = "
SELECT `id`, `catname`
FROM `#__eventlist_categories`
ORDER BY `catname`
";
$db->setQuery($query);
$nomes = $db->loadAssocList();
$nome_options2 = "";
foreach ( $nomes as $v ) {
if ( $nome_selected == $v['catname'] ) {
$selected = "selected='selected'";
} else {
$selected = '';
}
$nome_options2 .= "<option value='".$v['id']."' $selected >".$v['catname']."</option>";
}
?>
<?php
$nome_selected = JRequest::getInt('state', '', 'post');
$db =& JFactory::getDBO();
$query = "
SELECT `id`, `state`
FROM `#__eventlist_venues`
ORDER BY `state`
";
$db->setQuery($query);
$nomes = $db->loadAssocList();
$nome_options3 = "";
foreach ( $nomes as $v ) {
if ( $nome_selected == $v['state'] ) {
$selected = "selected='selected'";
} else {
$selected = '';
}
$nome_options3 .= "<option value='".$v['id']."' $selected >".$v['state']."</option>";
}
?>
<?php
$nome_selected = JRequest::getInt('city', '', 'post');
$db =& JFactory::getDBO();
$query = "
SELECT `id`, `city`
FROM `#__eventlist_venues`
ORDER BY `city`
";
$db->setQuery($query);
$nomes = $db->loadAssocList();
$nome_options4 = "";
foreach ( $nomes as $v ) {
if ( $nome_selected == $v['city'] ) {
$selected = "selected='selected'";
} else {
$selected = '';
}
$nome_options4 .= "<option value='".$v['id']."' $selected >".$v['city']."</option>";
}
?>
<div style="float:left; width: 100%; ">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2"><img src="bordo_superiore.gif"></td>
</tr>
<tr bgcolor="#003366">
<TD WIDTH=15%><b>Titolo</b>: </td>
<TD WIDTH=35%><input type="text" name="title" /></td>
<TD WIDTH=15%><b>Descrizione</b>: </td>
<TD WIDTH=35%><input type="text" name="datdescription" /></td>
</tr>
<tr bgcolor="#003366">
<TD WIDTH=15%><b>Sede</b>: </td>
<TD WIDTH=35%><select name="locid" class="form">
<option value="">Seleziona la Sede</option>
<?php echo $nome_options; ?>
</select></td>
<TD WIDTH=15%><b>Tipologia</b>: </td>
<TD WIDTH=35%><select name="catsid" class="form">
<option value="0">Seleziona la tipologia</option>
<?php echo $nome_options2; ?>
</select></td>
</tr>
<tr bgcolor="#003366">
<TD WIDTH=15%><b>Provincia</b>: </td>
<TD WIDTH=35%><select name="locid" class="form">
<option value="">Seleziona la Provincia</option>
<?php echo $nome_options3; ?>
</select></td>
<TD WIDTH=15%><b>Città</b>: </td>
<TD WIDTH=35%><select name="catsid" class="form">
<option value="0">Seleziona la Città</option>
<?php echo $nome_options4; ?>
</select></td>
</tr>
<tr>
<TD WIDTH=15%><b>data inizio</b>: </td>
<TD WIDTH=35%><input type="text" name="dates" /></td>
<TD WIDTH=15%><b>data fine</b>: </td>
<TD WIDTH=35%><input type="text" name="enddates" /></td>
</tr>
<tr>
<td colspan="2"><img src="bordo_inferiore.gif"></td>
</tr>
</table>
<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>
<br/>
<br/>
<input type="text" name="title" value="<?php echo JRequest::getVar('title', '' , 'post');
"/>
.<div class="form_item">
<div class="form_element cf_dropdown">
<label class="cf_label" style="width: 150px;">Provincia</label>
<select class="cf_inputbox validate-selection" id="select_12" size="1" title="" name="provincia">
<option value=""></option>
<option value="Agrigento">Agrigento</option>
<option value="Alessandria">Alessandria</option>
<option value="Ancona (Marche)">Ancona (Marche)</option>
...
</select>
</div>
<div class="cfclear"> </div>
</div>
L'istruzione <?php echo JRequest::getVar('title', '' , 'post'); ?>
in qesto caso dove dvrei metterla? Ti rngrazio in anticipo
....
L'istruzione<?php echo JRequest::getVar('title', '' , 'post');?>
in qesto caso dove dvrei metterla? Ti rngrazio in anticipo
<?php echo JRequest::getVar('provincia', '' , 'post'); ?>
JRequest::getVar('provincia', '' , 'post')<>''
<?php
if (JRequest::getVar('provincia', '' , 'post')<>'') {
echo "<option value='".JRequest::getVar('provincia', '' ,'post')."'
selected='selected' >".JRequest::getVar('provincia', '' ,'post')."</option>";
}
?>
<?php echo JRequest::getVar('provincia', '' , 'post');?>
al tuo codice non sono riuscito a correggere la siontassi, ho sempre value e label vuote
si c'era php dentro php mi sembra, grazie vales, cmq vedrò se trovo se riesco a farlo con javascript
<?php
<option value='Agrigento'
<?php if (JRequest::getVar('provincia', '' ,'post')=="Agrigento"){
echo "selected='selected'";
}
?>
>Agrigento</option>
Si ma quante if elseif ci vogliono, ci avevo pensato con un if per ogni option, ma mi sembra poco efficiente! Sbaglio? Ho visto che potrei usare una libreria di javascript, jquery, ma mi sa che non val la pena.. A proposito io il tuo codice l'ho messo come prima option ( e quindi senza selected), mi sembra più carino vederlo come prima o tu la vedresti meglio ultima?
p.s.
Parlo a nome di nun84 con cui sto lavorando x un progetto
E' descritto nell'articolo.
In HTML si usa {nomecampo}
In PHP si usa $MyRow->nomecampo
Con php si può fare. Dipende da quante provincia hai altrimenti c'è da scrivere parecchio. Forse sarebbe bene prendere le provincie da una tabella di database.
<FORM><INPUT TYPE="button" VALUE="Back" onClick="history.go(-1);"> </FORM>
nel form che utilizza chronoforms.
$session->set('cerca','0','ricerca');
$session->set('cerca',$cerca,'ricerca');
Relativamente alla domanda che ti avevo fatto nel mio ultimo post, ho trovato la soluzione commentando le due seguenti istruzioni:$session->set('cerca','0','ricerca');
$session->set('cerca',$cerca,'ricerca');
Togliendo queste istruzioni ottengo esattamente ciò che desideravo, immagino lo sapessi anche tu, no?
Poi vorrei sapere la seguente cosa, quando fai una ricerca su ricerca eventi (http://ricerca%20eventi/) e poi cambi pagina e rientri ti rimane l'ultima ricerca, come si puòevitare ciò e fare in modo che si resetti il tutto in questo caso?
Ciao Vales,
ho visto sul sito che il modulo di ricerca per eventlist con ChronoConnectivity sta prendendo forma, io mi sono proprio arenato.
Ho fatto delle prove di ricerca sul tuo modulo ed ho notato che pare funzionare bene:
1) la ricerca combinata di Sede e Tipologia
2) la ricerca combinata di Tipologia e Data inizio
3) la ricerca combinata di Titolo e Tipologia
4) la ricerca combinata di Titolo e Data inizio
Non funziona invece:
1) la ricerca combinata di Tipologia e data inizio (qua c'è il problema delle due tabelle diverse)
Volevo inoltre farti rilevare che:
1) sarebbe ottimale poter effetture la ricerca per "Città" oltre che per "Sede"
2) la ricerca per "Data fine" mi sembra superflua.
Confido nella tua bravura!
La notte porta consiglio ... ;DLa ricerca di soluzioni vuole il suo tributo di fatica 8)
La data di fine è necessaria per fare la ricerca in un intervallo.In effetti è così, non ci avevo pensato, hai ragione tu Vales.
Ma non tralasciare la ricerca per provincia che mi sembra molto importante per siti a respiro regionale o nazionale.
$dateymd=$MyRow->data;
$datedmy= date ("d-m-Y", strtotime ($dateymd));
Mi sai aiutare riguardo i miei problemi del mio precedente post?
1) Ho problemi con dei caratteri speciali, come quello dell'euro quando li prelevo dal db per mostrarli in una checkbox, è una questione di charset? sto usando il template ja_purity e sul db i dati sono utf8_general_ci.
2)Su IE le checkbox del form creato con chronoforms mi appaiono strane...
oop... come si carica un immagine in questo forum??
con Firefox invece ok
$tuastringa=ereg_replace('€','€',$tuastringa);