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 🤘