Si tienes un «prestashop antiguo» (de versión 1.4.x) en el que dejado de funcionar de repente el buscador (muestra siempre: «No se han encontrado resultados para su búsqueda…«) es posible que tu servidor hayan actualizado la versión de PHP a 5.3.29 o superior.
La solución pasa por «actualizar» prestashop a 1.5 o superior, o realizar el siguiente «parche» en el archivo /classes/Search.php:
Busca el código:
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]);
Y reemplázalo por este otro:
$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).'%\'';
(*) Y comprueba que tengas productos indexados para su búsqueda: Entra en el administrador en: Preferencias > Búsqueda. Hay tendría que salir el número de productos indexados para las búsquedas, por ejemplo: Productos indexados: 527 / 527. En caso de no tener ninguno indexado tienes que pinchar en el enlace de «Añadir los productos que faltan al índice » o «Re-construir el índice completo».
Agradezco tu comentario 🤘