Jump to content

(Solucionado) Productos de la misma categoría, aparecen triplicados


Recommended Posts

Buenas de nuevo. Me ha surgido un problema que no sé por donde atajar. Resulta que si pincho en algún producto, cuando se abre éste, más abajo en "Productos de la misma categoría" aparecen todos los productos de la misma categoría pero por triplicado. Además el último de ellos deja ver parte del código de la imágen. ¿Alguna idea de que puede ser?. Os dejo una imágen que vale más que mil palabras.

post-561316-0-77015300-1374085642_thumb.jpg

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

No habrás tocado nada del módulo productscategory? la plantilla tal vez en themes>tu tema>modules>productscategory>productscategory.tpl

 

Es un poco raro porque si ves el código html te cuelga un style="width: 94%" por ahi

 

en http://mundoazabe.wesped.es/index.php?id_product=15&controller=product&id_lang=3

Edited by Enrique Gómez (see edit history)
Link to comment
Share on other sites

Pues, que yo sepa no he tocado nada. Lo del código que se "cuela" (style="width: 94%") por lo visto si es un problema común de ésta plantilla y he visto por aquí como solucionarlo, pero el tema del triplicado por artículo no hay manera.

Link to comment
Share on other sites

Pues, que yo sepa no he tocado nada. Lo del código que se "cuela" (style="width: 94%") por lo visto si es un problema común de ésta plantilla y he visto por aquí como solucionarlo, pero el tema del triplicado por artículo no hay manera.

 

 

El fichero:

 

/themes/la-plantilla-que-uses/modules/productscategory/productscategory.tpl

 

Intenta a modo test dejalo asi: (Y comenta si carga bien los productos en esa parte)

 

{if count($categoryProducts) > 0 && $categoryProducts !== false}
<div class="clearfix blockproductscategory">
<h2 class="productscategory_h2">{$categoryProducts|@count} {l s='other products in the same category:' mod='productscategory'}</h2>
<div id="{if count($categoryProducts) > 5}productscategory{else}productscategory_noscroll{/if}">
{if count($categoryProducts) > 5}<a id="productscategory_scroll_left" title="{l s='Previous' mod='productscategory'}" href="javascript:{ldelim}{rdelim}">{l s='[sub]Previous' mod='productscategory'}</a>{/if}
<div id="productscategory_list">
 <ul {if count($categoryProducts) > 5}style="width: {math equation="width * nbImages" width=107 nbImages=$categoryProducts|@count}px"{/if}>
  {foreach from=$categoryProducts item='categoryProduct' name=categoryProduct}
  <li {if count($categoryProducts) < 6}style="width:60px"{/if}>
<a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)}" class="lnk_img" title="{$categoryProduct.name|htmlspecialchars}"><img src="{$link->getImageLink($categoryProduct.link_rewrite, $categoryProduct.id_image, 'medium_default')|escape:'html'}" alt="{$categoryProduct.name|htmlspecialchars}" /></a>
<p class="product_name">
 <a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)|escape:'html'}" title="{$categoryProduct.name|htmlspecialchars}">{$categoryProduct.name|truncate:14:'...'|escape:'htmlall':'UTF-8'}</a>
