Jump to content

[Aporte] Rich Snippets Para Prestashop 1.4.x y 1.5.x


 Share

Recommended Posts

Hola, he leido por encima varios hilos de tuverano.com de como poner el rich snippets y la verdad es que me han ayudado bastante, pero me gustaría aportar una opción que va todo bajo el mismo estilo de marcado, para no marear a nadie con diferentes tipos de códigos, y para hacerlo mucho más sencillo adjunto el override y el tpl del tema default de prestashop.

 

Por lo que he visto el código original no cambia ni en la versión 1.4 ni en la 1.5.5 así que estos cambios sirven para todas estas versiones.

 

Lo voy a explicar para gente que ya domine un poco, para los que necesiten más detalles les invito a que se pasen por mi blog en mi Laboratorio de prestashop

 

El marcado que aconsejo es el de microdatos que es el estandar para HTML5 y terminará sustituyendo a los demás.

 

Para el breadcrumb hacemos un override de la función getPath que encontraremos en la clase Tools.php y cambiaremos lo siguiente. (Para los impacientes tenéis los archivos ya modificados y listos para descargar).

 

ATENCIÓN EL TOOLS.PHP ES UN OVERRIDE Y DEBE DE IR EN LA CARPETA WWW.MITIENDA.COM/OVERRIDE/CLASSES/

 

Para dejarlo más claro copio el código original y luego el código modificado.

	public static function getPath($id_category, $path = '', $link_on_the_item = false, $category_type = 'products', Context $context = null)
	{
		if (!$context)
			$context = Context::getContext();

		$id_category = (int)$id_category;
		if ($id_category == 1)
			return '<span class="navigation_end">'.$path.'</span>';

		$pipe = Configuration::get('PS_NAVIGATION_PIPE');
		if (empty($pipe))
			$pipe = '>';

		$full_path = '';
		if ($category_type === 'products')
		{
			$interval = Category::getInterval($id_category);
			$id_root_category = $context->shop->getCategory();
			$interval_root = Category::getInterval($id_root_category);
			if ($interval)
			{
				$sql = 'SELECT c.id_category, cl.name, cl.link_rewrite
						FROM '._DB_PREFIX_.'category c
						LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = c.id_category'.Shop::addSqlRestrictionOnLang('cl').')
						WHERE c.nleft <= '.$interval['nleft'].'
							AND c.nright >= '.$interval['nright'].'
							AND c.nleft >= '.$interval_root['nleft'].'
							AND c.nright <= '.$interval_root['nright'].'
							AND cl.id_lang = '.(int)$context->language->id.'
							AND c.active = 1
							AND c.level_depth > '.(int)$interval_root['level_depth'].'
						ORDER BY c.level_depth ASC';
				$categories = Db::getInstance()->executeS($sql);

				$n = 1;
				$n_categories = count($categories);
				foreach ($categories as $category)
				{
					$full_path .=
					(($n < $n_categories || $link_on_the_item) ? '<a href="'.Tools::safeOutput($context->link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'">' : '').
					htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').
					(($n < $n_categories || $link_on_the_item) ? '</a>' : '').
					(($n++ != $n_categories || !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : '');
				}

				return $full_path.$path;
			}
		}
		else if ($category_type === 'CMS')
		{
			$category = new CMSCategory($id_category, $context->language->id);
			if (!Validate::isLoadedObject($category))
				die(Tools::displayError());
			$category_link = $context->link->getCMSCategoryLink($category);

			if ($path != $category->name)
				$full_path .= '<a href="'.Tools::safeOutput($category_link).'">'.htmlentities($category->name, ENT_NOQUOTES, 'UTF-8').'</a><span class="navigation-pipe">'.$pipe.'</span>'.$path;
			else
				$full_path = ($link_on_the_item ? '<a href="'.Tools::safeOutput($category_link).'">' : '').htmlentities($path, ENT_NOQUOTES, 'UTF-8').($link_on_the_item ? '</a>' : '');

			return Tools::getPath($category->id_parent, $full_path, $link_on_the_item, $category_type);
		}
	}

Cambiamos por

	public static function getPath($id_category, $path = '', $link_on_the_item = false, $category_type = 'products', Context $context = null)
	{
		if (!$context)
			$context = Context::getContext();

		$id_category = (int)$id_category;
		if ($id_category == 1)
			return '<li class="navigation_end">'.$path.'</li>';

		$pipe = Configuration::get('PS_NAVIGATION_PIPE');
		if (empty($pipe))
			$pipe = '>';

		$full_path = '';
		if ($category_type === 'products')
		{
			$interval = Category::getInterval($id_category);
			$id_root_category = $context->shop->getCategory();
			$interval_root = Category::getInterval($id_root_category);
			if ($interval)
			{
				$sql = 'SELECT c.id_category, cl.name, cl.link_rewrite
						FROM '._DB_PREFIX_.'category c
						LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = c.id_category'.Shop::addSqlRestrictionOnLang('cl').')
						WHERE c.nleft <= '.$interval['nleft'].'
							AND c.nright >= '.$interval['nright'].'
							AND c.nleft >= '.$interval_root['nleft'].'
							AND c.nright <= '.$interval_root['nright'].'
							AND cl.id_lang = '.(int)$context->language->id.'
							AND c.active = 1
							AND c.level_depth > '.(int)$interval_root['level_depth'].'
						ORDER BY c.level_depth ASC';
				$categories = Db::getInstance()->executeS($sql);

				$n = 1;
				$n_categories = count($categories);
				foreach ($categories as $category)
				{
					$full_path .=
					(($n < $n_categories || $link_on_the_item) ? '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a itemprop="url" href="'.Tools::safeOutput($context->link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'"><span itemprop="title">' : '<li><span>').
					htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').
					(($n < $n_categories || $link_on_the_item) ? '</span></a></li>' : '</span></li>').
					(($n++ != $n_categories || !empty($path)) ? '<li class="navigation-pipe">'.$pipe.'</li>' : '');
				}

				return $full_path.($path ? '<li><span>'.$path.'</span></li>' : '');
			}
		}
		else if ($category_type === 'CMS')
		{
			$category = new CMSCategory($id_category, $context->language->id);
			if (!Validate::isLoadedObject($category))
				die(Tools::displayError());
			$category_link = $context->link->getCMSCategoryLink($category);

			if ($path != $category->name)
				$full_path .= '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a itemprop="url" href="'.Tools::safeOutput($category_link).'"><span itemprop="title">'.htmlentities($category->name, ENT_NOQUOTES, 'UTF-8').'</span></a></li><li class="navigation-pipe">'.$pipe.'</li>'.$path;
			else
				$full_path = ($link_on_the_item ? '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a itemprop="url" href="'.Tools::safeOutput($category_link).'"><span itemprop="title">' : '').htmlentities($path, ENT_NOQUOTES, 'UTF-8').($link_on_the_item ? '</span></a></li>' : '');

			return Tools::getPath($category->id_parent, $full_path, $link_on_the_item, $category_type);
		}
	}

Fin para Breadcrumbs.

 

Para los Snippets de productos hay que modificar el product.tpl del tema que tengamos **Actualizado 04-03-2015**

 

NOTA: Como referencia tomamos el product.tpl de la plantilla por defecto de Prestashop 1.5

 

Hemos de incluir todo el marcado en el contenedor que englobe toda la ficha de producto, ese es el div del primary_block. lo encontraremos sobre la línea 160-161.

 

O: indica línea original
RS: indica el código modificado para Richsnippets

O: <div id="primary_block" class="clearfix">

RS: <div id="primary_block" class="clearfix" itemtype="http://schema.org/Product" itemscope="">

Con esto indicamos que todo el marcado que se encuentre dentro de ese div pertenece al producto, lo que esté fuera del div no se considerará parte del producto.

 

Si quieres incluir el EAN13 y no lo tienes visible en la ficha incluye la siguiente línea, si lo tienes visible solo tendrías que añadir itemprop="gtin13" en su etiqueta correspondiente.

RS: <meta itemprop="gtin13" content="{$product->ean13}" />

(Línea 186 y 191)

Ahora buscamos en el código las etiquetas id="bigpic" tendremos 2, una vez las encontremos añadiremos al principio de la etiqueta itemprop="image"

O: <img src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')|escape:'html'}"{if $jqZoomEnabled && $have_image} class="jqzoom"{/if} title="{if !empty($cover.legend)}{$cover.legend|escape:'htmlall':'UTF-8'}{else}{$product->name|escape:'htmlall':'UTF-8'}{/if}" alt="{if !empty($cover.legend)}{$cover.legend|escape:'htmlall':'UTF-8'}{else}{$product->name|escape:'htmlall':'UTF-8'}{/if}" id="bigpic" width="{$largeSize.width}" height="{$largeSize.height}"/>

RS: <img itemprop="image" src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')|escape:'html'}"{if $jqZoomEnabled && $have_image} class="jqzoom"{/if} title="{if !empty($cover.legend)}{$cover.legend|escape:'htmlall':'UTF-8'}{else}{$product->name|escape:'htmlall':'UTF-8'}{/if}" alt="{if !empty($cover.legend)}{$cover.legend|escape:'htmlall':'UTF-8'}{else}{$product->name|escape:'htmlall':'UTF-8'}{/if}" id="bigpic" width="{$largeSize.width}" height="{$largeSize.height}"/> 

O: <img src="{$img_prod_dir}{$lang_iso}-default-large_default.jpg" id="bigpic" alt="" title="{$product->name|escape:'htmlall':'UTF-8'}" width="{$largeSize.width}" height="{$largeSize.height}" />

RS: <img itemprop="image" src="{$img_prod_dir}{$lang_iso}-default-large_default.jpg" id="bigpic" alt="" title="{$product->name|escape:'htmlall':'UTF-8'}" width="{$largeSize.width}" height="{$largeSize.height}" />

(Línea 234)

Para el nombre del producto, buscando la etiqueta <h1

O: <h1>{$product->name|escape:'htmlall':'UTF-8'}</h1>

RS: <h1 itemprop="name">{$product->name|escape:'htmlall':'UTF-8'}</h1>

(Línea 239)

Ahora la descripción, buscamos la línea con la etiqueta id="short_description_content" y añadimos itemprop="description"

O: <div id="short_description_content" class="rte align_justify">{$product->description_short}</div>

RS: <div itemprop="description" id="short_description_content" class="rte align_justify">{$product->description_short}</div>

(Línea 390)

Buscamos la etiqueta id="our_price_display" y le añadimos un nuevo tipo de datos anidado al propucto.

O: <p class="our_price_display">

RS: <p class="our_price_display" itemtype="http://schema.org/Offer" itemscope="" itemprop="offers">

(Línea 392)

Buscaremos la línea donde se muestra el precio y añadiremos la etiqueta correspondiente, además aprovecharemos y justo debajo incluiremos el tipo de moneda y la disponibilidad del producto tal y como se indica en la documentación de Google.

O: <span id="our_price_display">{convertPrice price=$productPrice}</span>

RS: <span id="our_price_display" itemprop="price">{convertPrice price=$productPrice}</span>
    <meta itemprop="priceCurrency" content="{$currency->iso_code}" />
    <meta itemprop="availability" {if $product->quantity <= 0}{if $allow_oosp}content="preorder"{else}content="out_of_stock"{/if}{else}content="in_stock"{/if}/>

Ya tenemos nuestro Presashop con Rich Snippets, Fácil, ¿No?.

 

Para testear los rich snippets desde google, podéis hacerlo desde aquí

 

Cualquier duda o sugerencia lo cometamos ;)

