Back to top

Autore Topic: [Risolto] [Virtuemart 1.1.9] Modulo Search: modificare query di ricerca  (Letto 3559 volte)

Offline Robertinos

  • Appassionato
  • ***
  • Post: 251
  • Sesso: Maschio
    • Mostra profilo

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.
« Ultima modifica: 28 Dic 2013, 10:36:48 da Robertinos »
Skype: robertino_salemi

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:[Virtuemart 1.1.9] Modulo Search: modificare query di ricerca
« Risposta #1 il: 27 Dic 2013, 20:55:42 »
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
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline Robertinos

  • Appassionato
  • ***
  • Post: 251
  • Sesso: Maschio
    • Mostra profilo
Re:[Virtuemart 1.1.9] Modulo Search: modificare query di ricerca
« Risposta #2 il: 28 Dic 2013, 00:28:03 »
io magari penserei ad aggiornare...
in che senso?

Ho trovato il codice che mi interessa:

Codice: [Seleziona]
$keywordArr = vmGetCleanArrayFromKeyword( $keyword );

la funzione vmGetCleanArrayFromKeyword serve proprio ad effettuare l'explode, così l'ho omessa e scritto

Codice: [Seleziona]
$keywordArr = trim(stripslashes($keyword));
$keywordArr = array($keyword);

Sembra che funzioni!

Grazie del supporto.
« Ultima modifica: 28 Dic 2013, 00:37:39 da Robertinos »
Skype: robertino_salemi

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:[Virtuemart 1.1.9] Modulo Search: modificare query di ricerca
« Risposta #3 il: 28 Dic 2013, 08:03:50 »
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




mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline Robertinos

  • Appassionato
  • ***
  • Post: 251
  • Sesso: Maschio
    • Mostra profilo
Re:[Virtuemart 1.1.9] Modulo Search: modificare query di ricerca
« Risposta #4 il: 28 Dic 2013, 10:38:09 »
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? :|
Skype: robertino_salemi

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
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



mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline Robertinos

  • Appassionato
  • ***
  • Post: 251
  • Sesso: Maschio
    • Mostra profilo
Grazie!  ;)
Skype: robertino_salemi

Offline Robertinos

  • Appassionato
  • ***
  • Post: 251
  • Sesso: Maschio
    • Mostra profilo
Chiedo ancora un piccolo aiutino, pensavo di aver risolto ma non è stato così!


Riepilogando ho modificato la funzione di ricerca così:
Codice: [Seleziona]

$keywordArr = trim($keyword);
$keywordArr = array($keyword);


Il tutto riguarda questo sito web 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:
Codice: [Seleziona]

$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, 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.
« Ultima modifica: 18 Gen 2014, 19:43:56 da Robertinos »
Skype: robertino_salemi

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
prova a stampare la query ed eseguirla direttamente sul db, così vedi come agire.

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline Robertinos

  • Appassionato
  • ***
  • Post: 251
  • Sesso: Maschio
    • Mostra profilo
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?
Skype: robertino_salemi

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
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)
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline Robertinos

  • Appassionato
  • ***
  • Post: 251
  • Sesso: Maschio
    • Mostra profilo
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! :(
Skype: robertino_salemi

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
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.


mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline Robertinos

  • Appassionato
  • ***
  • Post: 251
  • Sesso: Maschio
    • Mostra profilo
Ho provato a cercare su Google, ma con scarso risultato.

Il caso di Casesensitive a quale collaction corrisponde?

Grazie.
Skype: robertino_salemi

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
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.
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

 



Web Design Bolzano Kreatif