Jump to content

URL en combinaciones de producto Prestashop 1.7


MD85

Recommended Posts

Buenos días,

He estado buscando pero no encuentro solución. Tengo una web en Prestashop 1.5 y estoy realizando otra en Prestashop 1.7. Mi sorpresa es que las urls de las combinaciones de producto no se pueden configurar como en Prestashop 1.5. Quedando en la nueva versión del siguiente modo:

 

mitienda/es/159-199-producto.html#/66-combinacion-de-producto

Cuando realmente quiero que se quede:

mitienda/es/159-producto.html#/combinacion-de-producto_

 

Espero que me puedan ayudar, muchas gracias.

Edited by MD85 (see edit history)
Link to comment
Share on other sites

Buenas tardes,

tendrías que irte a    "Parámetros de la tienda  > Seo y URLs" , tienes que hacer scroll y bajar hasta  "Formatos de Enlaces"

 Hay se cambian las urls.

He estado haciendo pruebas y cambiando la sintaxis de los productos, lo máximo que he conseguido es esto    {id}-{rewrite}.html{id_product_attribute} cuando la sintaxis que trae por defecto prestashop 1.7 es {category:/}{id}{-:id_product_attribute}-{rewrite}{-:ean13}.html

 

Si  buscas información sobre diferencia entre "Formatos de Enlaces" de prestashop 1.5 y 1.7 quizas encuentres la solución.

Si encuentro un hueco intento terminartelo.

  

url.png

  • Like 1
Link to comment
Share on other sites

He probado el módulo y parece que no funciona con las ultimas versiones de prestashop 1.7.

En el post de Victor Rodenas hay dos enlaces a módulos que solventan el problema de los id en las urls. Aunque supongo que habrá muchos más.

 

https://www.psitsolution.com/prestashop-seo-clean-urls/es/

 

https://codecanyon.net/item/prestashop-seo-friendly-url-module/16070024?irgwc=1&clickid=y6URRv0IoxyJWTZ0RFzYkRCrUkgWYUQe5Rtf0Q0&iradid=275988&irpid=1312355&iradtype=ONLINE_TRACKING_LINK&irmptype=mediapartner&mp_value1=&utm_campaign=af_impact_radius_1312355&utm_medium=affiliate&utm_source=impact_radius

 

En tu caso quieres quitar los id de las categorías y de los atributos, no se si los módulos permiten esto. De todos modos aunque instales un módulo supongo que tendras que modificar la sintaxis del   "Formatos de Enlaces" para adaptarlo a lo que tu quieres.

  • Like 1
Link to comment
Share on other sites

Buenas tardes Fran,

