Prestashop: Søgning viser ikke alle produkter

Indeholder reklame via affiliate links for:

For få dage siden var jeg ved at få grå hår i hovedet.. ja kan ikke udelukke der allerede var et enkelt eller to… Nå men anyway, jeg fandt en løsning på nettet efter et par besøg på google eller 20. Jeg har for nylig opsat en Prestashop 1.6, ud af ca. 200 produkter, var der 15-20 stykker som ikke blev vist i søgning. Træls, når man gerne vil sælge alle produkter!!

Nå men jeg gennemgik den obligatoriske tjekliste:

1. Er produktet aktivt? Ja.
2. Er produktet sat til at blive vist overalt? Ja.
3. Indstillinger -> Søg -> “Add missing products to the index” Ja.
4. Indstillinger -> Søg -> “Re-build the entire index” Ja.

Godt, jamen så burde der ikke være nogen problemer. Men de pågældende produkter dukkede stadig ikke op!
Prestashop bug tænkter man straks og det kan da meget vel også være tilfældet. Men hvad gør man så?

På Prestashop forum fandt jeg en snak om dette problem, en fyr foreslog at kontrollere databasen. Det viser sig simpelthen at Prestashop i nogle tilfælde, opretter søgetermer med et forkert sprog id. På en typisk Prestashop, der er sprog 1 = Engelsk. Jeg kører Dansk og den har jeg oprettet som sprog nr. 2. Men de manglende varer viste sig at være oprettet med sprog 1 i prestashop søgeindex. Det kan du kontrollere i følgende tabeller i phpMyAdmin: ps_search_index og ps_search_word. Hvis produktets søgetermer er oprettet med et andet sprog, så vises de ikke, når shoppen vises på Dansk. Så det skal rettes hurtigst mulig, men hvordan gør man det?

Mit første forsøg var at gå ind i ps_search_word og rette id_lang fra 1 til 2, det kunne jeg ikke få lov til. Fik besked om at der var en konflikt. Læste videre i debattråden hvor en anden fyr havde lagt en kode man kunne kopiere ind i phpMyAdmin. Bemærk! Hvis dit tabelnavn ikke begynder med ps_ så skal du lige rette det 4 steder i nedenstående kode, før du kan få et resultat. Det er nok en god idé, at overlade dette til en der har arbejdet med phpMyAdmin før, da du helst ikke skal ædelægge din database!

SELECT pl.name AS product, GROUP_CONCAT( sw.word
SEPARATOR ", " ) AS words
FROM ps_product p
LEFT JOIN ps_product_lang pl ON pl.id_product = p.id_product
AND pl.id_lang =2
LEFT JOIN ps_search_index si ON si.id_product = p.id_product
LEFT JOIN ps_search_word sw ON sw.id_word = si.id_word
AND sw.id_lang =2
AND sw.id_shop =1
GROUP BY p.id_product
ORDER BY `words` ASC
LIMIT 0 , 200

Klik på din database når du er kommet ind i phpMyAdmin og klik her efter på SQL. Indsæt overstående kode i feltet, sæt kryds i “Bevar forespørgeselsboks” og klik på udfør. Du vil nu få en liste ala nedenstående. De produkter hvor begge kolonner er udfyldt er alt korrekt. De øverste hvor der bare står Null, de er forkert, enten har de intet søgeindex eller også er det på et forkert sprog.

Som tidligere erfaret kunne jeg ikke ændre id_lang i ps_search_word. Så som et forsøg oprettede jeg en kopi af et af de problemfyldte produkter. Den nye version af produktet virkede fint i søgning, så det gjorde jeg med dem alle. Alle produkter er nu inkluderet i min søgning. De gamle defekte produkter har jeg slettet. Da produkterne lå indekseret i søgemaskinerne, så lavede jeg en 301 re-direct fra den gamle url til den nye. Det hele kører nu på skinner igen.

Problemer med at gemme kontaktinfo i indkøbskurv

Dette er et andet lille problem jeg er stødt på med Prestashop 1.6 – Når kunderne indtaster navn, adresse osv i indkøbskurven, skal de afslutte med at trykke gem. I nogle tilfælde, specielt Internet Explorer, så reagerer Prestashop med en mystisk fejl. Kundens oplysninger bliver ikke gemt og kunden kan således ikke bestille sine varer. Stort problem! Med lidt test fandt jeg ud af at det åbenbart er cache der laver ballade! Har ikke fundet en løsning på problemet, men har vist fået det afværget. Klik på “Avancerede parametre -> Ydelse, nederst på siden finder du punktet “Brug cache” Klik på Nej og gem. Det virker helt forkert at deaktivere cache, men bare rolig, du har stadig smarty cache, hvis du altså har opsat det rigtigt.