Joomla.it Forum
Non solo Joomla... => Sviluppo => : simoegio 15 Dec 2006, 13:07:47
-
Ciao,
vorrei poter dare la possibilità all'utente di scegliere, quando si presenta un link a Tabella Conenuto Categoria, il filtro con cui poter applicare la ricerca. Adesso è possibile sceglierlo quando si crea il collegamento e poi viene applicato sempre quello.
Vorrei mettere una form che dia la possibilità di scegliere Autore, Titolo, Data direttamente all'utente, una volta scelto il filtro sarà applicato su quel parametro...
allora aprendo il file content.html.php ho visto che nella text del filtro, quando qlkuno scrive qlkosa, e quindi sull'onChange, viene inviato il submit tramite il "document.adminForm.submit()"...
ma cosè sto document.adminForm?????
Io pensavo di inserire una form con un menù a tendina e fargli leggere direttamente da lì il parametro con cui applicare il filtro al posto di andarlo a leggere nel database, ho trovato dove è salvato questo dato ma non trovo la query che fa x leggerlo.. dovrebbe essere definita nella document.adminForm che appunto non so dove andare a leggere...
idee????
-
allora aprendo il file content.html.php ho visto che nella text del filtro, quando qlkuno scrive qlkosa, e quindi sull'onChange, viene inviato il submit tramite il "document.adminForm.submit()"...
ma cosè sto document.adminForm?????
E' la chiamata di un metodo Javascript, come conseguenza dell'innesco dell'evento onChange. In particolare viene invocato il submit del form.
Per risolvere il tuo problema ti conviene realizzare un tuo componente di ricerca che visualizza un form personalizzato e poi effettua la ricerca e mostra i risultati.
Per fare prima, puoi partire dal componente di Joomla e poi ampliarlo.
-
si ho capito che è la chiamata al metodo javascritp.. non avevo letto che il form si chiamasse adminForm e pensavo fosse qlkosa d strano...
ma a sto punto se creo un form fittizzio e quando cambia quello faccio cambiare il form quello già presente dei filtri, in modo tale che quando viene fatto il submit il parametro risulta cambiato in base a quello che ha selezionato l'utente..
ma cmq tu dici di partire dal componente search?? ma se partissi da quello di joomla la ricera avverrebe in tutti i testi e gli articoli.. io voglio solo che mi legga o i titoli o gli autori..
xò nn so, dimmi cosa ne pensi te :D
-
ma cmq tu dici di partire dal componente search?? ma se partissi da quello di joomla la ricera avverrebe in tutti i testi e gli articoli.. io voglio solo che mi legga o i titoli o gli autori..
Beh, modifica le query come pare a te. ;)
-
nn è che mi faccia piacere modificarla xò x fare quello che mi serve...
cmq quello che pensavo prima nn si può fare..
devo capire dove viene fatta la query...
qlke idea??
-
Intanto partirei dal componente di ricerca, ossia com_search, che sta dentro /components/com_search.
Ci sono solo 2 file PHP da modificare.
-
Nel file search.html.php c'è il metodo searchbox() in cui viene definito il form HTML.
Inizia con il modificare quello.
Fai un backup dei file prima!!!
-
mmm cm'è che nn lo trovo il searchbox() ???
intendi searchword??? ok qua ci posso sostituire
<SELECT name="sceltaFiltro" onChange="funzScelta(this.selectedIndex )" >
<option value="2" selected>Autore</option>
<option value="1">Titolo</option>
<option value="0">Data</option>
</SELECT>
cmq ho trovato dove fa la query nel content.php ... era anche molto evidente ma è la prima volta che metto le mani così in joomla.. :-* :-[
-
mmm cm'è che nn lo trovo il searchbox() ???
File search.html.php, linea 34, metodo searchbox().
-
anche dreamweaver mi fa gli scherzi ora..
cmq già nell'altro componente non capivo come faceva con delle function a stampare a video..
insomma nella function (che è php vero?) c'è il codice html xò se nessuno richiama quella funzione com'è che viene stampato??
dall'altro file??
-
insomma nella function (che è php vero?) c'è il codice html xò se nessuno richiama quella funzione com'è che viene stampato?? dall'altro file??
Ma tu sai programmare? :-[
-
io sono uscito da scuola a giugno come perito informatico..
cioè ho visto le basi di php xkè nn ho mai creato una classe in php..
:S
volevo solo capire un minimo visto che c devo lavorare sopra
-
Perfetto, sai programmare.
Possiamo procedere! 8)
-
allora io ho sostituito
<input type="text" name="searchword" id="search_searchword"
size="30" maxlength="20" value="<?php echo stripslashes($searchword);?>"
class="inputbox" />
con
<SELECT name="sceltaFiltro" onChange="funzScelta(this.selectedIndex )" >
<option value="2" selected>Autore</option>
<option value="1">Titolo</option>
<option value="0">Data</option>
</SELECT>
xò già nn capisco xkè si vede la solita text area..
-
Perchè hai tolto la casella di testo?
Dove lo scrivi quello che vuoi cercare?
-
no t spiego.. prima ho messo prima del text la mia solo che nn mi si vedeva ancora.. allora ho detto voglio vedere se la tolgo del tutto si vede.. e appunto si vede..
ho un problema di file temporanei??
-
Disabilita temporaneamente la cache di Joomla.
-
il problema nasce dal fatto che il search.html.php non è quello che genera il codice..
se invece vado in mod_search.php li si che mi si vede.. su quale dei due devo lavorare?
-
se invece vado in mod_search.php li si che mi si vede.. su quale dei due devo lavorare?
Io non ho mai parlato di modulo, ma di componente.
Tu cosa vuoi modificare?
-
infatti sono andato io a pescarlo.. xkè non capivo xkè mi si vedeva la select..
cmq da come parli dobbiamo lavorare sul serarch.html.php..
allora ho messo il codice x la creazione della select prima di quello della text. xò nn si vede, ma da quanto ho capito è giusto.
ora??
-
Ora devi capire perchè non si vede.
-
si ma io tocco il codice nel modulo, e metto ad esempio dopo la form "ciao" io vedo la mia text e poi scritto ciao.. x quello mi ero posto il problema di dove lavorare
-
Modulo?
Ma cosa vuoi modificare, il modulo o il componente?
Deciditi!
-
mi sa che sto facendo un pò d confusione..
il mio problema è che il COMPONENTE ricerca non lo trovo nel pannello di amministrazione e quindi non posso pubblicarlo..
e quindi andavo a vedere il modulo
-
Crea una nuova voce di menu di tipo Componente e la associ a Cerca.
-
okkei ci siamo..
scusa ma con joomla + che fare le cose base nn ho fatto.. è giusto in sti giorni che c sto guardando d +..
ora vedo il mio componente ricerca con la select che avevo creato
-
Bene, ora viene il difficile.
Devi modificare il file search.php per piegarlo alle tue esigenze.
Dalla riga 71 alla riga 115 vengono recuperati i parametri del form. Aggiungi il recupero del valore della casella combinata.
Il difficile viene adesso, perchè la ricerca viene effettuata dai vari mambot di ricerca (riga 150-152).
-
allora molto a muzzo creo
$sceltaFiltro = strval( mosGetParam( $_REQUEST, 'sceltaFiltro', '' ) );
$sceltaFiltro = $database->getEscaped( trim( $sceltaFiltro ) )
dove nel primo creo una variabile che legge il form ricevuto e il secondo nn ho ben capito cosa faccia..
ma il punto è che devo dire alla query di cercare o solo tra gli autori o solo tra i titoli o solo tra le date..
-
ma se modifico sta query qua??
function mosLogSearch( $search_term ) {
global $database;
global $mosConfig_enable_log_searches;
if ( @$mosConfig_enable_log_searches ) {
$query = "SELECT hits"
. "\n FROM #__core_log_searches"
. "\n WHERE LOWER( search_term ) = '$search_term'"
;
$database->setQuery( $query );
$hits = intval( $database->loadResult() );
if ( $hits ) {
$query = "UPDATE #__core_log_searches"
. "\n SET hits = ( hits + 1 )"
. "\n WHERE LOWER( search_term ) = '$search_term'"
;
$database->setQuery( $query );
$database->query();
} else {
$query = "INSERT INTO #__core_log_searches VALUES ( '$search_term', 1 )"
;
$database->setQuery( $query );
$database->query();
}
-
Il metodo si chiama mosLogSearch...
Credi che serva a recuperare le notizie?
-
ma il punto è che devo dire alla query di cercare o solo tra gli autori o solo tra i titoli o solo tra le date..
Certo.
E qui devi lavorare di fino, perchè il sistema di ricerca di Joomla prevedere solamente la singola stringa di ricerca. Ed è inutile mettersi a modificare tutto il framework.
Ti conviene creare una tua query e sostituirla alle righe 150-152.
Ovviamente dovrai restituire i campi così come se li aspetta Joomla; ma al momento non ricordo quali sono.
-
allora
<?php
$_MAMBOTS->loadBotGroup( 'search' );
$results = $_MAMBOTS->trigger( 'onSearch', array( $searchword,
$phrase, $ordering ) );
?>
richiama i suoi metodi x la ricerca ecc e li mette in results, giusto?
ma se io facessi stampare la $results mi vedo come li vuole lui così posso farmi un'idea su come fare la query, giusto?
-
In parole vengono vengono caricati tutti i mambot di ricerca ed innescati.
Ciascun mambot effettua la ricerca a seconda di come è stato programmato.
Alla fine ti trovi dentro $results tutti i risultati.
Ora, siccome non puoi modificare il meccanismo di ricerca del framework, devi farne uno tuo limitato alle sole notizie.
Pertanto al posto di quelle righe di codice dovrai fare la tua query che mette i risultati dentro $results:
<?php
$database->setQuery("SELECT ... FROM ...");
$results = $database->loadObjectList();
?>
Riguardo ai campi che DEVONO essere restituiti, ti rimando alla sezione sui mambot di ricerca del devbook.
-
dunque.. la guida parla in riferimento al mamboot search di questa query
SELECT name AS title,".
"'' AS created, misc AS text, 'Contact' AS section,".
"CONCAT( 'index.php?option=com_content&task=view&id=',id ) AS href, 2 AS browsernav".
"FROM #__contact_details AS a".
"INNER JOIN #__categories AS b ON b.id=a.catid AND b.access <= '$my->gid'".
"LEFT JOIN #__sections AS u ON u.id = a.sectionid".
"WHERE name LIKE '%$text% OR misc LIKE '%$text%'".
"AND published = '1' ".
"ORDER BY name");
e poi dice che gli servono i parametri
-title
-created
-section (mi è venuto un dubbio dopo.. ma l'id della sezione o il nome?? )
-href
-browsernav
x cui.. mooooooolto approssimativamente la query potrebbe essere una cosa simile
SELECT C.title, C.created, S.title, CONCAT('index.php?option=com_content&task=view&id=',C.id ), 2
FROM jos_content C, jos_sections S
WHERE C.sectionid = S.id
AND C.title LIKE '%$text' OR misc LIKE '%$text'
dove appunto al posto del C.title, dopo l'AND, devo fargli leggere il form, cioè quello che avevo chiamato $sceltaFiltro
mentre al posto di text, che dovrebbe essere quello che è stato dato come stringa, CREDO $searchword
grande capo, cm'è???
-
Sei sulla strada giusta, ma la tua query mi sembra un pò approssimativa.
-
Non ho capito se sbaglio l’intestazione iniziale o proprio la query in sé..
Faccio un confronto
name AS title --> C.title è GIUSTO
'' AS created --> C.created PENSO SIA GIUSTO
'Contact' AS section --> S.title SE SERVE IL TITOLO è GIUSTO
CONCAT( 'index.php?option=com_content&task=view&id=',id ) AS href --> BOH
2 AS browsernav --> 2 PENSO POSSA ANDARE
oppure sbaglio proprio le condizioni??
-
Così va meglio, ma manca il campo text.
-
io avevo fatto un confronto ma cmq ero sicuro di ciò che avevo messo nella prima versione.. cmq dato che ho intuito che debba essere fatta così :-[ :-[
rifaccio.. ma cmq il campo text nn l'ho messo xkè nn ho capito cosa serve, anche xkè non è richiesto nei famosi parametri
SELECT C.title AS title,'' AS created, misc AS text, S.title AS section, CONCAT( 'index.php?option=com_content&task=view&id=',C.id ) AS href, 2 AS browsernav
FROM jos_content AS C, jos_sections AS S
WHERE C.sectionid = S.id
AND C.title LIKE '%$text' OR misc LIKE '%$text'
ORDER BY name
-
Più o meno è corretta.
Provala e vedi che succede.
-
puoi dirmi cosa seleziona "misc AS text"??
cmq alla fine ho fatto qlke correzione.. ovvero
$database->setQuery("SSELECT C.title AS title,'' AS created, misc AS text, S.title AS section, CONCAT( 'index.php?option=com_content&task=view&id=',C.id ) AS href, 2 AS browsernav
FROM jos_content AS C, jos_sections AS S
WHERE C.sectionid = S.id
AND C.title LIKE '%$searchword' OR misc LIKE '%$searchword'
ORDER BY name");
e come risultato ho
Notice: Undefined variable: pageNav in g:\programmi\easyphp1-8\www\joomla_107_stabile_ita\components\com_search\search.php on line 221
dove c'è il codice
search_html::conclusion( $totalRows, $searchword_clean, $pageNav );
che però non ho ben capito a cosa serva e xkè ora nn va +... :-[ :P
-
Non importa che significa misc.
L'importante è che ci sia il campo text che rappresenta il pezzo di testo visualizzato nei risultati della ricerca.
Aspè... Joomla 1.0.7???
E poi non vedo nella query la gestione che vuoi fare tu.
-
si è la 1.0.7
in ogni caso dovrei mettere
AND C.'%$sceltaFiltro' LIKE '%$searchword' OR misc LIKE '%$searchword'
così legge dalla select (sceltaFiltro) su quale categoria applicare la ricerca, e poi con i like cerco se la parola inserita (searchword) è dentro al campo preso in considerazione..
o sbaglio qlkosa?????
-
Dunque...
$sceltafiltro vale 0, 1 o 2 per come lo hai definito tu. Devi solo verificare il valore:
<?php
switch($sceltafiltro){
case 0:
// devi preparare la clausola per la data (created)
break;
case 1:
// devi preparare la clausola per il titolo (title)
break;
case 2:
// devi preparare la clausola per l'autore (created_by)
break;
default:
}
?>
misc puoi eliminarlo, faceva parte dell'esempio specifico che hai preso.
-
si scusa, io avevo in mente di mettere al posto di 0,1,2 direttamente created_by ecc ecc ma mi ricordavo male infatti non si può fare..
mi sa che non sono definiti bene le variabili..
da così
$searchword = mosGetParam( $_REQUEST, 'searchword', '' );
$searchword = $database->getEscaped( trim( $searchword ) );
a così
$sceltaFiltro = mosGetParam( $_REQUEST, 'sceltaFiltro', '' ) ;
$sceltaFiltro = $database->getEscaped( trim( $sceltaFiltro ) );
anche xkè ho messo il controllo
$filtro=0;
switch($sceltafiltro){ //riga 173
case 0:
$filtro = 'created';
break;
case 1:
$filtro = 'title';
break;
case 2:
$filtro = 'created_by';
break;
default:
}
prima della query xò escono questi errori
Notice: Undefined variable: sceltafiltro in g:\programmi\easyphp1-8\www\joomla_107_stabile_ita\components\com_search\search.php on line 173
Notice: Undefined variable: pageNav in g:\programmi\easyphp1-8\www\joomla_107_stabile_ita\components\com_search\search.php on line 252
Fatal error: Call to a member function on a non-object in g:\programmi\easyphp1-8\www\joomla_107_stabile_ita\components\com_search\search.html.php on line 227
direi che x oggi mi ha abbastanza stufato...
ciao... c sentiamo domani mi sa :-* :P
-
napo..
-
Notice: Undefined variable: sceltafiltro in g:\programmi\easyphp1-8\www\joomla_107_stabile_ita\components\com_search\search.php on line 173
Occhio al case sensitive: sceltafiltro e sceltaFiltro sono diversi!
Notice: Undefined variable: pageNav in g:\programmi\easyphp1-8\www\joomla_107_stabile_ita\components\com_search\search.php on line 252
Questo potrebbe anche essere un piccolo bug del componente.
Fatal error: Call to a member function on a non-object in g:\programmi\easyphp1-8\www\joomla_107_stabile_ita\components\com_search\search.html.php on line 227
Questo potrebbe essere dovuto al fatto che il risultato della query è null ma il codice cerca di utilizzare l'oggetto lo stesso.
-
napo..
???
-
Credo sia un messaggio di up camuffato... ;D
-
mmm.. :D meglio chiarire subito che i messaggio di up camuffati in napo.. saranno trattatti come tutti gli altri ;)
-
infatti nn era un up, era + un SOS :-[ :-[
xkè gli up come vengono trattati??
-
cmq sia..
naturalmente corretto lo switch quell'errore è scomparso..
il primo, che dicevi poteva essere un bug del componente, quello resta mentre l'altro, anche inserendo un testo che teoricamente non dovrebbe essere null l'errore resta cmq sia..
che posso fare??
ma cmq.. mi sbaglio o non è possibile provare la query da mysql giusto?? anche se mi sembra ovvio che nn si possa xò magari ..
-
infatti nn era un up, era + un SOS :-[ :-[
xkè gli up come vengono trattati??
Sei moderatore ??? non lo sai? Una piccola letturina è lo trovi ;)
-
ma cmq.. mi sbaglio o non è possibile provare la query da mysql giusto?? anche se mi sembra ovvio che nn si possa xò magari ..
Certo che si può, con phpmyadmin.
Ovviamente devi fornirgli tutti i parametri reali, non puoi lasciare le variabili PHP.
-
sn un moderatore fuffa di fatti.. huahua
a parte gli scherzi.. mica ho trovato dove leggere..
cmq x sta query.. ovvio che si può fare normalmente, ma il problema è che io sono vincolato xkè deve essere fatta x il compoente con i suoi parametri. Provare la query normalmente mi sembra inutile xkè essendo abbastanza facile non è che mi serva molto...
-
Provare la query normalmente mi sembra inutile xkè essendo abbastanza facile non è che mi serva molto...
Invece è fondamentale lo stesso!
Potrebbero esserci problemi a cui non hai dato peso...
-
allora.. ho eseguito sta benedetta query, modificandola un pelo x farla andare da mysql.. cioè così
SELECT C.title AS title, '' AS created, S.title AS section
FROM jos_content AS C, jos_sections AS S
WHERE C.sectionid = S.id
AND C.title LIKE '%Benvenuto%'
ORDER BY name
che in teoria dovrebbe beccarmi l'articolo "Benvenuto in Joomla!" e infatti lo trova, xò cmq sia provandola da joomla nn va, soliti errori :(
-
Mmm... sicuro che la notizia esiste ed abbia proprio quel titolo?
-
sisi
title created section
Benvenuto in Joomla! 2004-06-12 11:54:06 Notizie
questo è il risultato in myPHPAdmin...
esattamente l'ho provata con questa sintassi
query SQL:
SELECT C.title AS title, C.created, S.title AS section
FROM jos_content AS C, jos_sections AS S
WHERE C.sectionid = S.id
AND C.title LIKE '%Benvenuto%'
ORDER BY name
LIMIT 0 , 30
-
title created section
Benvenuto in Joomla! 2004-06-12 11:54:06 Notizie
questo è il risultato in myPHPAdmin...
Ma allora la query funziona!
-
che in teoria dovrebbe beccarmi l'articolo "Benvenuto in Joomla!" e infatti lo trova, xò cmq sia provandola da joomla nn va, soliti errori :(
come ho detto.. in myPHPAdmin va, mentre se vado dal sito di Joomla non funziona e ricompaiono i soliti errori..
-
Ok, ma la query di un mambot di ricerca deve avere i campi che ti ho già scritto, obbligatoriamente.
La query che hai appena postato non li ha tutti.
Vedi pagina 133 del devbook.
-
lo so, ma infatti è ciò che nn capivo..
allora io so che la query di un mambot deve avere certi campi. xò non posso provare la suddetta query identica in myPHPAdmin, xkè ha una struttura particolare. è x quello che ho modificato nuovamente la query.. oppure ho capito male e posso fare girare la query del mambot anche in myPHPAdmin???? :-\
-
La query SQL è sempre la stessa.
E' ovvio che con phpmyadmin non puoi scrivere cose del tipo:
WHERE title = '$titolo'
ma dovrai sostituire $titolo con il suo valore effettivo.
-
aaaaaa
quello lo avevo capito pure io ma mi facevo problemi per la dichiarazione iniziale, cose del tipo "CONCAT('index.php?option=com_content&task=view&id=',C.id ) AS href, 2 AS browsernav"
ora provo allora 8) :-[
-
Beh, CONCAT è una funzione di MySQL... 8)
-
si ok.. xò nn sapevo bene il resto..anche qui ho molto da imparare :-*
cmq la query non viene eseguita e da come errore
#1054 - Colonna sconosciuta 'misc' in 'field list'
mentre se tolgo la voce, in myPHPAdmin funziona benissimo xò da joomla ovviamente compaiono milioni di errori per la questione che era un parametro richiesto dal mambot
-
Ma te l'ho già scritto, il campo misc non esiste nella query che TU devi eseguire.
La query deve restituire questi campi:
- title
- created
- text
- section
- href
- browsernav
-
ah nn avevo capito..
cmq sia c'è un errore.. xkè senza misc di fatti va benissimo xò in joomla, con il misc, non va e da i soliti errori
-
Lo dico per l'ultima volta...
misc è il campo di una qualche tabella usata nell'esempio che hai copiato.
E' ovvio che se lo metti e non esiste in nessuna tabella da te usata, ti da errore.
-
Non importa che significa misc.
L'importante è che ci sia il campo text che rappresenta il pezzo di testo visualizzato nei risultati della ricerca.
Aspè... Joomla 1.0.7???
E poi non vedo nella query la gestione che vuoi fare tu.
ah.. avevo letto male questa frasa e avevo capito che ci doveva essere x forza.. x cui.. il campo text come parametro o come la variabile letta dalla text??? ma sarebbe improponibile fare un componente tutto mio e fare una benedetta semplice query??
-
conclusione.. se ometto sto benedetto parametro:
* quando cerco una parola che sicuramente c'è (ES:"Benvenuto") mi esce come errore
Notice: Undefined property: href in c:\programmi\easyphp1-8\www\joomla_1011_stabile_ita\components\com_search\search.php on line 211
Notice: Undefined property: href in c:\programmi\easyphp1-8\www\joomla_1011_stabile_ita\components\com_search\search.php on line 212
xò resta la schermata di joomla col menu ecc..
* quando cerco una parola che nn c'è tornano i soliti errori
-
Mmm... ???
La query completa com'è?
ma sarebbe improponibile fare un componente tutto mio e fare una benedetta semplice query??
No, anzi forse sarebbe quasi meglio. :D
-
che bella questa risposta... :-*
ho letto la tua guida.. interessante l'esempio mod_contenuti..
non ho capito se posso fare un modulo o x forza un componente..
xkè col modulo sarebbe + facile xò non saprei se è possibile creare il codice html x creare la select..
xkè nel componente, dato che c'è sia il file php che html.php è abb chiaro ma nel modulo....
ho guardato il modulo search di joomla. ma sbaglio o richiama il componente search??
finalmente vedo una strada percorribile senza andare alla cieca 8) :P
-
Può capitare che i moduli si interfaccino con i componenti.