</p>
{if $ProdDisplayPrice AND $categoryProduct.show_price == 1 AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
<p class="price_display">
 <span class="price">{convertPrice price=$categoryProduct.displayed_price}</span>
</p>
{else}
<br />
{/if}
  </li>
  {/foreach}
 </ul>
</div>
{if count($categoryProducts) > 5}<a id="productscategory_scroll_right" title="{l s='Next' mod='productscategory'}" href="javascript:{ldelim}{rdelim}">{l s='Next' mod='productscategory'}</a>{/if}
</div>
<script type="text/javascript"[/sub]>
 $('#productscategory_list').trigger('goto', [{$middlePosition}-3]);
</script>
</div>
{/if}

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

Hola Sergio. He hecho la prueba con el código que me has pasado y funciona perfecto :D . El único problema es que la imágen del producto ha perdido su formato (fondo y tamaño) . Paso a copiaros el código de la plantilla original como pide Enrique a ver si me guiáis sobre que parte debo tocar.

 

{if count($categoryProducts) > 0 && $categoryProducts !== false}

<div class="clearfix blockproductscategory">

<h3>{$categoryProducts|@count} {l s='other products in the same category:' mod='productscategory'}</h3>

 

 

<div class = 'container2'>

 

<div class = 'iosSlider2'>

 

<div class = 'slider2'>

 

{foreach from=$categoryProducts item='categoryProduct' name=categoryProduct}

{if count($categoryProducts) < 6} style="width: {math equation="width / nbImages" width=94 nbImages=$categoryProducts|@count}%"{/if}

<div id='item2'>

<a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)}" class="lnk_img" title="{$categoryProduct.name|htmlspecialchars}"><img src="{$link->getImageLink($categoryProduct.link_rewrite, $categoryProduct.id_image, 'carusel')}" alt="{$categoryProduct.name|htmlspecialchars}" /></a>

<div class="clear"></div>

<p class="product_name">

<a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)}" title="{$categoryProduct.name|htmlspecialchars}">{$categoryProduct.name|truncate:22:'...'|escape:'htmlall':'UTF-8'}</a>

</p>

<div class="clear"></div>

{if $ProdDisplayPrice AND $categoryProduct.show_price == 1 AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}

<p class="price_display">

<span class="price">{convertPrice price=$categoryProduct.displayed_price}</span>

</p>

{else}

<br />

{/if}

</div>

{/foreach}

</div>

 

</div>

<div class ='next'></div>

<div class ='prev unselectable'></div>

 

</div>

 

 

<script type="text/javascript">

$(document).ready(function() {

 

$('.iosSlider2').iosSlider({

snapToChildren: true,

desktopClickDrag: true,

keyboardControls: true,

infiniteSlider: true,

onSliderLoaded: sliderTest,

onSlideStart: sliderTest,

onSlideComplete: slideComplete,

navNextSelector: $('.next'),

navPrevSelector: $('.prev'),

});

 

});

 

function sliderTest(args) {

console.log(args.targetSliderOffset);

}

 

function slideComplete(args) {

 

$('.next, .prev').removeClass('unselectable');

 

if(args.currentSlideNumber == 0) {

 

$('.prev').addClass('unselectable');

 

} else if(args.currentSliderOffset == args.data.sliderMax) {

 

$('.next').addClass('unselectable');

 

}

 

}

</script>

</div>

{/if}

 

Mil gracias!!

Link to comment
Share on other sites

Si es la imagen substituye la etiqueta img por la vieja. Es decir:

 

<img src="{$link->getImageLink($categoryProduct.link_rewrite, $categoryProduct.id_image, 'medium_default')|escape:'html'}" alt="{$categoryProduct.name|htmlspecialchars}" />

 

por

 

<img src="{$link->getImageLink($categoryProduct.link_rewrite, $categoryProduct.id_image, 'carusel')}" alt="{$categoryProduct.name|htmlspecialchars}" />

 

De forma que te coga el tamaño de la que tengas definido como carusel en lugar de medium_default.

 

Por cierto, te funciona el carrusel?

 

Saludos

Link to comment
Share on other sites

Hola. He estado muy liado y aún no he tenido tiempo de probar lo que me comentas Enrique. En cuanto tenga un ratillo, lo pruebo y te digo algo.

Tengo otra dudilla pero voy a abrir un topic nuevo para que no me regañen :D.

Saludos...

Link to comment
Share on other sites

Ok, he dado con el fallo. Se trata de ésta línea del código de mi plantilla productscategory.tpl

 