rich-snippets-ps.zip

Edited by Presta-Lab (see edit history)
  • Like 5

Share this post


Link to post
Share on other sites

Pienso, si no tienes el primary_block tendrás otra etiqueta en el div.

 

Lo que puedes hacer es pegarlo justo después de cargar el breadcrumb

 

{include file="$tpl_dir./breadcrumb.tpl"}

 

Aquí pega el código de meta de rich snippets

 

Luego te aparecerá un <div ... > en la versión default de prestashop es un <div id="primary_block" class="clearfix">, pero seguramente tendrá otra etiqueta id que no afecta para nada a las rich snippets.

 

Ya dirás si te funciona correctamente.

Share this post


Link to post
Share on other sites

Hola javsmile, lo primero muchas gracias por tu aporte,

 

He seguido todos los pasos de tu blog tanto para el Tools.php como para el product.tpl , cuando entro en la ficha de producto se me genera el archivo class_index.php pero no consigo ver los cambios con la herramienta de Google. Sólo me aparece el precio y lo más importante, no me aparece la foto del producto.

 

Debo ver los cambios de manera inmediata o tardan unos días en aparecer en http://www.google.com/webmasters/tools/richsnippets

 

Gracias!

 

 

PD: Aunque yo realizé los cambios de manera manual uno a uno he visto los archivos que has subido en el zip y el archivo Tools.php tan sólo tiene 83 lineas, entiendo que no es un archivo Tools completo sino un trozo de código para sustituir, creo que deberias indicarlo para evitar que alguien lo reemplaze por completo por su archivo tools.php.

Edited by juanmlg (see edit history)

Share this post


Link to post
Share on other sites

Hola Juanmlg.

 

Ya he remarcado lo del archivo Tools.php. Que más que sustituir la función hay que hacer un override del Tools.php. Que si no la liamos en un periquete ;)

 

Lo cambios tienen que ser inmediatos, pero a veces se queda pillado con la cache y lo mejor que puedes hacer es probar con la ficha de otro producto.

 

Piensa que la imagen como tal no la verás en esa prueba, pero verás las url's compruébalas y si la ruta está bien no tienes por qué preocuparte.

 

supongo que verás algo parecido a la imagen que adjunto.

 

Bueno aquí verás algo más puesto que tengo una valoración del producto, por eso salen las estrellitas, y el logo de abajo es por que tengo enlazado el contenido con la cuenta de publisher de google+.

 

Céntrate en que se te vean bien la ruta, garamo.com>perfumería>etc.. en vez de la URL y como bien dices que se vea el precio, si quieres ver las estrellitas realiza una valoración al producto y listos.

 

Hay que tener en cuenta varias cosas, sobre los rich snippets. Aunque tengas bien configurado los rich snippets, Google decidirá si mostrar y que mostrar en las búsquedas dependiendo otros factores de tu web.

 

En la ayuda de rich snippets de webmaster de google puedes ver información más detallada.

post-320474-0-54042000-1379966603_thumb.png

Share this post


Link to post
Share on other sites

Muchas gracias por tu respuesta Javsmile, he vuelto a realizar el proceso de nuevo y con cuidado y ahora si funciona correctamente, Breadcrum, Precio y valoración.

 

Ahora a ver si Google se porta bien y muestra todo en las busquedas.

 

Una pregunta más, recomendarías modificar la etiqueta body de esta manera?

 

< body itemscope itemtype="http://schema.org/Store" >

 

o no es necesario?

 

 

Un saludo y gracias de nuevo!

Share this post


Link to post
Share on other sites

Vuelvo para comentarte que en la herramienta de pruebas de datos estructurados, aún mostrando bien los Rich Snippets aparece el siguiente mensaje:

 

Error: This information will not appear as a rich snippet in search results, because it is contained in a hidden HTML element. Except in special circumstances, Google won't display content that is not visible to the user. You should mark up the text that actually appears to your users when they visit your web pages.

 

He intentado dar con la solución pero no lo he logrado.

 

Un saludo!

Share this post


Link to post
Share on other sites

Hola Juanmlg.

 

Lo de poner el itemscope itemtype="http://schema.org/Store" en el body no creo que sea la mejor opción.

 

Si quieres etiquetar datos de tu empresa, puedes etiquetar la página con la información de contacto, mírtate este link para saber que datos etiquetar.

 

El error de Google es normal, aunque más que un error podría ser un aviso, lo que dice en ese mensaje es que hay algunos datos que no aparecen visibles en la web (todas las metas con content son datos ocultos). Lo que puedes hacer es adaptar la plantilla para que se muestren al usuario.

 

Para hacerlo mejor sería mostrar el texto de la marca en algún lugar de la ficha del producto y etiquetar el código que muestra la marca con id="rs_name_br" itemprop="name" Ej.

 

En algún lado de product.tpl

<span id="rs_name_br" itemprop="name">{$product_manufacturer->name}</span>

 y por supuesto nos cargamos la línea

<meta id="rs_name_br" itemprop="name" content="{$product_manufacturer->name}" />

De esta forma mostramos esa información al usuario y google lo aceptará mejor.

 

Un saludo.

Share this post


Link to post
Share on other sites

Hola Juanmlg.

 

Lo de poner el itemscope itemtype="http://schema.org/Store" en el body no creo que sea la mejor opción.

 

Si quieres etiquetar datos de tu empresa, puedes etiquetar la página con la información de contacto, mírtate este link para saber que datos etiquetar.

 

El error de Google es normal, aunque más que un error podría ser un aviso, lo que dice en ese mensaje es que hay algunos datos que no aparecen visibles en la web (todas las metas con content son datos ocultos). Lo que puedes hacer es adaptar la plantilla para que se muestren al usuario.

 

Para hacerlo mejor sería mostrar el texto de la marca en algún lugar de la ficha del producto y etiquetar el código que muestra la marca con id="rs_name_br" itemprop="name" Ej.

 

En algún lado de product.tpl

<span id="rs_name_br" itemprop="name">{$product_manufacturer->name}</span>

 y por supuesto nos cargamos la línea

<meta id="rs_name_br" itemprop="name" content="{$product_manufacturer->name}" />

De esta forma mostramos esa información al usuario y google lo aceptará mejor.

 

Un saludo.

 

 

Muchísimas gracias por todo, y por los consejos!

Share this post


Link to post
Share on other sites

Si señor, buen aporte, y sobre todo muy buena explicación. No sólo lo dás hecho si no que nos enseñas como funciona.

 

La única pega (pero es de google) es que los datos estructurados estos se cargan completamente el sistema de precios por país de prestashop, así como el idioma automático.

 

