Jump to content

Recommended Posts

Buenos días:

 

Tengo una pregunta tonta en la que estoy atascado a ver si algún profesional puede echarme una mano. Estoy buscando la manera de obtener la lista de fabricantes en el fichero category.tpl. Es decir, cuando un usuario está visualizando una categoría, quiero mostrar la lista de fabricantes de sus productos.

 

De hecho, el módulo "Búsqueda por facetas" ya lo hace, si os fijáis muestra en el sidebar la lista de fabricantes de los productos de esa categoría, sin embargo no he encontrado la forma de obtener esa lista en category.tpl.

 

¿Quizá aprovechando el módulo citado llamando a su función?. ¿Quizá prestashop ya lo carga y hay una variable smarty para ello (he mirado con $manufacturers pero nada)?.

 

Gracias por la ayuda. Un cordial saludo.

Link to comment
Share on other sites

Buenos días:

 

Tengo una pregunta tonta en la que estoy atascado a ver si algún profesional puede echarme una mano. Estoy buscando la manera de obtener la lista de fabricantes en el fichero category.tpl. Es decir, cuando un usuario está visualizando una categoría, quiero mostrar la lista de fabricantes de sus productos.

 

De hecho, el módulo "Búsqueda por facetas" ya lo hace, si os fijáis muestra en el sidebar la lista de fabricantes de los productos de esa categoría, sin embargo no he encontrado la forma de obtener esa lista en category.tpl.

 

¿Quizá aprovechando el módulo citado llamando a su función?. ¿Quizá prestashop ya lo carga y hay una variable smarty para ello (he mirado con $manufacturers pero nada)?.

 

Gracias por la ayuda. Un cordial saludo.

 

Hola,

 

la lógica la tendrás que hacer en el CategoryController.php.

Link to comment
Share on other sites

Muchas gracias por la nota. ¿Quizá haya un ejemplo de cómo obtener la lista de fabricantes de los productos de una categoría?.

 

¿O alguna forma de llamar a la función del módulo "Búsqueda por facetas"?.

 

Gracias, un cordial saludo.

Link to comment
Share on other sites

Con algo asi en el category.tpl de la plantilla que estes utlizando te deberia de valer

{foreach from=$filters item=filter}
{foreach from=$filter.values key=id_value item=value name=fe}
{if isset($filter.type_lite) && $filter.type_lite == 'manufacturer'}
<span style="font-weight: bold; text-transform: uppercase">{$filter.type_lite}</span>
<ul class="{$filter.type_lite}_list">
<li>{$value.name}</li>
{/if}
</ul>
{/foreach}
{/foreach}
Link to comment
Share on other sites

Muchísimas gracias. Eres un crack, eso era lo que necesitaba.

 

¿Me podrías indicar en qué atributo está la imagen (de la marca) y el enlace (de la marca, es decir, para que solo se vean sus productos)?.

 

El enlace lo he encontrado, es: $value.link y muestra un link de este tipo: www.midominio.com/mi-categoria#fabricante-nike (es decir, le añade "#fabricante-nike" a la url de la categoría para filtrar la marca). Sin embargo cuando la abro en el navegador se reescribe automáticamente como www.midominio.com/mi-categoria (quitando el "#fabricante-nike") y por tanto no se muestra únicamente los productos de la marca.

 

¿Me podrías indicar cómo solucionar esto?.

 

Gracias. Un cordial saludo.

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

Ese link se establece al habilitarse o no el filtro por json desde el modulo. Si quieres mostrar y utilizar el link hay que tirar por otro lado. Te resultara mas practico cambiar de hook el blocklayered a la posicion donde quieres mostrar los enlaces o hacerlo con uno independiente

Link to comment
Share on other sites

Buenas

 

El caso es que el blocklayered lo tengo habilitado en el sidebar y funciona correctamente: al seleccionar una marca se muestran únicamente los productos que pertenecen a ella. Pero quiero dejarlo en el sidebar y tan sencillo como "replicar" las opciones debajo de la descripción.

 

El código smarty que me has dejado funciona, me muestra las marcas de los productos de esa categoría, e imprimo el enlace: pero al presionar en él no se filtra, mientras que presionando en el sidebar si lo hace (lo cual es muy raro porque en ambos casos añaden a la URL del navegador "#fabricante-nike").

 

Así que creo que debe haber un matiz que se me escapa, únicamente quiero "copiar" lo que hay en el sidebar, que ya lo hago, pero al presionar en el enlace sucede lo siguiente:

 

1. Se añade al enlace el fabricante: www.midominio.com/categoria pasa a ser www.midominio.com/categoria#fabricante-nike

2. Hace scroll automáticamente hacia abajo donde están los productos

3. Aparece el icono jquery "cargando" (por tanto está funcionando, ya que hace lo mismo que blocklayered)

4. De repente borra de la url del navegador el fabricante "fabricante-nike", quita el icono de "cargando" y aparecen TODOS los productos (no llega a filtrarlo)

 

Así que creo que algo no es correcto del todo, igual el enlace del fabricante lo tengo que colocar de alguna manera concreta y no entre etiquetas "<a href=""></a>". También he comprobado la consola del navegador por si hay algún error JavaScript, pero no es el caso.

 