{if count($categoryProducts) < 6} style="width: {math equation="width / nbImages" width=94 nbImages=$categoryProducts|@count}%"

 

Faltaba la etiqueta <ul ...... >

 

<ul {if count($categoryProducts) < 6} style="width: {math equation="width / nbImages" width=94 nbImages=$categoryProducts|@count}%" >

 

Así ya funciona... Muchas gracias por vuestra ayuda, pude darme cuenta del fallo gracias a ella. Saludos!!!

Link to comment
Share on other sites

Ok, he dado con el fallo. Se trata de ésta línea del código de mi plantilla productscategory.tpl

 

{if count($categoryProducts) < 6} style="width: {math equation="width / nbImages" width=94 nbImages=$categoryProducts|@count}%"

 

Faltaba la etiqueta <ul ...... >

 

<ul {if count($categoryProducts) < 6} style="width: {math equation="width / nbImages" width=94 nbImages=$categoryProducts|@count}%" >

 

Así ya funciona... Muchas gracias por vuestra ayuda, pude darme cuenta del fallo gracias a ella. Saludos!!!

 

Bien !!!

Link to comment
Share on other sites

Bueno, CREO que ahora sí, faltaba cerrar la etiqueta </ul>, que cosas... :rolleyes:

Ya no se triplican los productos, ni aparece el código de la página en el carousel, pero ahora...

Aparecen los artículos uno encima del otro, y no al lado... y si pinchas en alguno no enlaza al producto...

He cerrado la etiqueta justo después del {/foreach}, ¿será por eso?...

ay Señor Señor...

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

Sigo atascadillo... :wacko:

 

Intenta asi:

 

