A ZPRESTASH
P

Cómo eliminar el ID de los productos en las url amigables

Si desea eliminar el identificador de los productos que aparecen en las urls amigables, en este post le damos las pautas a seguir para solucionarlo.

Es necesario modificar código manualmente. Válido para las versiones 1.3.2 y 1.4.2 de Prestashop.

Se debe modificar el archivo prodcut.php o ProductController.php. En la versión 1.3.2 cópielo después de los includes y en la versión 1.4.2 justo debajo del tag <?php.

if(Tools::getValue('product')){    $_GET['id_product']=Db::getInstance()->getValue('SELECT id_product FROM '._DB_PREFIX_.'product_lang WHERE link_rewrite="'.pSQL(Tools::getValue('product')).'"');}

A continuación, nos vamos al archivo classes/Link.php y sustituimos el método getProductLink por lo siguiente:

public function getProductLink($id_product, $alias = NULL, $category = NULL, $ean13 = NULL){        
global $cookie;      
$lang_link = "";        
if (!isset($this->allow)) $this->allow = 0;        
if ($this->allow && $cookie->id_lang != Configuration::get('PS_LANG_DEFAULT')) $lang_link = "lang-".Language::getIsoById($cookie->id_lang)."/";        
if (is_object($id_product))  return ($this->allow == 1)?(_PS_BASE_URL_.__PS_BASE_URI__.$lang_link.(($id_product->category != 'home' AND !empty($id_product->category)) ? $id_product->category.'/' : '').$id_product->link_rewrite.($id_product->ean13 ? '-'.$id_product->ean13 : '').'.html') : (_PS_BASE_URL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product->id));      
elseif ($alias) return ($this->allow == 1)?(_PS_BASE_URL_.__PS_BASE_URI__.$lang_link.            (($category AND $category != 'home') ? ($category.'/') : '').$alias.($ean13 ? '-'.$ean13 : '').'.html') :  (_PS_BASE_URL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product));      
else return _PS_BASE_URL_.__PS_BASE_URI__.'product.php?id_product='.intval($id_product);   }

El método anterior sirve para que se generen los enlacen sin el ID.

Lo siguiente es modificar el -htacces para dirigir esos enlaces. Es necesario borrar lo que haga referencia a product.php y añadir lo siguiente:

RewriteRule ^lang-([a-z]{2})/([a-zA-Z0-9-]*)/([a-zA-Z0-9-]*).html(.*)$ /product.php?product=$3&isolang=$1$4 [L,E]RewriteRule ^lang-([a-z]{2})/([a-zA-Z0-9-]*).html(.*)$ /product.php?product=$2&isolang=$1$3 [L,E]RewriteRule ^([a-zA-Z0-9-]*)/([a-zA-Z0-9-]*).html(.*)$ /product.php?product=$2$3 [L,E]RewriteRule ^([0-9]+)-([a-zA-Z0-9-]*).html(.*)$ /product.php?product=$1$2 [L,E]

Si tiene prestashop en una carpeta (es decir, no lo tiene en la raiz del servidor) debe añadir "/nombreDeLaCarpeta" delante de "/".

Es posible que existan otras soluciones para eliminar el identificador de las urls amigables, dependiendo de la instalación o configuraciones de su ecommerce. Si desea un mayor asesoramiento del problema sobre como elimnar IDs de productos de las urls no dude en contactar con nosotros para un mejor diagnóstico.


prestashop 1.6.x


¿Te ha gustado?, compártelo:

por AZprestashop

¿Ya tiene una tienda online creada?

Si ya ha pasado la fase de crear su tienda online, podemos ayudarle a mejorar con nuestra auditoría.

Inserta la dirección de su tienda online y datos de envío

¡No te pierdas una!

Descubre los mejores trucos de Pretashop, tutoriales y consejos para optimizar tu tiendao online:

Dónde Estamos

CACERES: C/ Gabino Muriel 3, 1A
Azuaga: Avd. de la Estación 32
SEVILLA: Avd. Eduardo Dato 69, 5º Planta (edif. Galia)

Teléfonos

Cáceres: 927 26 10 71
Azuaga: 924 89 15 94
Sevilla: 954 32 35 66

Horarios

Comercial L-V: 9:00 - 15:00
Soporte L-V: 8:00 y 24:00
Urgencias: 24h los 365 días.