Kato2 Posted September 4, 2014 Share Posted September 4, 2014 (edited) Hola a todos, uso la plantilla por defecto en la versión 1.5.6.2 Cuando los tiene, los atributos seleccionados aparecen debajo del nombre del producto en forma de string o cadena de texto, separados por comas. A ver si alguien me puede decir como cambiar la presentación por defecto de los atributos del producto para que aparezcan como una lista. Creo que he encontrado donde se genera la cadena de texto, en el archivo /classes/Cart.php en la función cacheSomeAttributesLists(). Mirando el manual de PHP parece que utiliza la función implode() para crear el string a partir de un select a la base de datos. Lo que no se es cómo modificar esto para que los atributos aparezcan en forma de lista como en la imagen que pongo de ejemplo. public static function cacheSomeAttributesLists($ipa_list, $id_lang) { if (!Combination::isFeatureActive()) return; $pa_implode = array(); foreach ($ipa_list as $id_product_attribute) if ((int)$id_product_attribute && !array_key_exists($id_product_attribute.'-'.$id_lang, self::$_attributesLists)) { $pa_implode[] = (int)$id_product_attribute; self::$_attributesLists[(int)$id_product_attribute.'-'.$id_lang] = array('attributes' => '', 'attributes_small' => ''); } if (!count($pa_implode)) return; $result = Db::getInstance()->executeS(' SELECT pac.`id_product_attribute`, agl.`public_name` AS public_group_name, al.`name` AS attribute_name FROM `'._DB_PREFIX_.'product_attribute_combination` pac LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON ( a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.' ) LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON ( ag.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)$id_lang.' ) WHERE pac.`id_product_attribute` IN ('.implode($pa_implode, ',').') ORDER BY agl.`public_name` ASC' ); foreach ($result as $row) { self::$_attributesLists[$row['id_product_attribute'].'-'.$id_lang]['attributes'] .= $row['public_group_name'].' : '.$row['attribute_name'].', '; self::$_attributesLists[$row['id_product_attribute'].'-'.$id_lang]['attributes_small'] .= $row['attribute_name'].', '; } foreach ($pa_implode as $id_product_attribute) { self::$_attributesLists[$id_product_attribute.'-'.$id_lang]['attributes'] = rtrim( self::$_attributesLists[$id_product_attribute.'-'.$id_lang]['attributes'], ', ' ); self::$_attributesLists[$id_product_attribute.'-'.$id_lang]['attributes_small'] = rtrim( self::$_attributesLists[$id_product_attribute.'-'.$id_lang]['attributes_small'], ', ' ); } } Agradecería cualquier indicación para resolver el problema. Muchas gracias de antemano. Edited September 26, 2014 by Kato2 (see edit history) Link to comment Share on other sites More sharing options...
onlygoliat Posted September 8, 2014 Share Posted September 8, 2014 Hola Kato2, Deberías buscar el tpl donde se muestra el valor. Yo ahora mismo no tengo tiempo para buscartelo. Si no lo encuentras avisa y te ayudo cuando tenga un hueco. Saludos. Link to comment Share on other sites More sharing options...
Kato2 Posted September 8, 2014 Author Share Posted September 8, 2014 Hola onlygoliat, gracias por interesarte por mi pregunta. El valor se muestra en el if del archivo /themes/mi_tema/shopping-cart-product-line.tpl siguiente: {if isset($product.attributes) && $product.attributes}<a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'htmlall':'UTF-8'}">{$product.attributes|escape:'htmlall':'UTF-8'}</a>{/if} que da como resultado el código html siguiente, en los atributos que puse de ejemplo: <a href="https://passur.es/tienda/es/motores-para-puertas-abatibles-1-y-2-hojas/1-kit-pb-400.html#/fotocelula-sin_fotocelula/mandos-2_mandos/electrocerradura-sin_electrocerradura">Añade electrocerradura : Sin Electrocerradura, Añade fotocelulas a tu kit : Sin fotocelula, Añade Mandos a tu kit : 2 mandos</a> Archivo /themes/mi_tema/shopping-cart-product-line.tpl completo: <tr id="product_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}" class="cart_item{if isset($productLast) && $productLast && (!isset($ignoreProductLast) || !$ignoreProductLast)} last_item{/if}{if isset($productFirst) && $productFirst} first_item{/if}{if isset($customizedDatas.$productId.$productAttributeId) AND $quantityDisplayed == 0} alternate_item{/if} address_{$product.id_address_delivery|intval} {if $odd}odd{else}even{/if}"> <td class="cart_product"> <a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'htmlall':'UTF-8'}"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'small_default')|escape:'html'}" alt="{$product.name|escape:'htmlall':'UTF-8'}" {if isset($smallSize)}width="{$smallSize.width}" height="{$smallSize.height}" {/if} /></a> </td> <td class="cart_description"> <p class="s_title_block"><a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'htmlall':'UTF-8'}">{$product.name|escape:'htmlall':'UTF-8'}</a></p> {if isset($product.attributes) && $product.attributes}<a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'htmlall':'UTF-8'}">{$product.attributes|escape:'htmlall':'UTF-8'}</a>{/if} </td> <td class="cart_ref">{if $product.reference}{$product.reference|escape:'htmlall':'UTF-8'}{else}--{/if}</td> <td class="cart_unit"> <span class="price" id="product_price_{$product.id_product}_{$product.id_product_attribute}{if $quantityDisplayed > 0}_nocustom{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}"> {if !empty($product.gift)} <span class="gift-icon">{l s='Gift!'}</span> {else} {if isset($product.is_discounted) && $product.is_discounted} <span style="text-decoration:line-through;">{convertPrice price=$product.price_without_specific_price}</span><br /> {/if} {if $priceDisplay} {convertPrice price=$product.price} {else} {convertPrice price=$product.price} {/if} {/if} </span> </td> <td class="cart_quantity"{if isset($customizedDatas.$productId.$productAttributeId) AND $quantityDisplayed == 0} style="text-align: center;"{/if}> {if isset($cannotModify) AND $cannotModify == 1} <span style="float:left"> {if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}{$customizedDatas.$productId.$productAttributeId|@count} {else} {$product.cart_quantity-$quantityDisplayed} {/if} </span> {else} {if isset($customizedDatas.$productId.$productAttributeId) AND $quantityDisplayed == 0} <span id="cart_quantity_custom_{$product.id_product}_{$product.id_product_attribute}_{$product.id_address_delivery|intval}" >{$product.customizationQuantityTotal}</span> {/if} {if !isset($customizedDatas.$productId.$productAttributeId) OR $quantityDisplayed > 0} <div class="cart_quantity_button"> <a rel="nofollow" class="cart_quantity_up" id="cart_quantity_up_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" href="{$link->getPageLink('cart', true, NULL, "add=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_address_delivery={$product.id_address_delivery|intval}&token={$token_cart}")|escape:'html'}" title="{l s='Add'}"><img src="{$img_dir}icon/quantity_up.gif" alt="{l s='Add'}" width="14" height="9" /></a><br /> {if $product.minimal_quantity < ($product.cart_quantity-$quantityDisplayed) OR $product.minimal_quantity <= 1} <a rel="nofollow" class="cart_quantity_down" id="cart_quantity_down_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" href="{$link->getPageLink('cart', true, NULL, "add=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_address_delivery={$product.id_address_delivery|intval}&op=down&token={$token_cart}")|escape:'html'}" title="{l s='Subtract'}"> <img src="{$img_dir}icon/quantity_down.gif" alt="{l s='Subtract'}" width="14" height="9" /> </a> {else} <a class="cart_quantity_down" style="opacity: 0.3;" href="#" id="cart_quantity_down_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" title="{l s='You must purchase a minimum of %d of this product.' sprintf=$product.minimal_quantity}"> <img src="{$img_dir}icon/quantity_down.gif" width="14" height="9" alt="{l s='Subtract'}" /> </a> {/if} </div> <input type="hidden" value="{if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}{$customizedDatas.$productId.$productAttributeId|@count}{else}{$product.cart_quantity-$quantityDisplayed}{/if}" name="quantity_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}_hidden" /> <input size="2" type="text" autocomplete="off" class="cart_quantity_input" value="{if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}{$customizedDatas.$productId.$productAttributeId|@count}{else}{$product.cart_quantity-$quantityDisplayed}{/if}" name="quantity_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" /> {/if} {/if} </td> <td class="cart_total"> <span class="price" id="total_product_price_{$product.id_product}_{$product.id_product_attribute}{if $quantityDisplayed > 0}_nocustom{/if}_{$product.id_address_delivery|intval}{if !empty($product.gift)}_gift{/if}"> {if !empty($product.gift)} <span class="gift-icon">{l s='Gift!'}</span> {else} {if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)} {if !$priceDisplay}{displayPrice price=$product.total_customization}{else}{displayPrice price=$product.total_customization}{/if} {else} {if $priceDisplay}{displayPrice price=$product.total}{else}{displayPrice price=$product.total}{/if} {/if} {/if} </span> </td> {if !isset($noDeleteButton) || !$noDeleteButton} <td class="cart_delete"> {if (!isset($customizedDatas.$productId.$productAttributeId) OR $quantityDisplayed > 0) && empty($product.gift)} <div> <a rel="nofollow" class="cart_quantity_delete" id="{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" href="{$link->getPageLink('order-opc', true, NULL, "delete=1&id_product={$product.id_product|intval}&ipa={$product.id_product_attribute|intval}&id_address_delivery={$product.id_address_delivery|intval}&token={$token_cart}")|escape:'html'}">{*{l s='Delete'}*}</a> </div> {/if} </td> {/if} </tr> Muchas gracias de antemano. Link to comment Share on other sites More sharing options...
onlygoliat Posted September 9, 2014 Share Posted September 9, 2014 Hola Kato2, a que te refieres con los atributos. Acabo de instalar la versión 1.5.5.0 y las características y la ficha técnica los veo como listado. Link to comment Share on other sites More sharing options...
Kato2 Posted September 9, 2014 Author Share Posted September 9, 2014 Hola onlygoliat, esa que me indicas es la página de producto. Yo me refiero a la página de confirmación de pedido o checkout, en la captura que adjunto lo señalado en rojo son los atributos del producto. Como ves aparecen uno a continuación de otro separados por una coma. Lo que quiero saber es cómo ponerlos en forma de lista, uno debajo de otro. Saludos y gracias por tu interés. Link to comment Share on other sites More sharing options...
onlygoliat Posted September 9, 2014 Share Posted September 9, 2014 (edited) Cambia en: "/theme/default/shopping-cart-product-line.tpl" Original: {if isset($product.attributes) && $product.attributes}<a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'htmlall':'UTF-8'}">{$product.attributes|escape:'htmlall':'UTF-8'}</a>{/if} Nuevo (la línea original la mantengo comentada ): {if isset($product.attributes) && $product.attributes} <a href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'htmlall':'UTF-8'}"> {* Linea original comentada: $product.attributes|escape:'htmlall':'UTF-8' *} {assign var="lista_atributos" value=","|@explode:$product.attributes} {if !empty($lista_atributos)} <ul class="cart_attributes"> {foreach item=elemento from=$lista_atributos} <li>{$elemento}</li> {/foreach} </ul> {/if} </a> {/if} Con esto deberías tener lo que querías. Añade esto (o algo similar) en el global.css /* Nuevo */ ul.cart_attributes li { list-style-type: disc; margin-left: 10px; } Cualquier cosa me dices. Saludos. Edited September 9, 2014 by onlygoliat (see edit history) Link to comment Share on other sites More sharing options...
Kato2 Posted September 26, 2014 Author Share Posted September 26, 2014 He estado de viaje y no he podido probar el código hasta esta misma tarde. Muchísimas gracias onlygoliat, ha funcionado a la primera. Te quedo muy agradecido. Doy el tema como solucionado. Link to comment Share on other sites More sharing options...
Recommended Posts