{if count($categoryProducts) > 0 && $categoryProducts !== false}
<div class="clearfix blockproductscategory">
<h3>{$categoryProducts|@count} {l s='other products in the same category:' mod='productscategory'}</h3>


	 <div class = 'container2'>

  <div class = 'iosSlider2'>

   <div class = 'slider2'>
  {foreach from=$categoryProducts item='categoryProduct' name=categoryProduct}

  <div id='item2' {if count($categoryProducts) < 6}style="width: {math equation="width / nbImages" width=94 nbImages=$categoryProducts|@count}%"{/if}>
   <a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)}" class="lnk_img" title="{$categoryProduct.name|htmlspecialchars}"><img src="{$link->getImageLink($categoryProduct.link_rewrite, $categoryProduct.id_image, 'carusel')}" alt="{$categoryProduct.name|htmlspecialchars}" /></a>
		    <div class="clear"></div>
   <p class="product_name">
 <a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)}" title="{$categoryProduct.name|htmlspecialchars}">{$categoryProduct.name|truncate:22:'...'|escape:'htmlall':'UTF-8'}</a>
   </p>
			 <div class="clear"></div>
   {if $ProdDisplayPrice AND $categoryProduct.show_price == 1 AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
   <p class="price_display">
 <span class="price">{convertPrice price=$categoryProduct.displayed_price}</span>
   </p>
   {else}
   <br />
   {/if}
  </div>
  {/foreach}
 </div>

    </div>
	  <div class ='next'></div>
<div class ='prev unselectable'></div>

	 </div>


<script type="text/javascript">
   $(document).ready(function() {

   $('.iosSlider2').iosSlider({
 snapToChildren: true,
 desktopClickDrag: true,
 keyboardControls: true,
 infiniteSlider: true,
 onSliderLoaded: sliderTest,
 onSlideStart: sliderTest,
 onSlideComplete: slideComplete,
 navNextSelector: $('.next'),
    navPrevSelector: $('.prev'),
   });

  });

  function sliderTest(args) {
   console.log(args.targetSliderOffset);
  }

  function slideComplete(args) {

   $('.next, .prev').removeClass('unselectable');

   if(args.currentSlideNumber == 0) {

	   $('.prev').addClass('unselectable');

   } else if(args.currentSliderOffset == args.data.sliderMax) {

	   $('.next').addClass('unselectable');

   }

  }
</script>
</div>
{/if}

Link to comment
Share on other sites

El problema viene de aqui:

 

<script type="text/javascript">
   $(document).ready(function() {

   $('.iosSlider2').iosSlider({
 snapToChildren: true,
 desktopClickDrag: true,
 keyboardControls: true,
 infiniteSlider: true,
 onSliderLoaded: sliderTest,
 onSlideStart: sliderTest,
 onSlideComplete: slideComplete,
 navNextSelector: $('.next'),
    navPrevSelector: $('.prev'),
   });

  });

  function sliderTest(args) {
   console.log(args.targetSliderOffset);
  }

  function slideComplete(args) {

   $('.next, .prev').removeClass('unselectable');

   if(args.currentSlideNumber == 0) {

	   $('.prev').addClass('unselectable');

   } else if(args.currentSliderOffset == args.data.sliderMax) {

	   $('.next').addClass('unselectable');

   }

  }
</script>

 

por que si lo borro, si me cargan los productos exactos ummm

Link to comment
Share on other sites

Como me dicen mis fuentes que Enrique esta mirando el tema detenidamente, y yo tengo que salir ahora, a ver que nos dice al final Enrique.

 

Saludos.

 

Gracias Sergio, tendré que enviaros una botellita de vino o algo... :D

Link to comment
Share on other sites

El problema como menciono Sergio venia del Javascript. Y en la 1.5.0.17 también da problemas, solo que aparecen cuando hay pocos productos, con muchos iva bien..

 

Cambiando la llamada al iosSlider y poniendo un if para los botones (si hay menos de 4 no se ven) parece que va bien

 

{if count($categoryProducts) > 0 && $categoryProducts !== false}
<div class="clearfix blockproductscategory">
<h3>{$categoryProducts|@count} {l s='other products in the same category:' mod='productscategory'}</h3>


	 <div class = 'container2'>

  <div class = 'iosSlider2'>

   <div class = 'slider2'>
  {foreach from=$categoryProducts item='categoryProduct' name=categoryProduct}
  <div id='item2'>
   <a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)}" class="lnk_img" title="{$categoryProduct.name|htmlspecialchars}"><img src="{$link->getImageLink($categoryProduct.link_rewrite, $categoryProduct.id_image, 'carusel')}" alt="{$categoryProduct.name|htmlspecialchars}" /></a>
		    <div class="clear"></div>
   <p class="product_name">
 <a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)}" title="{$categoryProduct.name|htmlspecialchars}">{$categoryProduct.name|truncate:22:'...'|escape:'htmlall':'UTF-8'}</a>
   </p>
			 <div class="clear"></div>
   {if $ProdDisplayPrice AND $categoryProduct.show_price == 1 AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
   <p class="price_display">
 <span class="price">{convertPrice price=$categoryProduct.displayed_price}</span>
   </p>
   {else}
   <br />
   {/if}
  </div>
  {/foreach}
 </div>

    </div>
	 {if count($categoryProducts) > 4} <div class ='next'></div>
<div class ='prev'></div> {/if}

	 </div>


<script type="text/javascript">
   $(document).ready(function() {

   $('.iosSlider2').iosSlider({
 scrollbar: false,
 snapToChildren: true,
 desktopClickDrag: true,
 navPrevSelector: $('.prev'),
 navNextSelector: $('.next')
   });

  });
</script>
</div>
{/if}

 

prueba y ya diras

  • Like 1
Link to comment
Share on other sites

El problema como menciono Sergio venia del Javascript. Y en la 1.5.0.17 también da problemas, solo que aparecen cuando hay pocos productos, con muchos iva bien..

 

Cambiando la llamada al iosSlider y poniendo un if para los botones (si hay menos de 4 no se ven) parece que va bien

 

{if count($categoryProducts) > 0 && $categoryProducts !== false}
<div class="clearfix blockproductscategory">
<h3>{$categoryProducts|@count} {l s='other products in the same category:' mod='productscategory'}</h3>


	 <div class = 'container2'>

  <div class = 'iosSlider2'>

<div class = 'slider2'>
  {foreach from=$categoryProducts item='categoryProduct' name=categoryProduct}
  <div id='item2'>
<a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)}" class="lnk_img" title="{$categoryProduct.name|htmlspecialchars}"><img src="{$link->getImageLink($categoryProduct.link_rewrite, $categoryProduct.id_image, 'carusel')}" alt="{$categoryProduct.name|htmlspecialchars}" /></a>
			<div class="clear"></div>