¿Alguna idea?. Muchas gracias por la ayuda.

 

EDITO: He comparado los enlaces que imprimo con los que muestra blocklayered y me he fijado en un par de diferencias: en blocklayered el enlace está entre una etiqueta label que tiene un atributo for:

<label for="layered_manufacturer_3"> <a href="www.midominio.com/categoria#fabricante-nike" data-rel="nofollow">Nombre Fabricante<span> (1)</span></a> </label>

Estoy casi seguro de que se trata de esto, porque el atributo for es el mismo que el id del input del blocklayered, cuando presiono en él se selecciona dicho input. En cambio en mi enlace no se selecciona el input del blocklayered. ¿Me podrías decir cómo lo imprimo (el for del label)?, ¿está en la variable $value?. Gracias!

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

Me temo que la solucion no estan sencilla. Ademas de lo que te comente antes mas arriba, si revisas el archivo

modules\blocklayered\blocklayered.tpl

veras esto en la parte de arriba

<script type="text/javascript">
current_friendly_url = '#{$current_friendly_url}';
{if version_compare($smarty.const._PS_VERSION_,'1.5','>')}
param_product_url = '#{$param_product_url}';
{else}
param_product_url = '';
{/if}
</script>

son los parametros que se añaden a la url del filtro, porque estamos hablando de filtros no de urls propiamente dichas. Para ver como se generan esos parametros puedes ir al archivo blocklayered.php y veras que se generan desde

getFilterBlock

EDITO: Cuando tenga tiempo lo miro. Quizas con jquery y la  funcion .clone se pueda hacer algo

Link to comment
Share on other sites

Bueno pues mirando mas detenidamente en el category.tpl, encima de 

<h1 class="page-heading{if (isset($subcategories) && !$products) || (isset($subcategories) && $products) || !isset($subcategories) && $products} product-listing{/if}"><span class="cat-name">{$category->name|escape:'html':'UTF-8'}{if isset($categoryNameComplement)} {$categoryNameComplement|escape:'html':'UTF-8'}{/if}</span>{include file="$tpl_dir./category-count.tpl"}</h1>

colocamos el codigo asi 

{foreach from=$filters item=filter}
{foreach from=$filter.values key=id_value item=value name=fe}
{if isset($filter.type_lite) && $filter.type_lite == 'manufacturer'}
<div id="manufacturers-filters">
<span style="font-weight: bold; text-transform: uppercase">{$filter.type_lite}</span>
<ul class="{$filter.type_lite}_list">
<a href="{$value.link}" data-rel="{$value.rel}">{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}</a>
</div>
{/if}
</ul>
{/foreach}
{/foreach}

y el resultado es el que aparece en la imagen adjunta.

Si te da algun problema con el enlace sin los parametros del filtro, borra el cache del navegador o prueba en modo incognito

post-107989-0-64617100-1469380385_thumb.png

Link to comment
Share on other sites

Buenas tardes:

 

Pasa exactamente lo mismo, esto me tiene un poco mosca, he hecho un montón de pruebas pero siempre sucede lo que te he comentado en el post anterior:

 

1. Se añade al enlace el fabricante: www.midominio.com/categoria pasa a ser www.midominio.com/categoria#fabricante-nike

2. Hace scroll automáticamente hacia abajo donde están los productos

3. Aparece el icono jquery "cargando" (por tanto está funcionando, ya que hace lo mismo que blocklayered)

4. De repente borra de la url del navegador el fabricante "fabricante-nike", quita el icono de "cargando" y aparecen TODOS los productos (no llega a filtrarlo)

 

 

Pero creo que he dado con una posible causa: yo no estoy usando el theme por defecto de prestashop, sino que uso una plantilla comprada y sobreescribe el tpl del blocklayered: /themes/MiTheme/modules/blocklayered/blocklayered.tpl

 

Lo he revisado y veo que hace varias cosas diferente, he intentado compiarlo y adaptarlo al category.tpl pero no logro que arranque. Te adjunto el fichero por si puedes echarle un ojo y confirmarme que esta es la causa. Es un archivo muy sencillo pero no alcanzo a comprender todas las variables smarty.

 

Por otro lado, si quieres te puedo mandar una copia del theme por mensaje privado.

 

De nuevo muchas gracias Ventura, seguro que es una tontería pero como no he trabajado mucho con los fabricantes me he atascado. Un cordial saludo.

blocklayered.zip

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

Probando con el tema default tambien me pasaba lo de que elimina el parametro del filtro de la url y se queda solo con el #. Añadiendo el enlace como esta en el blocklayered incluida la cantidad funciona sin problemas, al menos cuando no hay paginacion. Prueba con los .tpl y js del tema default, aunque no creo que haya diferencias sustanciales con respecto a un theme no-default. Con jquery y la funcion clone tambien funciona correctamente, prueba a ver igual te da mejor resultado por tema de colocacion y nombre de clases

Link to comment
Share on other sites

Create an account or sign in to comment

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

Create an account

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

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...