mante80 Posted December 31, 2012 Share Posted December 31, 2012 (edited) Ciao a tutti. Ho un problema con il modulo di ricerca rapida all'interno del sito, se provo a cercare un qualsiasi articolo non mi viene restituito nessun risultato (ho prestashop 1.4.8.2 sotto hosting SQL Aruba) Ho provato a fare un backup-restore in locale e inizialmente non funzionava lo stesso, quindi pensavo di aver replicato il problema ma in realtà rilanciando l'indicizzazione in locale tutto funziona mentre online niente da fare, restituisce sempre risultati nulli. Come prove ho anche provato a disattivare la ricerca isantanea e ajax quindi rilanciare ancora l'indicizzazione ma niente. Nel BO trova tutti i 610 prodotti quindi penso che da quel lato funzioni. Ho il dubbio che si tratti di qualcosa di collegato alla lingua ma ho anche provato a cambiare la lingua del sito e aggiungere dei TAG sul BO in inglese ma senza risultato. Avete qualche idea? Il sito è www.larryoldparts.com Grazie Edited December 31, 2012 by mante80 (see edit history) Link to comment Share on other sites More sharing options...
joalis Posted January 1, 2013 Share Posted January 1, 2013 (edited) Io ho prestashop 1.5.2 (dovrebbe funzionare lo stesso) ,dovresti indicizzare i prodotti così (forse): Vai sul menù preferenze di prestashop, clicca sulla voce ricerca, si aprira una pagina, vai sulla voce indicizza i prodotti e, ad indicizzazione eseguita, attiva la ricerca AJAX -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Joalis Italia E-Shop www.joalisitalialabeshop.com Edited January 1, 2013 by joalis (see edit history) Link to comment Share on other sites More sharing options...
mante80 Posted January 2, 2013 Author Share Posted January 2, 2013 Grazie innanzitutto per la risposta. Ho provato a fare come dici ma non funziona. Ho fatto veramente qualsiasi tipo di prova ma non ne sono venuto a capo. Visto che l'ambiente replicato in locale funziona probabilmente si tratta di un problema sull'Hosting Aruba. Dovrei riuscire a capire se il DB risulta correttamente indicizzato magari con qualche query diretta da SQL e poi vedere quale query viene lanciata dal bottone di ricerca per capire dov'è l'inghippo. Non sono però molto pratico su questo aspetto, qualcuno mi sa dare qualche suggeriimento in merito? Link to comment Share on other sites More sharing options...
mante80 Posted January 4, 2013 Author Share Posted January 4, 2013 Nessuna idea? Link to comment Share on other sites More sharing options...
joalis Posted January 4, 2013 Share Posted January 4, 2013 allora non saprei Link to comment Share on other sites More sharing options...
mante80 Posted January 5, 2013 Author Share Posted January 5, 2013 Ho trovato io una possibile soluzione: Mi sono accorto che, mentre nella versione in locale del sito le tabelle ps_search_world e ps_search_index erano piene, in quella hosted rimanevano vuote. Ho anche provato a droppare la tabella remota e caricare quella locale ma niente da fare. Secondo me si tratta di un problema della versione PHP dell'hosting Aruba che non supporta alcune funzioni presenti nel modulo di ricerca/indicizzazione (classes\search.php) Visto che la ricerca nel BO funziona perché al posto delle tabelle search_word and search_index utilizza la query diretta su SQL ho sostituito nel codice di search.php in questo modo: Tolto: foreach ($words AS $key => $word) if (!empty($word) AND strlen($word) >= (int)Configuration::get('PS_SEARCH_MINWORDLEN')) { $word = str_replace('%', '\\%', $word); $word = str_replace('_', '\\_', $word); $intersectArray[] = 'SELECT id_product FROM '._DB_PREFIX_.'search_word sw LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word WHERE sw.id_lang = '.(int)$id_lang.' AND sw.word LIKE '.($word[0] == '-' ? ' \''.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' : '\''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' ); if ($word[0] != '-') $scoreArray[] = 'sw.word LIKE \''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\''; } else unset($words[$key]); Sostituito con $intersectArray[] = 'SELECT distinct p.id_product FROM ps_product p LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product AND pl.id_lang = '.(int)$id_lang.') WHERE pl.name LIKE \'%'.pSQL($expr).'%\''; Ricordarsi in "preferenze - performance" di flaggare (e poi togliere) "obbliga la compilazione" per ricompilare il php e...voilà Ora si fa una query diretta sul DB, forse è meno ottimizzata ma almeno funziona. Dovrei anche provare a buttare sull'hosting una versione pulita di prestashop per capire se la mia teoria è corretta ma non ho tempo ora, se qualcuno ha Aruba e ha lo stesso problema mi fa sapere? Link to comment Share on other sites More sharing options...
Lilyth Posted January 7, 2013 Share Posted January 7, 2013 Ho trovato io una possibile soluzione: Mi sono accorto che, mentre nella versione in locale del sito le tabelle ps_search_world e ps_search_index erano piene, in quella hosted rimanevano vuote. Ho anche provato a droppare la tabella remota e caricare quella locale ma niente da fare. Secondo me si tratta di un problema della versione PHP dell'hosting Aruba che non supporta alcune funzioni presenti nel modulo di ricerca/indicizzazione (classes\search.php) Visto che la ricerca nel BO funziona perché al posto delle tabelle search_word and search_index utilizza la query diretta su SQL ho sostituito nel codice di search.php in questo modo: Tolto: foreach ($words AS $key => $word) if (!empty($word) AND strlen($word) >= (int)Configuration::get('PS_SEARCH_MINWORDLEN')) { $word = str_replace('%', '\\%', $word); $word = str_replace('_', '\\_', $word); $intersectArray[] = 'SELECT id_product FROM '._DB_PREFIX_.'search_word sw LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word WHERE sw.id_lang = '.(int)$id_lang.' AND sw.word LIKE '.($word[0] == '-' ? ' \''.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' : '\''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'' ); if ($word[0] != '-') $scoreArray[] = 'sw.word LIKE \''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\''; } else unset($words[$key]); Sostituito con $intersectArray[] = 'SELECT distinct p.id_product FROM ps_product p LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product AND pl.id_lang = '.(int)$id_lang.') WHERE pl.name LIKE \'%'.pSQL($expr).'%\''; Ricordarsi in "preferenze - performance" di flaggare (e poi togliere) "obbliga la compilazione" per ricompilare il php e...voilà Ora si fa una query diretta sul DB, forse è meno ottimizzata ma almeno funziona. Dovrei anche provare a buttare sull'hosting una versione pulita di prestashop per capire se la mia teoria è corretta ma non ho tempo ora, se qualcuno ha Aruba e ha lo stesso problema mi fa sapere? Ma l'hai sperimentato? Funziona? Link to comment Share on other sites More sharing options...
mante80 Posted January 7, 2013 Author Share Posted January 7, 2013 Sì, funziona perfettamente Link to comment Share on other sites More sharing options...
Lilyth Posted January 8, 2013 Share Posted January 8, 2013 Sì, funziona perfettamente perfetto. ci provo appena possibile! Link to comment Share on other sites More sharing options...
soulbo Posted November 18, 2013 Share Posted November 18, 2013 Io ho provato a fare la modifica ho una versione 1.5.5 e sinceramente non funziona. Come posso fare? Link to comment Share on other sites More sharing options...
mante80 Posted December 3, 2013 Author Share Posted December 3, 2013 Io ho provato a fare la modifica ho una versione 1.5.5 e sinceramente non funziona. Come posso fare? E' passato un po' di tempo quindi non ricordo con esattezza. Se però nel backoffice la ricerca funziona ma nel frontoffice no questa soluzione deve funzionare per forza. Quando hai modificato il codice dal backoffice hai impostato di ricompilare il codice? Link to comment Share on other sites More sharing options...
soulbo Posted December 20, 2013 Share Posted December 20, 2013 Cosa intendi per ricompilare, mi potresti dire i passaggi precisi.Grazie Link to comment Share on other sites More sharing options...
giuliopowa Posted December 20, 2013 Share Posted December 20, 2013 ciao mi intrometto nella discussione,soulbo prova ad andare su BO --> PREFERENZE --> RICERCA un po sotto trovi la scritta prodotti indicizzati , che numeri ci sono scritti li ?? Link to comment Share on other sites More sharing options...
soulbo Posted December 21, 2013 Share Posted December 21, 2013 ciao mi intrometto nella discussione, soulbo prova ad andare su BO --> PREFERENZE --> RICERCA un po sotto trovi la scritta prodotti indicizzati , che numeri ci sono scritti li ?? Ciao giuliopowa i prodotti sono indicizzati quello che invece vorrei modificare è proprio la ricerca nel front office. Vorrei che facesse la ricerca anche parziale. Mi spiego meglio se io codifico un prodotto con W345GT, vorrei che anche cercando 45GT lo trovasse oppure se io codifico un prodotto W-345GT cercando W345 lo trovasse comunque. Questa sarebbe una ricerca fatta molto bene. Link to comment Share on other sites More sharing options...
giuliopowa Posted December 21, 2013 Share Posted December 21, 2013 ah ho capito , ti rispondo fra 5 min che ho capito cosa devi modificare Link to comment Share on other sites More sharing options...
giuliopowa Posted December 21, 2013 Share Posted December 21, 2013 prova a mettere questi dati in BO --> PREFERENZE --> RICERCA Link to comment Share on other sites More sharing options...
mante80 Posted December 21, 2013 Author Share Posted December 21, 2013 Cosa intendi per ricompilare, mi potresti dire i passaggi precisi. Grazie Intendo che se fai qualsiasi modifica al codice PHP questa non viene presa a meno che nel backoffice non sia specificato (olmeno era così per una versione un po' più vecchia dell'attuale). Il parametro da modificare era nel backoffice sotto parametri avanzati, prestazioni, cache template, forza compilazione. Fai refresh della pagina e poi lo rimetti come prima. Ho visto che nella 1.5.6.1 in automatico rimane spuntata "conpila i file del template se sono stati aggiornati quindi forse non è necessario". Il mio problema che poi ho scoperto essere legato all'hosting aruba è che la ricerca nel frontoffice non funzionava proprio (non trovava nessun articolo). Nel backoffice invece andava. Quindi ho preso il pezzo di codice del modulo di ricerca del BO, l'ho sostituito a quello del FO, ricompilato e bam, è partito Link to comment Share on other sites More sharing options...
soulbo Posted December 27, 2013 Share Posted December 27, 2013 Intendo che se fai qualsiasi modifica al codice PHP questa non viene presa a meno che nel backoffice non sia specificato (olmeno era così per una versione un po' più vecchia dell'attuale). Il parametro da modificare era nel backoffice sotto parametri avanzati, prestazioni, cache template, forza compilazione. Fai refresh della pagina e poi lo rimetti come prima. Ho visto che nella 1.5.6.1 in automatico rimane spuntata "conpila i file del template se sono stati aggiornati quindi forse non è necessario". Il mio problema che poi ho scoperto essere legato all'hosting aruba è che la ricerca nel frontoffice non funzionava proprio (non trovava nessun articolo). Nel backoffice invece andava. Quindi ho preso il pezzo di codice del modulo di ricerca del BO, l'ho sostituito a quello del FO, ricompilato e bam, è partito Scusa posso chiederti quale pezzo di codice hai preso e dove lo hai sostituito. Grazie Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now