Es decir si tenemos idioma automático y precio por país, veremos el tema en ingles y en el precio de USA, pero es lo que tiene google y la geolicalización

Share this post


Link to post
Share on other sites

mmm, investigando en lo anterior veo que existe la posibilidad de tener datos estructurados de productos con muchas ofertas:

 

http://www.google.com/webmasters/tools/richsnippets?q=http%3A%2F%2Fwww.ebay.ca%2Fctg%2FSamsung-Galaxy-Nexus-SCH-I515-32GB-Metallic-silver-Verizon-Smartphone-%2F110853084

 

si quito el precio desaparecen tambien las estrellitas de la valoración de los clientes, que es lo más importante, podríamos tener un precio desde y hasta implementando esto: 

 

itemprop="minPrice"

itemprop="maxPrice"

 

a pelo, es decir que por ejemplo el maxprice fuese nuestro precio y el minprice la mitad una en lugar de 100€ darle el rango 50-100€ ?

Edited by moraira (see edit history)

Share this post


Link to post
Share on other sites

Hola Moraira.

 

Cómo no utilizo el idioma automático no te puedo comentar mucho sobre qué etiqueta deja Prestashop.

 

No viene al caso pero mírate que tipo de redirección que te genera prestashop, al menos en la versión 1.4.2 hacía un redireccionamiento 302 (Movido Temporalmente) a todas las URL's y eso no ayuda en nada al posicionamiento.

 

Sobre las etiquetas "minprice" y "maxprice" Creo que Google las interpreta para una oferta global que sirve para comparadores o para una página antes de llegar al producto en cuestión, si no he entendido mal estas etiquetas google no las quiere en la ficha de producto. Por favor corrígeme si me equivoco.

 

Un saludo.

Share this post


Link to post
Share on other sites

  • 4 weeks later...

Hola javsmile

 

Muchas Gracias por el aporte, estaba buscando algo asi y gracias al tutorial me ha resultado muy facil.

Al probar en la herramienta de google webmaster muestra todos los datos correctos excepto el stock del producto, he modificado el product.tpl de nuevo añadiendo esto:

 

<meta id="rs_offers" itemprop="offers" itemscope itemtype="http://schema.org/Offer" itemref="our_price_display rs_priceCurrency_ofr availability_value" />

 

Y esto:

 

<!-- availability -->
                <p id="availability_statut"{if ($product->quantity <= 0 && !$product->available_later && $allow_oosp) OR ($product->quantity > 0 && !$product->available_now) OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none;"{/if}>
                    <span id="availability_label">{l s='Availability:'}</span>
                    <span id="availability_value" itemprop="availability"{if $product->quantity <= 0} class="warning_inline"{/if}>
                    {if $product->quantity <= 0}{if $allow_oosp}{$product->available_later}{else}{l s='This product is no longer in stock'}{/if}{else}{$product->available_now}{/if}
                    </span>

 

Despues de estas modificaciones en la herramienta de prueba de webmasters ya añade la linea ``availability´´:

 

Item 2

type: http://schema.org/offer property:   pricecurrency: EUR price: 64,00 € availability: En Stock

 

El problema es que no llega a mostrarla en la vista previa de los resultados: ¿alguna idea de cual puede ser el problema?

Titulo de la pagina

www.xxxx.com › Tablets › Oem
64,00 €
El fragmento de la página aparecerá aquí. El motivo por el que no podemos mostrar texto de tu página web es que el texto mostrado depende de la consulta realizada por el usuario.

 

 

Muchas Gracias!

Edited by toni87 (see edit history)

Share this post


Link to post
Share on other sites

  • 5 weeks later...
  • 1 month later...

Javsmilec primero agradecer el aporte, tengo la version 1.5.6.1 de prestashop y en la ruta override/classes no tengo ningún archivo tools.php asi que decidí bajar el zip que compartiste y lo pegue en esa ruta ademas de product.tpl he ido a la herramienta de google pero me dice que no tengo datos estructurados no se si he hecho algún paso mal te agradezco de antemano por tu apoyo.

 

Muchas Gracias

Saludos

Christian 

Share this post


Link to post
Share on other sites

Olvide mencionar que me sale dos errores en la herramienta de google :

 

Error: Incomplete microdata with schema.org.

 

Error: This information will not appear as a rich snippet in search results, because it is contained in a hidden HTML element. Except in special circumstances, Google won't display content that is not visible to the user. You should mark up the text that actually appears to your users when they visit your web pages

 

 

Gracias

Share this post


Link to post
Share on other sites

Muchas gracias por tu respuesta Javsmile, he vuelto a realizar el proceso de nuevo y con cuidado y ahora si funciona correctamente, Breadcrum, Precio y valoración.

 

Ahora a ver si Google se porta bien y muestra todo en las busquedas.

 

Una pregunta más, recomendarías modificar la etiqueta body de esta manera?

 

< body itemscope itemtype="http://schema.org/Store" >

 

o no es necesario?

 

 

Un saludo y gracias de nuevo!

Hola como lograste colocar la valoracion del producto ? Gracias

Share this post


Link to post
Share on other sites

Bueno continuamos con el gran fallo de prestashop(precios especificos y divisas) y Google META RICH SNIPPETS

 

Me explico para los nuevos, si usamos divisas y/o precios especificos por país, EL SISTEMA NO VALE, o mejor dicho vale mal. Ya que los servidores de google estan en USA, y con el sistema de prestashop analizaran nuestros productos en dolares, y a precio USA.

 

Si tenemos el mismo precio en todo el mundo y sólo usamos euros entonces si funcionara. pero nos cargamos la idea de dar un precio totalizado pais por pais como hacemos nosotros (no hay gastos de envío, están incluidos porque cada país tiene su precio, un sistema mucho más eficaz para vender, lo que el usuario ve es lo que paga, sin extras) pero para google....

 

Por rizar el rizo, si usamos divisas deberíamos cambiar esta linea

<meta id="rs_priceCurrency_ofr" itemprop="priceCurrency" content="EUR" />

por esta

<meta id="rs_priceCurrency_ofr" itemprop="priceCurrency" content="{$currency->iso_code}" />
la verdad es que creo que este problema no tiene solución a no ser que google indexase con IP del pais de busqueda. (que sería lo logico)

Share this post


Link to post
Share on other sites

Hola, utilizo un prestashop 1.4.4.1

1- En la carpeta  override/classes/ tengo _Tools.php y no Tools.php, lo he renombrado, es correcto? Parece que todo funcione bien.

2- No utilizo el tema default, uso uno customizado pero muy similar, sobreescribo product.tpl y la tienda funciona perfectamente, pero voy a las Herramientas de pruebas de datos estructurados y no funciona; no aparece ni el nombre del producto, ni el precio; que estoy haciendo mal? Muchas gracias por adelnato. Un saludo.

Edited by Antoniowebs (see edit history)

Share this post


Link to post
Share on other sites

  • 4 weeks later...
  • 2 weeks later...

Hola Juanmlg.

 

Ya he remarcado lo del archivo Tools.php. Que más que sustituir la función hay que hacer un override del Tools.php. Que si no la liamos en un periquete ;)

 

Lo cambios tienen que ser inmediatos, pero a veces se queda pillado con la cache y lo mejor que puedes hacer es probar con la ficha de otro producto.

 

Piensa que la imagen como tal no la verás en esa prueba, pero verás las url's compruébalas y si la ruta está bien no tienes por qué preocuparte.

 

supongo que verás algo parecido a la imagen que adjunto.

 

Bueno aquí verás algo más puesto que tengo una valoración del producto, por eso salen las estrellitas, y el logo de abajo es por que tengo enlazado el contenido con la cuenta de publisher de google+.

 

Céntrate en que se te vean bien la ruta, garamo.com>perfumería>etc.. en vez de la URL y como bien dices que se vea el precio, si quieres ver las estrellitas realiza una valoración al producto y listos.

 

Hay que tener en cuenta varias cosas, sobre los rich snippets. Aunque tengas bien configurado los rich snippets, Google decidirá si mostrar y que mostrar en las búsquedas dependiendo otros factores de tu web.

 

 

------ como se hace el overrride... perdón soy nuevo en lo de prestashop?

Edited by luxotk (see edit history)

Share this post


Link to post
Share on other sites

  • 6 months later...

Hola:

 

Excelente tutorial, pero recientemente hemos migrado todo a prestashop 1.6, ¿podriamo utilizar este metodo para las google META RICH SNIPPETS?

 

Hemos subido tambien el sitemap a webmaster pero resulta que nos esta dando un error que es  Product (marcado: schema.org) Falta precio.

 

Asi en unas 800 urls.

 

El caso es que hemos visto la forma que nos indicas para modificar los snippets en la ficha de producto, pero la directrices que vemos en el manual que nos muestras no nos cuadran con el fichero product.tpl que tenemos, utilizamos plantilla de leothemes y vemos que algo de snippets lo esta programando, pero nos da ese error que comentamos antes

Share this post


Link to post
Share on other sites

Hola:

 

