Joomla.it Forum
Componenti per Joomla! => Gestione e-commerce => : Robertinos 27 Dec 2013, 18:19:29
-
Salve a tutti,
ho la necessità di modificare la query di ricerca del modulo Search di Virtuemart.
Vi spiego la mia esigenza: ho caricato dei prodotti come Prodotto 1, Prodotto 2, Prodotto 3, ecc...
Nello stato attuale se faccio la ricerca di "Prodotto 1" lui mi trova si "Prodotto 1" che gli altri elementi che contengono il termini "Prodotto", invece io vorrei fare una ricerca mirata solo su quello che l'utente cerca.
Sicuramente viene effettuato uno split del termine inserite, invece io dovrei effettuare un LIKE "%Prodotto 1%", ma come posso effettuare questa modifica?
Grazie.
-
io magari penserei ad aggiornare...
comunque:
\web\administrator\components\com_virtuemart\html\shop_browse_queries.php
linea 85.
a questo punto puoi anche modificare il file, dubito che sarà sovrascritto da un aggiornamento :(
ciao,
marco
-
io magari penserei ad aggiornare...
in che senso?
Ho trovato il codice che mi interessa:
$keywordArr = vmGetCleanArrayFromKeyword( $keyword );
la funzione vmGetCleanArrayFromKeyword serve proprio ad effettuare l'explode, così l'ho omessa e scritto
$keywordArr = trim(stripslashes($keyword));
$keywordArr = array($keyword);
Sembra che funzioni!
Grazie del supporto.
-
1.
aggiorna nel senso che stai usando una versione di VM non più aggiornata su una piattaforma joomla non più aggiornata, quindi potrebbero esserci notevoli buchi di sicurezza.
2.
quello stripslashes è veramente una pessima idea!
ti bucano il sito in due minuti.
3.
[risolto] nel titolo del topic di apertura è buona cortesia.
ps:
se ti ho indicato file e linea, a che pensavi che servisse una funzione che si chiama ArrayFromKeyword? ;D ;D
peccato che ti sia sfuggito il clean :( :(
ciao
-
1. aggiorna: hai perfettamente ragione, ma ho un pò di timore nel farlo, soprattutto per l'incompatibilità che potrebbe nascere dalle 1.1.x alla 2.0
2. stripslashes l'ho rimosso, per il resto pensi che la modifica potrebbe andar bene?
3. [risolto] fatto, scusatemi!
peccato che ti sia sfuggito il clean
in che senso? :|
-
era una battuta relativa al fatto che avevi, con stripslashes, aperto la porta agli attacchi sql injection e quindi avevi tolto la 'pulizia' (clean) dall'array. :P
direi che va bene.
ciao
-
Grazie! ;)
-
Chiedo ancora un piccolo aiutino, pensavo di aver risolto ma non è stato così!
Riepilogando ho modificato la funzione di ricerca così:
$keywordArr = trim($keyword);
$keywordArr = array($keyword);
Il tutto riguarda questo sito web (http://www.centrosingercatania.it/) se nel modulo di ricerca scrivo 'Singer 760' ho visto che lui restituisce il risultato solo se tale campo è presente nella colonna product_name di vm_product, a me interessa soprattutto il campo product_desc e nella query di default è presente:
$sq .= "\n (`#__{vm}_product`.`product_name` LIKE '%$searchstring%' OR ";
$sq .= "\n `#__{vm}_product`.`product_sku` LIKE '%$searchstring%' OR ";
$sq .= "\n `#__{vm}_product`.`product_s_desc` LIKE '%$searchstring%' OR ";
$sq .= "\n `#__{vm}_product`.`product_desc` LIKE '%$searchstring%') ";
Ad esempio questo prodotto (http://www.centrosingercatania.it/catalogo/detail/237-piedino-singer-merritt/flypage/297-piedino-singer--pisi-go-01--gambo-obliquo.html?sef=hcfp), il quale ha nella descrizione il campo 'Singer 760' non appare, come mai?
E' vero che è circondato da tag html cioè:
<p style="line-height: normal;"><span style="font-size: 10pt; font-family: ">SINGER 760</span><span style="font-size: 12pt; font-family: " New="New"></span></p>
Come mai non lo trova?
Come dovrei cambiare la condizione di ricerca?
Grazie.
-
prova a stampare la query ed eseguirla direttamente sul db, così vedi come agire.
-
Scusami, erroneamente ho postato nell'altro post... ::)
Ho provato ad eseguire la query direttamente nel DB e ottengo lo stesso risultato.
Posto la query completa qui?
-
eh, mi ricordava qualcosa...
puoi anche farlo, ma sinceramente non ho chi abbia più una macchina con VM1...
(io l'ultima la ho mandata in pensione ad inizio gennaio)
-
Al di là della versione credo che comunque si tratta di una semplice query SQL.
Perchè se la mia query ha un LIKE '%$searchstring%' = LIKE '%SINGER 760%'
e nel record ho
<span style="font-size: 10pt; font-family: ">SINGER 760</span>
non devo restituirlo?
I record che contengono Singer 740, Singer 760 vengono restituiti correttamente! :(
-
nel primo post uno è maiuscolo, l'altro minuscolo, in questo caso controlla che la collation della tabella non sia impostata a case sensitive.
se sono tutti e due maiuscoli non saprei che dire, a parte di contare il numero esatto di spazi tra singer e 760.
-
Ho provato a cercare su Google, ma con scarso risultato.
Il caso di Casesensitive a quale collaction corrisponde?
Grazie.
-
ti ri-direi di contare bene gli spazi, dato che mi è venuto in mente che like non è case sensitive.
più di così non saprei che dire, bisognerebbe essere sul sistema.