Muchas gracias por la información. Claro, no puedo borrar todas las id porque mis urls tienen id (mitienda/es/159-producto.html#/combinacion-de-producto_), en Prestashop 1.7 lo que tienen es id duplicada en el producto + id en la combinación (mitienda/es/159-199-producto.html#/66-combinacion-de-producto). Ni tampoco se puede formular la url con el formato que uno quiera. Lo que necesito es poder darle a las urls de combinaciones el formato que antes tenía en Prestashop 1.5.

Espero que me podáis ayudar, es muy importante tengo mi web creada e indexada en Prestashop 1.5.

 

Gracias.

Un  saludo.

Edited by MD85 (see edit history)
Link to comment
Share on other sites

Creo que no se puede, no se exactamente desde que version .

He probado muchos modulos de reescritura de url y no recuerdo que en ninguno lo puedas hacer.

Otra cosa seria añadir un override para que no lo hiciera. siempre y cuando se pudiera.

Prueba a añadir esta misma pregunta en el apartado ingles , a ver si ahi te pueden ayudar mejor.

Puede que al final vas a tener que hacer un fichero tipo sitemap para añadirlo al htaccess y redirigir las URL viejas a las nuevas.

 

  • Like 1
Link to comment
Share on other sites

Hola de nuevo Sara,

He estado mirando y :

el "199" es la posición del atributo o combianción y se puede eliminar sin problema.

- el "66"  es  el id del atributo y solo se puede eliminar cambiando el código fuente (que no se como se hace) o instalando un módulo para eliminarlo.

Hay muchos módulos para esto, si buscas  en google "eliminar id  en url prestashop 1.7"  te salrá un monton de resultados de módulos y videos explicativos.

No se puede hacer de otra manera.

Te recomiendo que antes de comprar uno, contactes con el vendedor y le preguntas que solo quieres eliminar el número de la posicción del atributo (en tu ejemplo "199") y el id  del atributo (en tu ejemplo "66"). Si te contestan es que tienen un buen servicio al cliente que es importatísimo por si tienes algun problema.

Te dejo un link del video de  uno de estos módulos para que veas como actuan estos módulos:

Si te gusta te dejo el para que contactes con la empresa, aunque ya tee he dicho que hay muchos,  investiga y compra el que mas te guste.

https://www.sunnytoo.com/product/prestashop-removing-ids-urls-module-seo-friendly?wpam_id=1

 

 

  • Like 2
Link to comment
Share on other sites

Ah, se me olvidaba, comprueba que las urls de las categorías y páginas cms como "contacte con nosotros" y demás tengan la misma extructura quee la de tu prestashop 1.5.

Por otro lado, en el apartado Internacional>Localización pestaña Geolocalización, no actives la "geolocalización por ip" porque da  errores 503 y tampoco restringas ningun país porque el robot de google puede estar en cualquier país.

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...
  • 1 month later...

¿Alguien sabe como cambiar las estructuras de las urls desde código? Me da igual que las urls que no sean combinaciones tengan ids. Tengo urls indexadas y quiero lo más sencillo para que las urls de las combinaciones sean como en versiones anteriores.

En la actualidad está así {id}{-:id_product_attribute}-{rewrite}{-:ean13}.html y la quiero dejar así {id}-{rewrite}{-:ean13}.html, quiero eliminar {-:id_product_attribute}

Necesitamos ayuda, gracias.

Edited by MD85 (see edit history)
Link to comment
Share on other sites

si q se puede. mira este ps 1.7

https://www.xtremegrow.com/armario-cultivo-cultibox-light#/109-tamano-60_x_60_x_140_cm

https://www.xtremegrow.com/armario-cultivo-cultibox-light#/111-tamano-80_x_80_x_160_cm

con esto agrego la combinacion a la url,  esero q sirva

export function checkUrl() {
    let original_url = window.location + '';
    let first_url_check = true;
    if (original_url != window.location || first_url_check)
    {
      let first_url_check = false;
      let url = window.location + '';
      // if we need to load a specific combination
      if (url.indexOf('#/') != -1)
      {
        // get the params to fill from a "normal" url
        let params = url.substring(url.indexOf('#') + 1, url.length);
        let tabParams = params.split('/');
        let tabValues = [];
        if (tabParams[0] == '')
          tabParams.shift();

        let len = tabParams.length;
        for (let i=0; i<len; i++)
        {
          tabParams[i] = tabParams[i].replace('/', '-');
          tabValues.push(tabParams[i].split('-'));
        }
         return tabValues;
      }
      	return;
    }

 

  • Like 1
Link to comment
Share on other sites

Gracias por la ayuda, pero no serviría ya que la combinación sigue apareciendo en la url y con id.

Necesito que la url del producto con combinación sea www.miweb.com/es/152-producto.html y cuando seleccionas combinaciones www.miweb.com/es/152-producto.html#/combinacion

Gracias

Link to comment
Share on other sites

13 hours ago, MD85 said:

Gracias por la ayuda, pero no serviría ya que la combinación sigue apareciendo en la url y con id.

Necesito que la url del producto con combinación sea www.miweb.com/es/152-producto.html y cuando seleccionas combinaciones www.miweb.com/es/152-producto.html#/combinacion

Gracias

pr vamos a ver, que mas da q salgan las ids en las combinaciones si esas urls no se indexan.

Porque motivo quieres quitar las ids del trozo de las combioanciones en la url?

Edited by burrots (see edit history)
  • Like 1
Link to comment
Share on other sites

On 3/15/2019 at 2:13 AM, burrots said:

pr vamos a ver, que mas da q salgan las ids en las combinaciones si esas urls no se indexan.

Porque motivo quieres quitar las ids del trozo de las combioanciones en la url?

Muchas gracias, puede ser una solución. Lo que me choca es que cuando eliges un producto la url ya aparece con la combinación, ¿se podría hacer para que no apareciera la combinación por defecto?

¿Me puedes decir la ruta para agregar o modificar el código?

Mil gracias.

Link to comment
Share on other sites

1 hour ago, burrots said:

solo por curiosidad?

pk kieres k al entrar el producto lo haga sin la combiancion en la url?

Veo la url mucho más limpia, las urls son muy largas, cuando alguien copie y pegue la url esta copiando la url de una combinación no del producto... 

Pero sino se puede agradecería que me dijeras donde tengo que incluir o modificar el código ya que lo quiero emplear.

Gracias de nuevo.

Link to comment
Share on other sites

hace 48 minutos, MD85 dijo:

Veo la url mucho más limpia, las urls son muy largas, cuando alguien copie y pegue la url esta copiando la url de una combinación no del producto... 

Pero sino se puede agradecería que me dijeras donde tengo que incluir o modificar el código ya que lo quiero emplear.

Gracias de nuevo.

Añade productos independientes, sin combinaciones, se acabo el problema de ids en la url.

Fuera coñas, si un producto tiene combinaciones se deben mostrar o el sistema es imposible que sepa que combinación quiere el comprador.

Quieres mostrar un producto con combinaciones sin la url de la combinacion, recuerda que siempre hay una por defecto, no se puede o cada vez que entre un posible cliente al añadir al carrito dara error porque no hay una combinacion "elegida" al leer ese dato de la url.

Que al copiar y pegar es larga la URL, prueba a copiar una de Amazon y veras lo que son url largas

SEO y URL limpias y cortas-> personalmente creo que se toma muy en serio esto, si lo quieres totalmente limpio, productos independientes y que solo puedan comprar 1 color o 1 talla, si quieren tener otro color o talla añade enlace al otro producto independiente y que visiten el otro producto y lo compren.

 

Link to comment
Share on other sites

58 minutes ago, gusman126 said:

Añade productos independientes, sin combinaciones, se acabo el problema de ids en la url.

Fuera coñas, si un producto tiene combinaciones se deben mostrar o el sistema es imposible que sepa que combinación quiere el comprador.

Quieres mostrar un producto con combinaciones sin la url de la combinacion, recuerda que siempre hay una por defecto, no se puede o cada vez que entre un posible cliente al añadir al carrito dara error porque no hay una combinacion "elegida" al leer ese dato de la url.

Que al copiar y pegar es larga la URL, prueba a copiar una de Amazon y veras lo que son url largas

SEO y URL limpias y cortas-> personalmente creo que se toma muy en serio esto, si lo quieres totalmente limpio, productos independientes y que solo puedan comprar 1 color o 1 talla, si quieren tener otro color o talla añade enlace al otro producto independiente y que visiten el otro producto y lo compren.

 

en ps 1.7 si peudes tener una url sin combinacion aunque el producto tenga.

Mira ejemplo demo 1.7

http://fo.demo.prestashop.com/es/art/3-the-best-is-yet-to-come-framed-poster.html

esta seria la caninca del prodcto id 3, que si accedes te hara un 301 hacia la url x defecto, en este caso:

http://fo.demo.prestashop.com/es/art/3-13-the-best-is-yet-to-come-framed-poster.html

Saludos

  • Like 1
Link to comment
Share on other sites

Ok, a lo de canonica, ira directo a la combinación por defecto.

al cambiar a otras combinaciones vuelve a aparecer la url de combinación y si pones la combinaciñón por defecto seguira mostrando la url.

Aunque lo dicho, no controlo el SEO de URLs pero en muchas ocasiones las url limpias son mas para direcciones de servicios o entradas en el blog que para productos. no es un mensaje de SEO por lo que se puede hacer un tema de esto y no seguir contestando aqui.

 

Link to comment
Share on other sites

1 hour ago, gusman126 said:

Aunque lo dicho, no controlo el SEO de URLs pero en muchas ocasiones las url limpias son mas para direcciones de servicios o entradas en el blog que para productos. no es un mensaje de SEO por lo que se puede hacer un tema de esto y no seguir contestando aqui.

Totalmente de acuerdo, lo d quitar ids es mas una pijeria q nada mas.

importa mas q haya keywords en las urls y sean cortas q tengan o no ids

  • Like 1
Link to comment
Share on other sites

 
 
 
On 1/3/2019 at 3:21 PM, Fran Ramírez said:

Hola de nuevo Sara,

He estado mirando y :

el "199" es la posición del atributo o combianción y se puede eliminar sin problema.

- el "66"  es  el id del atributo y solo se puede eliminar cambiando el código fuente (que no se como se hace) o instalando un módulo para eliminarlo.

Hay muchos módulos para esto, si buscas  en google "eliminar id  en url prestashop 1.7"  te salrá un monton de resultados de módulos y videos explicativos.

No se puede hacer de otra manera.

Te recomiendo que antes de comprar uno, contactes con el vendedor y le preguntas que solo quieres eliminar el número de la posicción del atributo (en tu ejemplo "199") y el id  del atributo (en tu ejemplo "66"). Si te contestan es que tienen un buen servicio al cliente que es importatísimo por si tienes algun problema.

Te dejo un link del video de  uno de estos módulos para que veas como actuan estos módulos:

Si te gusta te dejo el para que contactes con la empresa, aunque ya tee he dicho que hay muchos,  investiga y compra el que mas te guste.

https://www.sunnytoo.com/product/prestashop-removing-ids-urls-module-seo-friendly?wpam_id=1

 

 

Muchísimas gracias @Fran Ramírez!  Por chafardear me llevo algo muy bueno que no tenía ni idea de que se podía hacer. 

Implementado y funcionando, muy fácil. Incluso para un inexperto como yo. 

Gracias! 

Link to comment
Share on other sites

On 3/14/2019 at 2:07 AM, burrots said:

si q se puede. mira este ps 1.7

https://www.xtremegrow.com/armario-cultivo-cultibox-light#/109-tamano-60_x_60_x_140_cm

https://www.xtremegrow.com/armario-cultivo-cultibox-light#/111-tamano-80_x_80_x_160_cm

con esto agrego la combinacion a la url,  esero q sirva


export function checkUrl() {
    let original_url = window.location + '';
    let first_url_check = true;
    if (original_url != window.location || first_url_check)
    {
      let first_url_check = false;
      let url = window.location + '';
      // if we need to load a specific combination
      if (url.indexOf('#/') != -1)
      {
        // get the params to fill from a "normal" url
        let params = url.substring(url.indexOf('#') + 1, url.length);
        let tabParams = params.split('/');
        let tabValues = [];
        if (tabParams[0] == '')
          tabParams.shift();

        let len = tabParams.length;
        for (let i=0; i<len; i++)
        {
          tabParams[i] = tabParams[i].replace('/', '-');
          tabValues.push(tabParams[i].split('-'));
        }
         return tabValues;
      }
      	return;
    }

 

Hola, 

¿Me puedes decir donde incluir ese código? 

Gracias.

Link to comment
Share on other sites

Quote

Hola, 

¿Me puedes decir donde incluir ese código? 

Gracias.

En ES6 creo la clase para exportar como decia antes

export function checkUrl() {
    let original_url = window.location + '';
    let first_url_check = true;
    if (original_url != window.location || first_url_check)
    {
      let first_url_check = false;
      let url = window.location + '';
      // if we need to load a specific combination
      if (url.indexOf('#/') != -1)
      {
        // get the params to fill from a "normal" url
        let params = url.substring(url.indexOf('#') + 1, url.length);
        let tabParams = params.split('/');
        let tabValues = [];
        if (tabParams[0] == '')
          tabParams.shift();

        let len = tabParams.length;
        for (let i=0; i<len; i++)
        {
          tabParams[i] = tabParams[i].replace('/', '-');
          tabValues.push(tabParams[i].split('-'));
        }
         return tabValues;
      }
      	return;
    }

Luego en product.js

Importamos class y creamos funcion q haga el cambio de combinación si la detecta en la url

import {checkUrl} from './components/common';

function checkurl() {
	let checkurl = checkUrl();
    if (checkurl) {
		$('.product-variants select option').attr('selected', false);
		$('.product-variants [type="radio"]').attr('checked', false);
		$(checkurl).each((i, el) => {
        	$('.product-variants select option[value="' + el[0] + '"]').attr('selected', true);
        	$('.product-variants [type="radio"][value="' + el[0] + '"]').attr('checked', true)
      	});
    	$("input[name$='refresh']").click();
 	}
}

Y lo inicimos asi:

$(document).ready(function () {
	checkurl()
});

Suerte

Link to comment
Share on other sites

Buenos días,

Llevo unos días intentándolo pero no se modifica nada. 

El primer código lo incluyo en el archivo common 

El segundo código en la parte superior de product.js y el checkrul en el apartado que se indica pero no hay manera.

¿Es así? 

Muchas gracias.

Edited by MD85 (see edit history)
Link to comment
Share on other sites

2 hours ago, MD85 said:

Buenos días,

Llevo unos días intentándolo pero no se modifica nada. 

El primer código lo incluyo en el archivo common 

El segundo código en la parte superior de product.js y el checkrul en el apartado que se indica pero no hay manera.

¿Es así? 

Muchas gracias.

compilas con webpack?

esa es la manera en q lo tengo yo... pr si no utilzas webpack debes utilzar js tradicional e incluir todo eso en el custom.js

 

 

Link to comment
Share on other sites

He incluido dicho código en custom.js y tampoco, o ¿es hacer un módulo? No tengo conocimientos para eso.  :(

Aparece en las combinaciones ese error y la url no se modifica, es más ahora no se ven las combinaciones aparece el error:

ContextErrorException in smarty_internal_templatebase.php(157) : eval()'d code line 39:Notice: Undefined index: id_lang

Si desactivo el modulo relatedfree se ven las combinaciones, pero necesito tenerlo activado he tenido que meter todos los productos relacionados a mano.

Ahora si que necesito ayuda, es un gran problema.

Edited by MD85 (see edit history)
Link to comment
Share on other sites

9 hours ago, burrots said:

q raro.

No tendras modo errores activado.

busca en algun tpl del modulo ese la variable y prueba a cambiarla por esto

{$this->context->language->id}

Suerte

Si, ya está solucionado. He reiniciado el servidor y quitado el modo debug y se ha solucionado, vaya susto.

¿Pero tu solución es crear un módulo o solamente incluirlo en esos archivos?

Gracias.

Link to comment
Share on other sites

6 hours ago, MD85 said:

Si, ya está solucionado. He reiniciado el servidor y quitado el modo debug y se ha solucionado, vaya susto.

¿Pero tu solución es crear un módulo o solamente incluirlo en esos archivos?

Gracias.

relamente el problema sigue existiendo pero te funciona al desactivar debug, no sera algo grave...

lo q te decia era para implementar en el theme, en custom.js, pero tambien te faltaria la parte de modificar las llamadas ajax en el controller para enviarle la id_attribute, modifcar getproductlink para q te las saque con el anchor, etc. Lo veo muy lioso para ti

Creo q hay modulos q te sacan las ids d las combinaciones.

Aunque repito, veo q estas perdiendo energias y tiempo en un tema q tiene 0 repercusion en trafico y posicionameinto.

Suerte

  • Like 1
Link to comment
Share on other sites

  • 1 year later...

Hola a todos.

Un cliente tenía la URL con este formato {id}{-:id_product_attribute}-{rewrite}{-:ean13}.html y me ha pedido que lo deje en este formato {id}-{rewrite}{-:ean13}.html . Ya tengo la solución para eliminar el id_product_attribute, pero no soy capaz de hacer una redirección 301 en el .htaccess desde la url que incluye el ID del atributo a la nueva URL. ¿Alguien sabría como implementar esta regla?

Un saludo.

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...