Excelente tutorial, pero recientemente hemos migrado todo a prestashop 1.6, ¿podriamo utilizar este metodo para las google META RICH SNIPPETS?

 

Hemos subido tambien el sitemap a webmaster pero resulta que nos esta dando un error que es  Product (marcado: schema.org) Falta precio.

 

Asi en unas 800 urls.

 

El caso es que hemos visto la forma que nos indicas para modificar los snippets en la ficha de producto, pero la directrices que vemos en el manual que nos muestras no nos cuadran con el fichero product.tpl que tenemos, utilizamos plantilla de leothemes y vemos que algo de snippets lo esta programando, pero nos da ese error que comentamos antes

 

Por ahora no tengo mucho tiempo para responderos a todos, pero la mayoría de las consultas están solucionadas con la última revisión de Rich Snippets que tengo en la página de tutoriales de mi Firma.

 

A ver si me saco una tarde, y actualizo la versión que hay en el foro.

Share this post


Link to post
Share on other sites

  • 1 month later...

Buenas, muy buen post me ha ayudado mucho con esto de los snippets. Un par de aportes por si queréis activar algún parámetro más de los snippets.

 

Para la información de autor de Google+, podéis añadir en el header:

<link href="https://plus.google.com/XXXXXXXXXXXXXX" rel="author">

 

La información de editor de Google+:

Si tenéis por ejemplo un link a redes sociales tenéis que modificar el enlace:

<a class="google" href="https://plus.google.com/XXXXXXXXXXX" rel="publisher">XXXXXXXX</a>

 

Si queréis la disponibilidad de los productos cambiar la linea del post original por ésta:
<meta id="rs_offers" itemprop="offers" itemscope itemtype="http://schema.org/Offer" itemref="our_price_display rs_priceCurrency_ofr rs_availability" />
 
justo a continuación añadir ésta:
<meta id="rs_availability" itemprop="availability" itemtype="http://schema.org/ItemAvailability" content="{if $product->quantity <= 0}http://schema.org/OutOfStock{else}http://schema.org/InStock{/if}">
 
Espero que ayude!
 

Share this post


Link to post
Share on other sites

Hola,

 

tengo un problema con los productos que tienen varias combinaciones. Por ejemplo, el producto X de talla M y L, que es 2€ más caro en la talla L. Se generan dos URL amigables distintas para cada una de las combinaciones, pero si las pruebo en la herramienta de datos estructurados me muestra siempre el mismo precio, sea cual sea la talla, me muestra el precio de la combinación por defecto.

Es un problema muy grave que plantea, por ejemplo, problemas graves con Google Merchant Center. ¿Alguien tiene la solución?

Share this post


Link to post
Share on other sites

  • 4 weeks later...
  • 2 weeks later...
  • 3 months later...

Hola a todos,

 

Lo primero es agradecer el aporte.

 

Tengo un problema cuando aplico la herramienta de validación me da este error:

 

La propiedad {convertPrice price=$productPrice} no es una especificación de precio válida.

 

y me la marca sobre esta linea:

<span itemprop="price" id="our_price_display">{convertPrice price=$productPrice}</span> 

He estado buscando pero no encuentro nada. Alguna forma de solucionarlo?

 

Gracias

Share this post


Link to post
Share on other sites

Hola a todos,

 

Lo primero es agradecer el aporte.

 

Tengo un problema cuando aplico la herramienta de validación me da este error:

 

La propiedad {convertPrice price=$productPrice} no es una especificación de precio válida.

 

y me la marca sobre esta linea:

<span itemprop="price" id="our_price_display">{convertPrice price=$productPrice}</span> 

He estado buscando pero no encuentro nada. Alguna forma de solucionarlo?

 

Gracias

 

Pásanos un enlace de una página de richsnippets así podemos ver que ocurre, tal y como lo explicas no entiendo que la propiedad te coja el código de Smarty.

 

Ese código debería de estar dentro del scope Offers.

 

Para que podamos ayudarte, desactiva las opciones de CCC que encontrarás en el backoffice > parametros avanzados > rendimiento

Share this post


Link to post
Share on other sites

Hola, como las pruebas las estoy haciendo en local, te paso el codigo del products.tpl donde lo estoy incluyendo:

* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2013 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}

{include file="$tpl_dir./errors.tpl"}
{if $errors|@count == 0}
<script type="text/javascript">
// <![CDATA[

// PrestaShop internal settings
var currencySign = '{$currencySign|html_entity_decode:2:"UTF-8"}';
var currencyRate = '{$currencyRate|floatval}';
var currencyFormat = '{$currencyFormat|intval}';
var currencyBlank = '{$currencyBlank|intval}';
var taxRate = {$tax_rate|floatval};
var jqZoomEnabled = {if $jqZoomEnabled}true{else}false{/if};

//JS Hook
var oosHookJsCodeFunctions = new Array();

// Parameters
var id_product = '{$product->id|intval}';
var productHasAttributes = {if isset($groups)}true{else}false{/if};
var quantitiesDisplayAllowed = {if $display_qties == 1}true{else}false{/if};
var quantityAvailable = {if $display_qties == 1 && $product->quantity}{$product->quantity}{else}0{/if};
var allowBuyWhenOutOfStock = {if $allow_oosp == 1}true{else}false{/if};
var availableNowValue = '{$product->available_now|escape:'quotes':'UTF-8'}';
var availableLaterValue = '{$product->available_later|escape:'quotes':'UTF-8'}';
var productPriceTaxExcluded = {$product->getPriceWithoutReduct(true)|default:'null'} - {$product->ecotax};
var productBasePriceTaxExcluded = {$product->base_price} - {$product->ecotax};

var reduction_percent = {if $product->specificPrice AND $product->specificPrice.reduction AND $product->specificPrice.reduction_type == 'percentage'}{$product->specificPrice.reduction*100}{else}0{/if};
var reduction_price = {if $product->specificPrice AND $product->specificPrice.reduction AND $product->specificPrice.reduction_type == 'amount'}{$product->specificPrice.reduction|floatval}{else}0{/if};
var specific_price = {if $product->specificPrice AND $product->specificPrice.price}{$product->specificPrice.price}{else}0{/if};
var product_specific_price = new Array();
{foreach from=$product->specificPrice key='key_specific_price' item='specific_price_value'}
	product_specific_price['{$key_specific_price}'] = '{$specific_price_value}';
{/foreach}
var specific_currency = {if $product->specificPrice AND $product->specificPrice.id_currency}true{else}false{/if};
var group_reduction = '{$group_reduction}';
var default_eco_tax = {$product->ecotax};
var ecotaxTax_rate = {$ecotaxTax_rate};
var currentDate = '{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}';
var maxQuantityToAllowDisplayOfLastQuantityMessage = {$last_qties};
var noTaxForThisProduct = {if $no_tax == 1}true{else}false{/if};
var displayPrice = {$priceDisplay};
var productReference = '{$product->reference|escape:'htmlall':'UTF-8'}';
var productAvailableForOrder = {if (isset($restricted_country_mode) AND $restricted_country_mode) OR $PS_CATALOG_MODE}'0'{else}'{$product->available_for_order}'{/if};
var productShowPrice = '{if !$PS_CATALOG_MODE}{$product->show_price}{else}0{/if}';
var productUnitPriceRatio = '{$product->unit_price_ratio}';
var idDefaultImage = {if isset($cover.id_image_only)}{$cover.id_image_only}{else}0{/if};
var stock_management = {$stock_management|intval};
{if !isset($priceDisplayPrecision)}
	{assign var='priceDisplayPrecision' value=2}
{/if}
{if !$priceDisplay || $priceDisplay == 2}
	{assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL, $priceDisplayPrecision)}
	{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
{elseif $priceDisplay == 1}
	{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, $priceDisplayPrecision)}
	{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
{/if}


var productPriceWithoutReduction = '{$productPriceWithoutReduction}';
var productPrice = '{$productPrice}';

// Customizable field
var img_ps_dir = '{$img_ps_dir}';
var customizationFields = new Array();
{assign var='imgIndex' value=0}
{assign var='textFieldIndex' value=0}
{foreach from=$customizationFields item='field' name='customizationFields'}
	{assign var="key" value="pictures_`$product->id`_`$field.id_customization_field`"}
	customizationFields[{$smarty.foreach.customizationFields.index|intval}] = new Array();
	customizationFields[{$smarty.foreach.customizationFields.index|intval}][0] = '{if $field.type|intval == 0}img{$imgIndex++}{else}textField{$textFieldIndex++}{/if}';
	customizationFields[{$smarty.foreach.customizationFields.index|intval}][1] = {if $field.type|intval == 0 && isset($pictures.$key) && $pictures.$key}2{else}{$field.required|intval}{/if};
{/foreach}

// Images
var img_prod_dir = '{$img_prod_dir}';
var combinationImages = new Array();

{if isset($combinationImages)}
	{foreach from=$combinationImages item='combination' key='combinationId' name='f_combinationImages'}
		combinationImages[{$combinationId}] = new Array();
		{foreach from=$combination item='image' name='f_combinationImage'}
			combinationImages[{$combinationId}][{$smarty.foreach.f_combinationImage.index}] = {$image.id_image|intval};
		{/foreach}
	{/foreach}
{/if}

combinationImages[0] = new Array();
{if isset($images)}
	{foreach from=$images item='image' name='f_defaultImages'}
		combinationImages[0][{$smarty.foreach.f_defaultImages.index}] = {$image.id_image};
	{/foreach}
{/if}

// Translations
var doesntExist = '{l s='This combination does not exist for this product. Please select another combination.' js=1}';
var doesntExistNoMore = '{l s='This product is no longer in stock' js=1}';
var doesntExistNoMoreBut = '{l s='with those attributes but is available with others.' js=1}';
var uploading_in_progress = '{l s='Uploading in progress, please be patient.' js=1}';
var fieldRequired = '{l s='Please fill in all the required fields before saving your customization.' js=1}';

{if isset($groups)}
	// Combinations
	{foreach from=$combinations key=idCombination item=combination}
		var specific_price_combination = new Array();
		var available_date = new Array();
		specific_price_combination['reduction_percent'] = {if $combination.specific_price AND $combination.specific_price.reduction AND $combination.specific_price.reduction_type == 'percentage'}{$combination.specific_price.reduction*100}{else}0{/if};
		specific_price_combination['reduction_price'] = {if $combination.specific_price AND $combination.specific_price.reduction AND $combination.specific_price.reduction_type == 'amount'}{$combination.specific_price.reduction}{else}0{/if};
		specific_price_combination['price'] = {if $combination.specific_price AND $combination.specific_price.price}{$combination.specific_price.price}{else}0{/if};
		specific_price_combination['reduction_type'] = '{if $combination.specific_price}{$combination.specific_price.reduction_type}{/if}';
		specific_price_combination['id_product_attribute'] = {if $combination.specific_price}{$combination.specific_price.id_product_attribute|intval}{else}0{/if};
		available_date['date'] = '{$combination.available_date}';
		available_date['date_formatted'] = '{dateFormat date=$combination.available_date full=false}';
		addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity}, available_date, specific_price_combination);
	{/foreach}
{/if}

