Recientemente nos hemos encontrado con un error no reportado por PrestaShop que nos ha vuelto bastante locos:
ERROR 404
PÁGINA NO DISPONIBLE.
LO SENTIMOS, LA PÁGINA NO SE ENCUENTRA DISPONIBLE.
Este error 404 en PrestaShop aparece en la tienda al hacer clic en cualquiera de las categorías que hemos creado dentro del backoffice de PrestaShop. En concreto, nos ha surgido en un ecommerce versión 1.6 de PrestaShop con multitienda activada y con las últimas actualizaciones al día (versión de PrestaShop, módulos y plantilla).
Intentos previos, sin éxito
Siempre que surge un error 404 (not found) se intenta chequear varios puntos, que en otros casos pudieran solucionar este error 404:
Comprobar categoría está activa
Dentro del backoffice es necesario comprobar que ésta categoria está efectivamente activa y que pertenece a la tienda correcta (en caso de tener activado el multitienda). Esto se encuentra dentro de Catálogo > Categorías, y hacemos clic en Modificar la categoría que nos da error 404. La opción a buscar se llama Mostrados.
Regenerar archivo .htaccess
Es factible que el archivo .htaccess de la tienda online esté corrupto o tenga algún error, y no resuelva bien la URL lanzando el error 404. Para regenerar el archivo .htaccess se puede hacer entrando por FTP al sitio web de la tienda, descargar dicho archivo, que normalmente se encuentra en el raiz del sitio web, para tener una copia, y seguidamente borrarlo del sitio web. Seguidametne, se entra al backoffice y se accede a Preferencias > SEO + URLS y procedemos a poner las URL amigables (Friendly URL) como NO y guardamos. A continuación ponemos las URL amigables como SI y volvemos a guardar. Esto nos generará un .htaccess completamente nuevo.
En caso de tener activada la multitienda, se puede también regenerar el archivo .htaccess entrando a Preferencias > General y procediendo a desactivar la multitienda, salvar, volver a activar la multitienda y salvar de nuevo.
Forzar la regeneración del árbol de categorías
PrestasShop tiene un procedimiento que se puede usar para regenerar la estructura de las categorías mediante una instrucción php. El sistema es sencillo. Descargamos mediante FTP, el archivo index.php, que está localizado en el raíz del sitio web. A continuación editamos este archivo (ej. con el bloc de notas) e incluimos la instrucción Category::regenerateEntireNtree(); . Por último, sólo habría que entrar a la página de incio de nuestra tienda online para que se ejecutase.
Si nada de lo anterior funciona, como ha sido nuestro caso, te enseñamos como lo hemos arreglado:
La solución que hemos encontrado a este error
Mirando con detenimiento la base de datos, hemos encontrado que las categorías que daban problemas tenían los campos nleft y nright con valor 0, para la tabla ps_category. Éstos campos nleft y nright se usan, entre otras cosas, para las breadcrums (migas de pan) y ayudan a la navegación entre categorías. El hecho de que ambos campos valgan 0 nos hizo sospechar y finalmente comprobamos que efectivamente, ésto es lo que estaba provocando el error 404 en PrestaShop.
Es necesario regenerar los parámetros de nleft y nright con sus datos correctos. En teoría PrestaShop lo realiza en cuanto se crea o modifica una categoría, pero parece que si la multitienda está activado, ésta regeneración de nleft y nright no funciona como debiese, y todas las nuevas categorías aparecen con ambos campos a cero.
Por lo tanto, sólo nos queda cambiarlos a mano, entrando a la base de datos (ej. mediante phpmyadmin), ir a la tabla ps_category y buscar los registros que tengan nleft y nright a 0. En nuestro caso, nleft es el valor (id_category) del registro anterior y nright es el valor (id_category) del registro posterior al que nos encontramos.
Nótese que los números introducidos deben corresponder a valores de id_category reales.