Buscar este blog

miércoles, 17 de abril de 2013

Modificaciones en prestashop - Eliminar id de productos. Eliminar id de categorías

Nota: Esta versión está desactualizada. La actualización para nueva versión 1.6 estará disponible en un futuro, previsiblemente para finales de enero o para febrero 2016. Si desean que les avisemos cuando esté disponible rellenen el siguiente formulario: 





Para versión de Prestashop 1.4.8.2

Existe una versión mejorada para eliminar ID de producto: http://tiempodefilosofia.blogspot.com.es/2013/04/version-optima-para-eliminar-ids-de.html

Debido a la cantidad de calentamientos de cabeza que me ha llevado el quitar el id en la url de los productos y categorías, explicaré aquí como solucionarlo. Eso sí, tocando código.

Una aclaración sobre esta modificación es que no debéis usarla cuando tengáis una gran cantidad de enlaces, por ejemplo en un e-commerce ya que, como veréis, hará demasiado grande el archivo .htaccess. En futuros post mostraré como realizar la modificación cuando tengamos gran cantidad de enlaces.

Nota: En caso de que alguien lo quiera en plan módulo o para versiones superiores de prestashop y, por supuesto, totalmente gratuito y de forma desinteresada por mi parte, que me avise por medio de comentarios. Mientras tanto queda la explicación.

La explicación la realizo como si fuese un algoritmo, creo que así resulta mucho más sencillo.

NOTA SUPER IMPORTANTE: Haced una copia de seguridad de los archivos que modifiquéis para así hacer un copia pega si estropeamos algo.



  • Archivos implicados en la modificación:
    • classes/Tools.php
    • classes/Link.php
    • .htaccess
  • Comenzamos modificando el archivo Link.php:
             Eliminar ID del producto
    • Ir a función getProductLink
    • Eliminamos ID de la url. Como ejemplo: "232-nombre-producto" pasaría a ser "nombre-producto". Para ello
      • Buscar línea $link .= (int)$id_product->id.'-';
      • Comentar esta línea añadiendo // al inicio:
        • // $link .= (int)$id_product->id.'-';
    • Eliminamos EAN13 (en caso de que lo tengamos en nuestros productos también aparecerá en la URL)
      • Buscar líneas: if ($id_product->ean13) y comentar esta y las tres siguientes. Bien puede hacerse con /* Todo lo que queremos comentar dentro */ o poniendo a cada una de las líneas // . Comentamos por tanto las siguientes líneas
        • if ($id_product->ean13)
        • $link .='-'.$id_product->ean13;
        • else
        • $link .= '';
    • Eliminamos EAN13 en la parte else if ($alias) comentando las siguientes líneas (se encuentran un poco más abajo de las anteriores):
      • if ($ean13)
      • $link .='-'.$ean13;
      • else
      • $link .= '';
           Eliminar ID de categoría

    • Ir a función getCategoryLink
    • Modificar 
      • Esta línea: 
        • return ($this->allow == 1) ? (_PS_BASE_URL_.__PS_BASE_URI__.$this->getLangLink((int)($id_lang)).(int)($id_category->id).'-'.$id_category->link_rewrite) :
      • Para que quede así: 
        • return ($this->allow == 1) ? (_PS_BASE_URL_.__PS_BASE_URI__.$this->getLangLink((int)($id_lang)).$id_category->link_rewrite) :
      • Ya tenemos quitado el ID en la categoría

  • Modificamos ahora el archivo Tools.php. Aquí tocaremos la parte de generación del htaccess para mapear correctamente nuestras urls.
    • Ir a función generateHtaccess
    • Insertamos entre estas dos líneas:
      • $tab['RewriteRule']['content']['^[a-zA-Z0-9-]*/([0-9]+)\-[a-zA-Z0-9-]*\.html'] = 'product.php?id_product=$1 [QSA,L]';
      • $tab['RewriteRule']['content']['^([0-9]+)\-[a-zA-Z0-9-]*(/[a-zA-Z0-9-]*)+'] = 'category.php?id_category=$1&noredirect=1 [QSA,L]';
    • Este código:
--------------------------------------------------------------------------------------------------------------------
$resultado_para_quitar_id_producto = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT p.`id_product`, p.`link_rewrite`
FROM `'._DB_PREFIX_.'product_lang` p
WHERE p.`id_lang`=3'
);
foreach ($resultado_para_quitar_id_producto as $resultado)
$tab['RewriteRule']['content']['^([a-zA-Z0-9/\-]*)'.$resultado['link_rewrite'].'\.html'] = 'product.php?id_product='.$resultado['id_product'].' [QSA,L]';
$tab['RewriteRule']['content']['^([0-9]+)\-[a-zA-Z0-9-]*\.html'] = 'product.php?id_product=$1 [QSA,L]';

$resultado_para_quitar_id_categorias = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT c.`id_category`, c.`link_rewrite`
FROM `'._DB_PREFIX_.'category_lang` c
WHERE c.`id_lang`=3
');
foreach ($resultado_para_quitar_id_categorias as $resultado)
$tab['RewriteRule']['content']['^'.$resultado['link_rewrite']] = 'category.php?id_category='.$resultado['id_category'].' [QSA,L]';

-------------------------------------------------------------------------------------------------------------

    • Te preguntarás ¿qué c....ño hace esto? Mapea (transforma) cada url de producto que tengamos en nuestra web para que, al realizar una petición al servidor, sepa que producto estamos buscando.

Problema que tiene este código: Tendremos que generear el .htaccess cada vez que insertemos nuevos productos. Como ya dije al principio, realizaré la modificación óptima posteriormente, pero esta sirve y funciona perfectamente.

Si necesitas ayuda escribe a través del formulario de contacto en la parte derecha.
Nota: Antes de acceder al formulario aparecerá un anuncio, que en 5 segundos podrás cerrar.

4 comentarios:

  1. Felicidades por tu trabajo.
    ¿donde puedo encontrar la modificación optima?
    Gracias

    ResponderEliminar
  2. http://tiempodefilosofia.blogspot.com.es/2013/04/version-optima-para-eliminar-ids-de.html

    ResponderEliminar
    Respuestas
    1. Que tal fué??

      Conseguiste eliminar los ID de productos?

      Eliminar
  3. Hola, y es funcional en la version 1.5.4.1, estoy agradecido de recibir el modulo y gracias por el aporte
    jyeste82@hotmail.com

    ResponderEliminar

Gracias por comentar.

Si has realizado alguna consulta, responderemos lo antes posible. Gracias