Jump to content

[SOLUCIONADO] Poner el precio del atributo en el listado desplegable


NBlack

Recommended Posts

Buenas tardes chicos.

 

Llevo toda la mañana buscando como poner junto al nombre del atributo en el listado desplegable su precio. Las modificaciones a hacer son en el product.tpl y son en este apartado del código:

 

<!-- attributes -->
<div id="attributes">
{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>
{debug}
{/foreach}

De momento he conseguido sacar los valores que se encuentran en $combinations con un foreach:

{foreach from=$combinations key=idCombination item=combination}
         (+ [spam-filter]math equation="precio * (1 + iva/100)" precio=$combination.price iva=$product->tax_rate}|truncate:4:""} Euros)
{/foreach}

El problema que tengo es que no se me ocurre la manera de que sólo aparezca el valor correspondiente ya que ahora mismo saco los 2 valores en cada loop y no se como extraer el correspondiente. 

 

Lo suyo igual sería extraer el valor del array en el PHP (¿o es en el product.js?) y preguntar en el TPL.

 

¿Podeis echarme un cable?

 

¡Gracias!

 

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

Solucionado. Al final he visto que los foreach tienen una propiedad que indica en que itinerancia está, se accede a ella asociando un nombre al foreach (name=nombreQueQuieras) y se accede con la variable ($smarty.foreach.nombreQueQuieras.iteration), tened en cuenta que la primera iteracion es 1, la segunda 2....(a diferencia de muchos sistemas que usan el primero como un 0).

 

El código final queda de esta manera en el product.tpl:

<!-- attributes -->
<div id="attributes">
{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 name=buclePrincipal}

<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'}
{foreach from=$combinations item=combination name=miBucle}
        {if ($smarty.foreach.miBucle.iteration == $smarty.foreach.buclePrincipal.iteration)}
{if $combination.price!=0}
(+ [spam-filter]math equation="precio * (1 + iva/100)" precio=$combination.price iva=$product->tax_rate}|truncate:4:""} Euros)
{/if} 
{/if}
{/foreach}
Las lineas que he añadido han sido:

Cambiar esta linea:

{foreach from=$group.attributes key=id_attribute item=group_attribute}

por esta otra:

{foreach from=$group.attributes key=id_attribute item=group_attribute name=buclePrincipal}

Y esta:

<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'}

 

por esta otra:

 
<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'}
{foreach from=$combinations item=combination name=miBucle}
        {if ($smarty.foreach.miBucle.iteration == $smarty.foreach.buclePrincipal.iteration)}
{if $combination.price!=0}
(+ [spam-filter]math equation="precio * (1 + iva/100)" precio=$combination.price iva=$product->tax_rate}|truncate:4:""} Euros)
{/if} 
{/if}
{/foreach}

 

Al final os quedará en el desplegable:

 

Nombre del item ( + X Euros), si es 0 euros NO aparece el coste en euros, en caso de que SI querais que aparezca la última fila debeis dejarla por esta otra:

<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'}

{foreach from=$combinations item=combination name=miBucle}
        {if ($smarty.foreach.miBucle.iteration == $smarty.foreach.buclePrincipal.iteration)}
{/if}
{/foreach}

Le dedico esta solución a Feliz y a nadie que me han echado una mano en mi web y ya casi está lista para ver la luz!

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

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