<p class="product_name">
 <a href="{$link->getProductLink($categoryProduct.id_product, $categoryProduct.link_rewrite, $categoryProduct.category, $categoryProduct.ean13)}" title="{$categoryProduct.name|htmlspecialchars}">{$categoryProduct.name|truncate:22:'...'|escape:'htmlall':'UTF-8'}</a>
</p>
			 <div class="clear"></div>
{if $ProdDisplayPrice AND $categoryProduct.show_price == 1 AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
<p class="price_display">
 <span class="price">{convertPrice price=$categoryProduct.displayed_price}</span>
</p>
{else}
<br />
{/if}
  </div>
  {/foreach}
 </div>

	</div>
	 {if count($categoryProducts) > 4} <div class ='next'></div>
<div class ='prev'></div> {/if}

	 </div>


<script type="text/javascript">
   $(document).ready(function() {

$('.iosSlider2').iosSlider({
 scrollbar: false,
 snapToChildren: true,
 desktopClickDrag: true,
 navPrevSelector: $('.prev'),
 navNextSelector: $('.next')
});

  });
</script>
</div>
{/if}

 

prueba y ya diras

 

¡¡ Sí, FUNCIONA !!. Me habéis salvado la vida!!, jejeje. Me he asustado un poco al entrar a la tienda pues la cantidad de todos los productos estaba a 0, pero imagino que esto no tiene nada que ver con el toqueteo de código de la plantilla productcategory.tpl. Es raro. He vuelto a asignar cantidades a los productos y solucionado, pero me ha dejao mosca.

Muchísimas gracias a tí y a Sergio por haberos molestado en examinar mi caso.

Una cosita, aunque me da un poco igual esa es la verdad. ¿Habría alguna manera de mostrar los botones del slider con cuatro o menos productos?. Es simple curiosidad, está perfecta como está.

Reitero mis gracias y espero algún día tener los conocimientos suficientes como para poder echar una mano en un momento de necesidad... voy a dar el tema por solucionado.

 

PD: En cuanto inaugure os mando una botellita de vino, que no era broma :D.

Link to comment
Share on other sites

¿Habría alguna manera de mostrar los botones del slider con cuatro o menos productos?.

 

En base al código que te ha puesto Enrique: (Atención, es posible que tengas que modificar mas cosas para que luego cuadre el desplazamiento)

 

Creo que si cambias esto:

 

{if count($categoryProducts) > 4} <div class ='next'></div>
<div class ='prev'></div> {/if}

 

por esto

 

{if count($categoryProducts) > 0} <div class ='next'></div>
<div class ='prev'></div> {/if}

 

Se veran siempre.

 

(Aunque al fin y al cabo dejarlo con > 0 y dejarlo asi:

 

<div class ='next'></div>
<div class ='prev'></div>

 

es lo mismo en este caso)

 

Si lo dejas asi:

 

{if count($categoryProducts) > 3} <div class ='next'></div>
<div class ='prev'></div> {/if}

 

Creo que se veran cuando hayan mas de 3 productos imprimidos.

Link to comment
Share on other sites

No hay problema en quitar el if para que se vean siempre, aunque claro no hacen nada.

 

<div class ='next'></div>
<div class ='prev'></div>

 

Lo único que faltaría seria cuando hay menos de 5 productos (no hay desplazamiento) y estamos con resoluciones bajas (al fin y al cabo el tema es responsibe) que se adaptara el slider.

Link to comment
Share on other sites

Me he asustado un poco al entrar a la tienda pues la cantidad de todos los productos estaba a 0, pero imagino que esto no tiene nada que ver con el toqueteo de código de la plantilla productcategory.tpl.

 

¿Todos los productos con stock a 0? (En principio, no creo que tenga que ver con haber modificado el productcategory.tpl, habra surgido por otro lado el problema...)

 

¿Estas configurando almacenes o algo asi? (Mejor crea un tema nuevo para esa duda)

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

Acabo de darme cuenta de una cosa. Cuando selecciono un producto, aparecen los productos de la misma categoría, todo perfecto. Sin embargo, si muevo el slider a la derecha y luego vuelvo a la izquierda, el primer producto pierde el link. (En realidad no lo pierde, por que si te sitúas encima de él marca la ruta correcta, es simplemente que no va al hacer click). Curioso...

Link to comment
Share on other sites

Acabo de darme cuenta de una cosa. Cuando selecciono un producto, aparecen los productos de la misma categoría, todo perfecto. Sin embargo, si muevo el slider a la derecha y luego vuelvo a la izquierda, el primer producto pierde el link. (En realidad no lo pierde, por que si te sitúas encima de él marca la ruta correcta, es simplemente que no va al hacer click). Curioso...

 

Eso si que es raro, porque a mi no me lo hace. puedes pasar el link? y navegador que usas?

Saludos

Link to comment
Share on other sites

Eso si que es raro, porque a mi no me lo hace. puedes pasar el link? y navegador que usas?

Saludos

 

Si, yo también lo he detectado. (Puedes comprobarlo, duplica varios productos, y dale a la flechita, creo que es porque el css/style asociado en ese momento esta "tapando", porque si pincho en un parte de la imagen si funciona el enlace, pero si pincho en otra parte no funciona)

 

Añado:

 

(Es mas el enlace en el nombre del producto si funciona en esa parte, el que no funciona es el enlace de la imagen)

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

Si, yo también lo he detectado. (Puedes comprobarlo, duplica varios productos, y dale a la flechita, creo que es porque el css/style asociado en ese momento esta "tapando", porque si pincho en un parte de la imagen si funciona el enlace, pero si pincho en otra parte no funciona)

 

Añado:

 

(Es mas el enlace en el nombre del producto si funciona en esa parte, el que no funciona es el enlace de la imagen)

 

No duplica los productos. Igual te lo ha parecido por que tengo varios productos con la misma imagen (pero distinto nombre). Concretamente la botella de Protos. ¿Es eso?.

Link to comment
Share on other sites

No duplica los productos. Igual te lo ha parecido por que tengo varios productos con la misma imagen (pero distinto nombre). Concretamente la botella de Protos. ¿Es eso?.

No he dicho nunca nada de que me aparezcan duplicados, simplemente como no teníamos la url de tu tienda, le comente a Enrique, que duplicara el varios productos desde el panel, para ver la problemática del enlace al darle al boton del slider, no dije nada de que me aparecieran productos duplicados.

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

En las ultimas versiones de iosslider este problema de Chrome lo tienen solucionado.

 

En el fichero themes\theme481\js\jquery.iosslider.min.js en la línea 1330 tienes

 

   if(!isMouseDown) {
	return false;
   }

 

pon

 

if(!isMouseDown) {
	return false;
   }

if(!isIe) {
	if((typeof e.webkitMovementX != 'undefined' || typeof e.webkitMovementY != 'undefined') && e.webkitMovementY === 0 && e.webkitMovementX === 0) {
	 return true;
	}
}

Edited by Enrique Gómez (see edit history)
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...