{if isset($attributesCombinations)}
	// Combinations attributes informations
	var attributesCombinations = new Array();
	{foreach from=$attributesCombinations key=id item=aC}
		tabInfos = new Array();
		tabInfos['id_attribute'] = '{$aC.id_attribute|intval}';
		tabInfos['attribute'] = '{$aC.attribute}';
		tabInfos['group'] = '{$aC.group}';
		tabInfos['id_attribute_group'] = '{$aC.id_attribute_group|intval}';
		attributesCombinations.push(tabInfos);
	{/foreach}
{/if}
//]]>
</script>

{include file="$tpl_dir./breadcrumb.tpl"}

<!-- META RICH SNIPPETS - -->
<meta id="rs_url_pr" itemprop="url" content="{$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}" />
<meta id="rs_offers" itemprop="offers" itemscope itemtype="http://schema.org/Offer" itemref="our_price_display rs_priceCurrency_ofr" />
<meta id="rs_priceCurrency_ofr" itemprop="priceCurrency" content="EUR" />
<!-- END META RICH SNIPPETS - -->

<div id="primary_block" class="clearfix" itemtype="http://schema.org/Product">

	{if isset($adminActionDisplay) && $adminActionDisplay}
	<div id="admin-action">
		<p>{l s='This product is not visible to your customers.'}
		<input type="hidden" id="admin-action-product-id" value="{$product->id}" />
		<input type="submit" value="{l s='Publish'}" class="exclusive" onclick="submitPublishProduct('{$base_dir}{$smarty.get.ad|escape:'htmlall':'UTF-8'}', 0, '{$smarty.get.adtoken|escape:'htmlall':'UTF-8'}')"/>
		<input type="submit" value="{l s='Back'}" class="exclusive" onclick="submitPublishProduct('{$base_dir}{$smarty.get.ad|escape:'htmlall':'UTF-8'}', 1, '{$smarty.get.adtoken|escape:'htmlall':'UTF-8'}')"/>
		</p>
		<p id="admin-action-result"></p>
		</p>
	</div>
	{/if}

	{if isset($confirmation) && $confirmation}
	<p class="confirmation">
		{$confirmation}
	</p>
	{/if}

	<!-- right infos-->
	<div id="pb-right-column">
		<!-- product img-->
		<div id="image-block">
		{if $have_image}
			<span id="view_full_size">
				<img itemprop="image" src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')}" {if $jqZoomEnabled}class="jqzoom" alt="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'thickbox_default')}"{else} title="{$product->name|escape:'htmlall':'UTF-8'}" alt="{$product->name|escape:'htmlall':'UTF-8'}" {/if} id="bigpic" width="{$largeSize.width}" height="{$largeSize.height}" />
				<span class="span_link">{l s='Maximize'}</span>
			</span>
		{else}
			<span id="view_full_size">
				<img itemprop="image" src="{$img_prod_dir}{$lang_iso}-default-large_default.jpg" id="bigpic" alt="" title="{$product->name|escape:'htmlall':'UTF-8'}" width="{$largeSize.width}" height="{$largeSize.height}" />
				<span class="span_link">{l s='Maximize'}</span>
			</span>
		{/if}
		</div>
		{if isset($images) && count($images) > 0}
		<!-- thumbnails -->
		<div id="views_block" class="clearfix {if isset($images) && count($images) < 2}hidden{/if}">
		{if isset($images) && count($images) > 3}<span class="view_scroll_spacer"><a id="view_scroll_left" class="hidden" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Previous'}</a></span>{/if}
		<div id="thumbs_list">
			<ul id="thumbs_list_frame">
				{if isset($images)}
					{foreach from=$images item=image name=thumbnails}
					{assign var=imageIds value="`$product->id`-`$image.id_image`"}
					<li id="thumbnail_{$image.id_image}">
						<a href="{$link->getImageLink($product->link_rewrite, $imageIds, 'thickbox_default')|escape:'html'}" rel="other-views" class="thickbox{if $smarty.foreach.thumbnails.first} shown{/if}" title="{$image.legend|htmlspecialchars}">
							<img id="thumb_{$image.id_image}" src="{$link->getImageLink($product->link_rewrite, $imageIds, 'medium_default')|escape:'html'}" alt="{$image.legend|htmlspecialchars}" height="{$mediumSize.height}" width="{$mediumSize.width}" />
						</a>
					</li>
					{/foreach}
				{/if}
			</ul>
		</div>
		{if isset($images) && count($images) > 3}<a id="view_scroll_right" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Next'}</a>{/if}
		</div>
		{/if}
		{if isset($images) && count($images) > 1}<p class="resetimg clear"><span id="wrapResetImages" style="display: none;"><img src="{$img_dir}icon/cancel_11x13.gif" alt="{l s='Cancel'}" width="11" height="13"/> <a id="resetImages" href="{$link->getProductLink($product)|escape:'html'}" onclick="$('span#wrapResetImages').hide('slow');return (false);">{l s='Display all pictures'}</a></span></p>{/if}
		<!-- usefull links-->
		<ul id="usefull_link_block">
			{if $HOOK_EXTRA_LEFT}{$HOOK_EXTRA_LEFT}{/if}
			<li class="print"><a href="javascript:print();">{l s='Print'}</a></li>
			{if $have_image && !$jqZoomEnabled}
			{/if}
		</ul>
	</div>

	<!-- left infos-->
	<div id="pb-left-column">
		<h1><span itemprop="name">{$product->name|escape:'htmlall':'UTF-8'}</span></h1>

		{if $product->description_short OR $packItems|@count > 0}
		<div id="short_description_block">
			{if $product->description_short}
				<div itemprop="description" id="short_description_content" class="rte align_justify">{$product->description_short}</div>
			{/if}
			{if $product->description}
			<p class="buttons_bottom_block"><a href="javascript:{ldelim}{rdelim}" class="button">{l s='More details'}</a></p>
			{/if}
			{if $packItems|@count > 0}
			<div class="short_description_pack">
				<h3>{l s='Pack content'}</h3>
				{foreach from=$packItems item=packItem}
				<div class="pack_content">
					{$packItem.pack_quantity} x <a href="{$link->getProductLink($packItem.id_product, $packItem.link_rewrite, $packItem.category)|escape:'html'}">{$packItem.name|escape:'htmlall':'UTF-8'}</a>
					<p>{$packItem.description_short}</p>
				</div>
				{/foreach}
			</div>
			{/if}
		</div>
		{/if}

		{*{if isset($colors) && $colors}
		<!-- colors -->
		<div id="color_picker">
			<p>{l s='Pick a color:' js=1}</p>
			<div class="clear"></div>
			<ul id="color_to_pick_list" class="clearfix">
			{foreach from=$colors key='id_attribute' item='color'}
				<li><a id="color_{$id_attribute|intval}" class="color_pick" style="background: {$color.value};" onclick="updateColorSelect({$id_attribute|intval});$('#wrapResetImages').show('slow');" title="{$color.name}">{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="20" height="20" />{/if}</a></li>
			{/foreach}
			</ul>
			<div class="clear"></div>
		</div>
		{/if}*}

		{if ($product->show_price AND !isset($restricted_country_mode)) OR isset($groups) OR $product->reference OR (isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS)}
		<!-- add to cart form-->
		<form id="buy_block" {if $PS_CATALOG_MODE AND !isset($groups) AND $product->quantity > 0}class="hidden"{/if} action="{$link->getPageLink('cart')|escape:'html'}" method="post">

			<!-- hidden datas -->
			<p class="hidden">
				<input type="hidden" name="token" value="{$static_token}" />
				<input type="hidden" name="id_product" value="{$product->id|intval}" id="product_page_product_id" />
				<input type="hidden" name="add" value="1" />
				<input type="hidden" name="id_product_attribute" id="idCombination" value="" />
			</p>

			<div class="product_attributes">
				{if isset($groups)}
				<!-- attributes -->
				<div id="attributes">
				<div class="clear"></div>
				{foreach from=$groups key=id_attribute_group item=group}
					{if $group.attributes|@count}
						<fieldset class="attribute_fieldset">
							<label class="attribute_label" for="group_{$id_attribute_group|intval}">{$group.name|escape:'htmlall':'UTF-8'} : </label>
							{assign var="groupName" value="group_$id_attribute_group"}
							<div class="attribute_list">
							{if ($group.group_type == 'select')}
								<select name="{$groupName}" id="group_{$id_attribute_group|intval}" class="attribute_select" onchange="findCombination();getProductAttribute();">
									{foreach from=$group.attributes key=id_attribute item=group_attribute}
										<option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{$group_attribute|escape:'htmlall':'UTF-8'}">{$group_attribute|escape:'htmlall':'UTF-8'}</option>
									{/foreach}
								</select>
							{elseif ($group.group_type == 'color')}
								<ul id="color_to_pick_list" class="clearfix">
									{assign var="default_colorpicker" value=""}
									{foreach from=$group.attributes key=id_attribute item=group_attribute}
									<li{if $group.default == $id_attribute} class="selected"{/if}>
										<a id="color_{$id_attribute|intval}" class="color_pick{if ($group.default == $id_attribute)} selected{/if}" style="background: {$colors.$id_attribute.value};" title="{$colors.$id_attribute.name}" onclick="colorPickerClick(this);getProductAttribute();">
											{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}
												<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$colors.$id_attribute.name}" width="20" height="20" /><br />
											{/if}
										</a>
									</li>
									{if ($group.default == $id_attribute)}
										{$default_colorpicker = $id_attribute}
									{/if}
									{/foreach}
								</ul>
								<input type="hidden" class="color_pick_hidden" name="{$groupName}" value="{$default_colorpicker}" />
							{elseif ($group.group_type == 'radio')}
								<ul>
									{foreach from=$group.attributes key=id_attribute item=group_attribute}
										<li>
											<input type="radio" class="attribute_radio" name="{$groupName}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} onclick="findCombination();getProductAttribute();" />
											<span>{$group_attribute|escape:'htmlall':'UTF-8'}</span>
										</li>
									{/foreach}
								</ul>
							{/if}
							</div>
						</fieldset>
					{/if}
				{/foreach}
				</div>
			{/if}
			<p id="product_reference" {if isset($groups) OR !$product->reference}style="display: none;"{/if}>
				<label>{l s='Reference:'} </label>
				<span class="editable">{$product->reference|escape:'htmlall':'UTF-8'}</span>
			</p>

			<!-- quantity wanted -->
			<p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) OR $virtual OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none;"{/if}>
				<label>{l s='Quantity:'}</label>
				<input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" size="2" maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if} />
			</p>

			<!-- minimal quantity wanted -->
			<p id="minimal_quantity_wanted_p"{if $product->minimal_quantity <= 1 OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none;"{/if}>
				{l s='This product is not sold individually. You must select at least'} <b id="minimal_quantity_label">{$product->minimal_quantity}</b> {l s='quantity for this product.'}
			</p>
			{if $product->minimal_quantity > 1}
			<script type="text/javascript">
				checkMinimalQuantity();
			</script>
			{/if}

			<!-- availability -->
			<p id="availability_statut"{if ($product->quantity <= 0 && !$product->available_later && $allow_oosp) OR ($product->quantity > 0 && !$product->available_now) OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none;"{/if}>
				<span id="availability_label">{l s='Availability:'}</span>
				<span id="availability_value"{if $product->quantity <= 0} class="warning_inline"{/if}>{if $product->quantity <= 0}{if $allow_oosp}{$product->available_later}{else}{l s='This product is no longer in stock'}{/if}{else}{$product->available_now}{/if}</span>				
			</p>
			<p id="availability_date"{if ($product->quantity > 0) OR !$product->available_for_order OR $PS_CATALOG_MODE OR !isset($product->available_date) OR $product->available_date < $smarty.now|date_format:'%Y-%m-%d'} style="display: none;"{/if}>
				<span id="availability_date_label">{l s='Availability date:'}</span>
				<span id="availability_date_value">{dateFormat date=$product->available_date full=false}</span>
			</p>
			<!-- number of item in stock -->
			{if ($display_qties == 1 && !$PS_CATALOG_MODE && $product->available_for_order)}
			<p id="pQuantityAvailable"{if $product->quantity <= 0} style="display: none;"{/if}>
				<span id="quantityAvailable">{$product->quantity|intval}</span>
				<span {if $product->quantity > 1} style="display: none;"{/if} id="quantityAvailableTxt">{l s='Item in stock'}</span>
				<span {if $product->quantity == 1} style="display: none;"{/if} id="quantityAvailableTxtMultiple">{l s='Items in stock'}</span>
			</p>
			{/if}

			<!-- Out of stock hook -->
			<div id="oosHook"{if $product->quantity > 0} style="display: none;"{/if}>
				{$HOOK_PRODUCT_OOS}
			</div>

			<p class="warning_inline" id="last_quantities"{if ($product->quantity > $last_qties OR $product->quantity <= 0) OR $allow_oosp OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none"{/if} >{l s='Warning: Last items in stock!'}</p>
		</div>

		<div class="content_prices clearfix">
			<!-- prices -->
			{if $product->show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}

			{if $product->online_only}
			<p class="online_only">{l s='Online only'}</p>
			{/if}
			<div class="price">
            	<p class="our_price_display" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
				{if $priceDisplay >= 0 && $priceDisplay <= 2}
    				{if $currencyFormat == 1 || $currencyFormat == 3}
       				<meta itemprop="priceCurrency" content="{$currency->iso_code}" /> {$currencySign} <span id="our_price_display" itemprop="price">{$rightPrice|regex_replace:"/[\\{$currencySign}]/":""}</span>
   					{else}
       				 <span id="our_price_display" itemprop="price">{$rightPrice|regex_replace:"/[\\{$currencySign}]/":""}</span> <meta itemprop="priceCurrency" content="{$currency->iso_code}" /> 
   					 {/if}   
  						  <!--{if $tax_enabled  && ((isset($display_tax_label) && $display_tax_label == 1) OR !isset($display_tax_label))}
       					 {if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}
    					{/if}-->
				{/if}
				</p>

				{if $product->on_sale}
					<img src="{$img_dir}onsale_{$lang_iso}.gif" alt="{l s='On sale'}" class="on_sale_img"/>
					<span class="on_sale">{l s='On sale!'}</span>
				{elseif $product->specificPrice AND $product->specificPrice.reduction AND $productPriceWithoutReduction > $productPrice}
					<span class="discount">{l s='Reduced price!'}</span>
				{/if}
				{if $priceDisplay == 2}
					<br />
					<span id="pretaxe_price"><span id="pretaxe_price_display">{convertPrice price=$product->getPrice(false, $smarty.const.NULL)}</span> {l s='tax excl.'}</span>
				{/if}
			</div>
			<p id="reduction_percent" {if !$product->specificPrice OR $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if}><span id="reduction_percent_display">{if $product->specificPrice AND $product->specificPrice.reduction_type == 'percentage'}-{$product->specificPrice.reduction*100}%{/if}</span></p>
			<p id="reduction_amount" {if !$product->specificPrice OR $product->specificPrice.reduction_type != 'amount' || $product->specificPrice.reduction|intval ==0} style="display:none"{/if}>
				<span id="reduction_amount_display">
				{if $product->specificPrice AND $product->specificPrice.reduction_type == 'amount' AND $product->specificPrice.reduction|intval !=0}
					-{convertPrice price=$productPriceWithoutReduction-$productPrice|floatval}
				{/if}
				</span>
			</p>
			<p id="old_price"{if !$product->specificPrice || !$product->specificPrice.reduction} class="hidden"{/if}>
			{if $priceDisplay >= 0 && $priceDisplay <= 2}
					<span id="old_price_display">{if $productPriceWithoutReduction > $productPrice}{convertPrice price=$productPriceWithoutReduction}{/if}</span>
					<!-- {if $tax_enabled && $display_tax_label == 1}{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}{/if} -->
			{/if}
			</p>
			{if $packItems|@count && $productPrice < $product->getNoPackPrice()}
				<p class="pack_price">{l s='Instead of'} <span style="text-decoration: line-through;">{convertPrice price=$product->getNoPackPrice()}</span></p>
				<br class="clear" />
			{/if}
			{if $product->ecotax != 0}
				<p class="price-ecotax">{l s='Include'} <span id="ecotax_price_display">{if $priceDisplay == 2}{$ecotax_tax_exc|convertAndFormatPrice}{else}{$ecotax_tax_inc|convertAndFormatPrice}{/if}</span> {l s='For green tax'}
					{if $product->specificPrice AND $product->specificPrice.reduction}
					<br />{l s='(not impacted by the discount)'}
					{/if}
				</p>
			{/if}
			{if !empty($product->unity) && $product->unit_price_ratio > 0.000000}
				 {math equation="pprice / punit_price"  pprice=$productPrice  punit_price=$product->unit_price_ratio assign=unit_price}
				<p class="unit-price"><span id="unit_price_display">{convertPrice price=$unit_price}</span> {l s='per'} {$product->unity|escape:'htmlall':'UTF-8'}</p>
			{/if}
			{*close if for show price*}
			{/if}
			<p id="add_to_cart" {if (!$allow_oosp && $product->quantity <= 0) OR !$product->available_for_order OR (isset($restricted_country_mode) AND $restricted_country_mode) OR $PS_CATALOG_MODE}style="display:none"{/if} class="buttons_bottom_block">
				<span></span>
				<input type="submit" name="Submit" value="{l s='Add to cart'}" class="exclusive" />
			</p>
			{if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}

			<div class="clear"></div>
		</div>
		</form>
		{/if}
		{if isset($HOOK_EXTRA_RIGHT) && $HOOK_EXTRA_RIGHT}{$HOOK_EXTRA_RIGHT}{/if}
	</div>
</div>

{if (isset($quantity_discounts) && count($quantity_discounts) > 0)}
<!-- quantity discount -->
<ul class="idTabs clearfix">
	<li><a href="#discount" style="cursor: pointer" class="selected">{l s='Sliding scale pricing'}</a></li>
</ul>
<div id="quantityDiscount">
	<table class="std">
        <thead>
            <tr>
                <th>{l s='Product'}</th>
                <th>{l s='From (qty)'}</th>
                <th>{l s='Discount'}</th>
            </tr>
        </thead>
		<tbody>
            {foreach from=$quantity_discounts item='quantity_discount' name='quantity_discounts'}
            <tr id="quantityDiscount_{$quantity_discount.id_product_attribute}" class="quantityDiscount_{$quantity_discount.id_product_attribute}">
                <td>
                    {if (isset($quantity_discount.attributes) && ($quantity_discount.attributes))}
                        {$product->getProductName($quantity_discount.id_product, $quantity_discount.id_product_attribute)}
                    {else}
                        {$product->getProductName($quantity_discount.id_product)}
                    {/if}
                </td>
                <td>{$quantity_discount.quantity|intval}</td>
                <td>
                    {if $quantity_discount.price >= 0 OR $quantity_discount.reduction_type == 'amount'}
                       -{convertPrice price=$quantity_discount.real_value|floatval}
                   {else}
                       -{$quantity_discount.real_value|floatval}%
                   {/if}
                </td>
            </tr>
            {/foreach}
        </tbody>
	</table>
</div>
{/if}
<!-- description and features -->
{if (isset($product) && $product->description) || (isset($features) && $features) || (isset($accessories) && $accessories) || (isset($HOOK_PRODUCT_TAB) && $HOOK_PRODUCT_TAB) || (isset($attachments) && $attachments) || isset($product) && $product->customizable}
<div id="more_info_block" class="clear">
	<ul id="more_info_tabs" class="idTabs idTabsShort clearfix">
		{if $product->description}<li><a id="more_info_tab_more_info" href="#idTab1">{l s='More info'}</a></li>{/if}
		{if $features}<li><a id="more_info_tab_data_sheet" href="#idTab2">{l s='Data sheet'}</a></li>{/if}
		{if $attachments}<li><a id="more_info_tab_attachments" href="#idTab9">{l s='Download'}</a></li>{/if}
		{if isset($accessories) AND $accessories}<li><a href="#idTab4">{l s='Accessories'}</a></li>{/if}
		{if isset($product) && $product->customizable}<li><a href="#idTab10">{l s='Product customization'}</a></li>{/if}
		{$HOOK_PRODUCT_TAB}
	</ul>
	<div id="more_info_sheets" class="sheets align_justify">
	{if isset($product) && $product->description}
		<!-- full description -->
		<div id="idTab1" class="rte">{$product->description}</div>
	{/if}
	{if isset($features) && $features}
		<!-- product's features -->
		<ul id="idTab2" class="bullet">
		{foreach from=$features item=feature}
            {if isset($feature.value)}
			    <li><span>{$feature.name|escape:'htmlall':'UTF-8'}</span> {$feature.value|escape:'htmlall':'UTF-8'}</li>
            {/if}
		{/foreach}
		</ul>
	{/if}
	{if isset($attachments) && $attachments}
		<ul id="idTab9" class="bullet">
		{foreach from=$attachments item=attachment}
			<li><a href="{$link->getPageLink('attachment', true, NULL, "id_attachment={$attachment.id_attachment}")|escape:'html'}">{$attachment.name|escape:'htmlall':'UTF-8'}</a><br />{$attachment.description|escape:'htmlall':'UTF-8'}</li>
		{/foreach}
		</ul>
	{/if}
	{if isset($accessories) AND $accessories}
		<!-- accessories -->
		<div id="idTab4" class="bullet">
			<div class="block products_block accessories_block clearfix">
				<div class="block_content">
					<ul>
					{foreach from=$accessories item=accessory name=accessories_list}
						{if ($accessory.allow_oosp || $accessory.quantity_all_versions > 0 || $accessory.quantity > 0) AND $accessory.available_for_order AND !isset($restricted_country_mode)}
							{assign var='accessoryLink' value=$link->getProductLink($accessory.id_product, $accessory.link_rewrite, $accessory.category)}
							<li class="ajax_block_product{if $smarty.foreach.accessories_list.first} first_item{elseif $smarty.foreach.accessories_list.last} last_item{else} item{/if} product_accessories_description">
								<p class="s_title_block">
									<a href="{$accessoryLink|escape:'htmlall':'UTF-8'}">{$accessory.name|escape:'htmlall':'UTF-8'}</a>
									{if $accessory.show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE} - <span class="price">{if $priceDisplay != 1}{displayWtPrice p=$accessory.price}{else}{displayWtPrice p=$accessory.price_tax_exc}{/if}</span>{/if}
								</p>
								<div class="product_desc">
									<a href="{$accessoryLink|escape:'htmlall':'UTF-8'}" title="{$accessory.legend|escape:'htmlall':'UTF-8'}" class="product_image"><img src="{$link->getImageLink($accessory.link_rewrite, $accessory.id_image, 'medium_default')|escape:'html'}" alt="{$accessory.legend|escape:'htmlall':'UTF-8'}" width="{$mediumSize.width}" height="{$mediumSize.height}" /></a>
									<div class="block_description">
										<a href="{$accessoryLink|escape:'htmlall':'UTF-8'}" title="{l s='More'}" class="product_description">{$accessory.description_short|strip_tags|truncate:400:'...'}</a>
									</div>
									<div class="clear_product_desc"> </div>
								</div>
								
								<p class="clearfix" style="margin-top:5px">
									<a class="button" href="{$accessoryLink|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a>
									{if !$PS_CATALOG_MODE && ($accessory.allow_oosp || $accessory.quantity > 0)}
									<a class="exclusive button ajax_add_to_cart_button" href="{$link->getPageLink('cart', true, NULL, "qty=1&id_product={$accessory.id_product|intval}&token={$static_token}&add")|escape:'html'}" rel="ajax_id_product_{$accessory.id_product|intval}" title="{l s='Add to cart'}">{l s='Add to cart'}</a>
									{/if}
								</p>
								
							</li>
						{/if}
					{/foreach}
					</ul>
				</div>
			</div>
		</div>
	{/if}

	<!-- Customizable products -->
	{if isset($product) && $product->customizable}
		<div id="idTab10" class="bullet customization_block">
			<form method="post" action="{$customizationFormTarget}" enctype="multipart/form-data" id="customizationForm" class="clearfix">
				<p class="infoCustomizable">
					{l s='After saving your customized product, remember to add it to your cart.'}
					{if $product->uploadable_files}<br />{l s='Allowed file formats are: GIF, JPG, PNG'}{/if}
				</p>
				{if $product->uploadable_files|intval}
				<div class="customizableProductsFile">
					<h3>{l s='Pictures'}</h3>
					<ul id="uploadable_files" class="clearfix">
						{counter start=0 assign='customizationField'}
						{foreach from=$customizationFields item='field' name='customizationFields'}
							{if $field.type == 0}
								<li class="customizationUploadLine{if $field.required} required{/if}">{assign var='key' value='pictures_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field}
									{if isset($pictures.$key)}
									<div class="customizationUploadBrowse">
										<img src="{$pic_dir}{$pictures.$key}_small" alt="" />
										<a href="{$link->getProductDeletePictureLink($product, $field.id_customization_field)|escape:'html'}" title="{l s='Delete'}" >
											<img src="{$img_dir}icon/delete.gif" alt="{l s='Delete'}" class="customization_delete_icon" width="11" height="13" />
										</a>
									</div>
									{/if}
									<div class="customizationUploadBrowse">
										<label class="customizationUploadBrowseDescription">{if !empty($field.name)}{$field.name}{else}{l s='Please select an image file from your computer'}{/if}{if $field.required}<sup>*</sup>{/if}</label>
										<input type="file" name="file{$field.id_customization_field}" id="img{$customizationField}" class="customization_block_input {if isset($pictures.$key)}filled{/if}" />
									</div>
								</li>
								{counter}
							{/if}
						{/foreach}
					</ul>
				</div>
				{/if}
				{if $product->text_fields|intval}
				<div class="customizableProductsText">
					<h3>{l s='Text'}</h3>
					<ul id="text_fields">
					{counter start=0 assign='customizationField'}
					{foreach from=$customizationFields item='field' name='customizationFields'}
						{if $field.type == 1}
						<li class="customizationUploadLine{if $field.required} required{/if}">
							<label for ="textField{$customizationField}">{assign var='key' value='textFields_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field} {if !empty($field.name)}{$field.name}{/if}{if $field.required}<sup>*</sup>{/if}</label>
							<textarea name="textField{$field.id_customization_field}" id="textField{$customizationField}" rows="1" cols="40" class="customization_block_input">{if isset($textFields.$key)}{$textFields.$key|stripslashes}{/if}</textarea>
						</li>
						{counter}
						{/if}
					{/foreach}
					</ul>
				</div>
				{/if}
				<p id="customizedDatas">
					<input type="hidden" name="quantityBackup" id="quantityBackup" value="" />
					<input type="hidden" name="submitCustomizedDatas" value="1" />
					<input type="button" class="button" value="{l s='Save'}" onclick="javascript:saveCustomization()" />
					<span id="ajax-loader" style="display:none"><img src="{$img_ps_dir}loader.gif" alt="loader" /></span>
				</p>
			</form>
			<p class="clear required"><sup>*</sup> {l s='required fields'}</p>
		</div>
	{/if}

	</div>
</div>
{/if}
{if isset($packItems) && $packItems|@count > 0}
	<div id="blockpack">
		<h2>{l s='Pack content'}</h2>
		{include file="$tpl_dir./product-list.tpl" products=$packItems}
	</div>
{/if}
{if isset($HOOK_PRODUCT_FOOTER) && $HOOK_PRODUCT_FOOTER}{$HOOK_PRODUCT_FOOTER}{/if}
{/if}

Share this post


Link to post
Share on other sites

Durdi.

 

He visto varios fallos en tu ficha.

 

Acabo de actualizar el primer post con el tutorial de rich snippets de producto.

 

Te recomiendo que eches un repaso y lo hagas de nuevo, te evitarás errores y quedará todo más claro.

 

Este tutorial aunque se haga en base a la plantilla de la 1.5 sirve para la 1.6.

 

Un saludo.

  • Like 1

Share this post


Link to post
Share on other sites

Durdi.

 

He visto varios fallos en tu ficha.

 

Acabo de actualizar el primer post con el tutorial de rich snippets de producto.

 

Te recomiendo que eches un repaso y lo hagas de nuevo, te evitarás errores y quedará todo más claro.

 

Este tutorial aunque se haga en base a la plantilla de la 1.5 sirve para la 1.6.

 

Un saludo.

 

Pues corregido y funcionando.

 

Sabes cuando tarda en aparecen esta implementacion en la busqueda de google?

Share this post


Link to post
Share on other sites

igual este no es el sitio, pero como tambien son <meta>...

 

Para implementar estas metas de google+, twitter y facebook, habria que colocarlas en el head.tpl o en el product.tpl ?

<!-- Con este doctype se define la página como HTML5 -->
<!doctype html>
<!-- El prefix se define para Facebook y el itemtype para Google+ -->
<html lang="es-ES" prefix="og: http://ogp.me/ns#" itemscope itemtype="http://schema.org/Blog" >
<head>
<!-- Con este charset no tendremos problemas con las 'ñ' y las tildes -->
<meta charset="UTF-8">
<!-- Forzamos a que el ancho de la página se adapte al del dispositivo. Así conseguimos el responsive -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Compatibilidad de el odioso Internet Explorer -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 
<!-- Tamaño máximo de 70 caracteres -->
<title>Mi Tienda</title> 
<!-- Tamaño máximo de 155 caracteres -->
<meta name="description" content="Lo que haga mi web">
 
<!-- El canónico siempre debe ser la página actual -->
<link rel="canonical" href="http://www.mitienda.com/" />
 
<!-- Enlaces Google+ --> 
<link rel="author" href="https://plus.google.com/mitienda/posts'>https://plus.google.com/mitienda/posts"/>
<link rel="publisher" href="https://plus.google.com/mitienda"/>
 
<!-- Schema.org para Google+ --> 
<meta itemprop="name" content="Mi tienda"> 
<meta itemprop="description" content="Lo que haga mi web"> 
<meta itemprop="image" content="http://www.mitienda.com/imagen.jpg">
 
<!-- Open Graph para Facebook--> 
<meta property="og:title" content="Nombre de mi web" /> 
<meta property="og:type" content="article" /> 
<meta property="og:url" content="http://www.mitienda.com/" />
<meta property="og:image" content="http://www.mitienda.com/imagen.jpg" />
<meta property="og:description" content="Lo que sea que hago" /> 
<meta property="og:site_name" content="Mi tienda" />
<meta property="og:locale" content="es_ES">
<meta property="fb:admins" content="Facebook ID" />
 
<!-- Twitter Card --> 
<meta name="twitter:card" content="summary_large_image"> 
<meta name="twitter:site" content="@mitienda"> 
<meta name="twitter:title" content="mitienda"> 
<meta name="twitter:description" content="Lo que sea que hago"> 
<meta name="twitter:creator" content="@mitienda"> 
<meta name="twitter:image:src" content="http://www.mitienda.com/imagen.jpg">

Gracias Presta-Lab

Edited by durdi (see edit history)

Share this post


Link to post
Share on other sites

Hoy estaba tratando de enriquecer mis páginas de las tiendas físicas (y parece que ha qiedado bien) pero he usado páginas en cms  y me he dado cuenta que el breadcrumb en lso CMS no me está funcionando bien como en los productos, no me aparece el título del enlace :blink:

 

os dejo el error que me da en el test:

https://developers.google.com/webmasters/structured-data/testing-tool?url=http%253A%252F%252Fwww.comercialmoyano.com%252Fes%252Fpage%252F11-tienda-ottavio-nuccio-velazquez

 

¿Es cosa de mi tienda o pasa a más gente este problema?

 

Un saludo!

Share this post


Link to post
Share on other sites

  • 3 weeks later...

Hoy estaba tratando de enriquecer mis páginas de las tiendas físicas (y parece que ha qiedado bien) pero he usado páginas en cms  y me he dado cuenta que el breadcrumb en lso CMS no me está funcionando bien como en los productos, no me aparece el título del enlace :blink:

 

os dejo el error que me da en el test:

https://developers.google.com/webmasters/structured-data/testing-tool?url=http%253A%252F%252Fwww.comercialmoyano.com%252Fes%252Fpage%252F11-tienda-ottavio-nuccio-velazquez

 

¿Es cosa de mi tienda o pasa a más gente este problema?

 

Un saludo!

 

He visto tu página y me da que no has seguido todos los pasos del tutorial de los breadcrumb, lo acabo de modificar a ver si así lo ves más claro.

  • Like 1

Share this post


Link to post
Share on other sites

  • 3 months later...
  • 3 weeks later...

Hi, 

Thank you very much for your great work! It is maybe the only working tutorial for breadcrumbs snippets on the net! Unfortunately (at least for me) it is only in spanish and it was great luck I found it. I implemented the code using google translator on your blog and it finally works, I tried it with rich snippets testing tool and I am sure it will be visible soon.

The cms pages breadcrumbs doesn't work for me, it maybe some code I missed or something else but it is not big deal at all!

I got couple of questions and I will be very grateful if yo help me.

1. Should I remove the Tools.php from the override directory as it is already implemented? And I am just curious, what if I need another tweek of tools.php or I need to roll it back to its original state?

2. It would be really great as mentioned above to make a tutorual of implementing "aggregate rating rich snippet" to the default prestashop comments module. It will be easy task for you I think and  I am pretty sure it will be of great help to the prestashop community! Then you will got the complete rich snippets solution for prestashop e-commerce store.

 

I forgot to mention that my store is on 1.5.6.1 version, so all you need breadcrums snippet don't hesitate to follow the tutorial!!!

 

Thanks once again for your great job !

Edited by MockoB (see edit history)

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More