Jump to content

[RESOLU]Désactiver une valeur d'un attribut sans l'effacer


Recommended Posts

[Version utilisée : PS 1.4.7.0]

 

Bonjour !

 

Je viens demander de l'aide concernant les valeurs d'un attribut. Voilà j'ai un attribut "dimensions" avec 5 valeurs (20x30 cm, 30x45 cm, ...).

 

Je souhaiterais désactiver la valeur 20x30 cm sans l'effacer pour la réactiver éventuellement plus tard.

 

Ce topic parle du même problème mais je n'y ai pas trouvé de réponse satisfaisante :

http://www.prestasho...s-dun-attribut/

 

La personne dit d'aller modifier dans product.tpl

 

pour moi, j'ai changé dans product.tpl à la ligne 405

{if $group.attributes|@count} à {if $group.attributes|@count && $id_attribute_group != 5}

 

Mais je ne comprend pas sa manipulation...J'ai l'impression que c'est l'attribut en lui même qui est changé et non une de sa valeur (précision : débutant en PHP ;-). Ne peut t’ont pas mettre en commentaire une ligne qui concerne l'id de la valeur d'un attribut par exemple ?

 

Et comme il n'y a pas de retour à ce post, si quelqu'un à une idée ce serai sympa !

 

Sinon en plan B, je pourrais dans le BO aller supprimer la valeur de cet attribut mais qu'elles sont les conséquences exactes ? cela supprime toutes les déclinaisons de cette valeur sans bugs et/ou erreurs ?

 

Merci par avance pour votre aide !

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

Bonjour,

 

Je pense que le code que vous citez est effectivement la solution à votre problème. Il faut juste modifier la valeur id_attribut_group en fonction de l'id de l'attribut que vous souhaitez cacher.

Avez vous déjà testé ce code?

Link to comment
Share on other sites

Ok effectivement il faudrait plutot mettre une condition d'affichage directement dans la boucle des options du select pour les déclinaisons.

 

Dans le product.tpl, au niveau de la boucle foreach qui affiche les différentes options du select, encadrez cette balise <option> avec ce code

 

{if $group_attribute != '20x30 cm'}
  <option ...> ... </option>
{/if}

 

Ca devrait avoir l'effet souhaité ;)

Link to comment
Share on other sites

Bonjour,

 

J'ai donc inséré votre code :

<!-- attributes -->
  <div id="attributes">
  {foreach from=$groups key=id_attribute_group item=group}
  {if $group.attributes|@count}
  <p>
   <label for="group_{$id_attribute_group|intval}">{$group.name|escape:'htmlall':'UTF-8'} :</label>
   {assign var="groupName" value="group_$id_attribute_group"}
   <select name="{$groupName}" id="group_{$id_attribute_group|intval}" onchange="javascript:findCombination();{if $colors|@count > 0}$('#wrapResetImages').show('slow');{/if};">
 {foreach from=$group.attributes key=id_attribute item=group_attribute}
 {if $group_attribute != '20x30 cm'}
  <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>
 {/if}
 {/foreach}
   </select>
  </p>
  {/if}
  {/foreach}
  </div>
  {/if}

 

Et ça marche ! quand je vais sur le produit, il ne me propose plus en 20x30 cm.

 

Par contre ma liste de produits indique toujours ce choix donc j'imagine qu'il faut aussi mettre du code dans product-list.tpl au niveau de cette ligne (la 56 pour moi) ? :

{if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}

 

Merci encore en tout cas !

Link to comment
Share on other sites

Pour le listing des produits ça doit être le même principe, il doit y avoir une boucle qui permet d'afficher les déclinaisons et c'est à ce niveau qu'il faut mettre le code.

 

Vous devez utiliser un thème différent de celui d'origine non? Car les déclinaisons n'apparaissent pas sur le thème de base de Prestashop.

Link to comment
Share on other sites

Pardon pour le délais de réponse !

 

Oui, j'ai acheté un thème, je ne savais pas que le thème d'origine n'affichait pas l'appel aux déclinaisons.

 

Mon fichier product-list.tpl:

 

{if isset($products)}
<!-- Products list -->
<ul id="product_list" class="clear">
{foreach from=$products item=product name=products}
 <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix">
	 <div class="prod_list_cont">
   <div class="r_top_bis"></div>
	    <div class="r_top_bis2"></div>
	    <div class="clear"></div>
  <div class="center_block">
		  <h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</a></h3>
   <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></a>
   {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}

{if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if}
   {/if}

   <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'|escape:'htmlall':'UTF-8'}">{$product.description_short|truncate:360:'...'|strip_tags:'UTF-8'}</a></p>
  </div>					
  <div class="right_block">
   {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale"><img src="{$img_dir}onsaleone_{$lang_iso}.png" alt="{l s='On sale'}"/></span>
   {elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount"><img src="{$img_dir}lowered_{$lang_iso}.png" alt="{l s='Reduced price!'}"/></span>{/if}
   {if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only!'}</span>{/if}
   {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))}
   <div>

   </div>
   {/if}
   {if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}
 {if ($product.allow_oosp || $product.quantity > 0)}
  <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart.php')}?add&id_product={$product.id_product|intval}{if isset($static_token)}&token={$static_token}{/if}" title="{l s='Add to cart'}">{l s='Add to cart'}</a>
 {else}
   <span class="exclusive">{l s='Add to cart'}</span>
 {/if}
   {/if}
   <a class="button" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a>
   {if isset($comparator_max_item) && $comparator_max_item}
 <p class="compare"><input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked{/if}/> <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label></p>
   {/if}
  </div>
		 <div class="clear"></div>
	 <div class="r_footer_bis"></div>
	 <div class="r_footer_bis2"></div>		  
  </div>
 </li>
{/foreach}
</ul>
<!-- /Products list -->
{/if}

 

En regardant le fichier, je pense que le code à insérer doit être mis au niveau de l'appel des attributs:

{if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE}

 

Mais je ne sais pas vraiment où le mettre. De plus est-ce le même code à mettre ? celui-ci:

{if $group_attribute != '20x30 cm'}
{/if}

 

Je n'ai pas fais de test car j'ai peur de tout casser ;-)

 

Merci pour votre aide !

Link to comment
Share on other sites

Bonjour,

 

 

Je ne comprends pas vraiment comment les attributs peuvent être affichés sur vos listing de produits car il n'y a aucune ligne de code qui permet de faire cela dans le code que vous avez transmis...

Peut être que c'est géré en js...

 

Est ce que le site est visible en ligne? Sinon quel thème utilisez vous? Peut être y a-t-il une version de démo.

Link to comment
Share on other sites

Bonjour,

 

 

Je viens de regarder votre site et je ne suis plus sur de comprendre votre problème.

Si je vais sur la page http://www.marcel-mochet.fr/fr/voile-sportive/2897-voile-sportive-0001.html

c'est un produit qui a 4 déclinaisons de tailles. Mais si je vais sur le listing de produit de cette catégorie: http://www.marcel-mochet.fr/fr/35-voile-sportive

je ne vois pas les déclinaisons...

Link to comment
Share on other sites

Bonjour !

 

Bon et bien il me semble que j'ai trouvé la solution à mon problème. Effectivement je n'appelle pas les différentes valeurs d'attribut sur product-list.tpl. Tout simplement, ma déclinaison par défaut était restée à "20x30 cm".

 

En mettant ma deuxième déclinaison ("30x 45 cm") comme déclinaison par défaut, la liste produit affiche bien le prix correspondant à "30x45 cm" donc je n'ai plus qu'à mettre cette déclinaison par défaut pour tous les produits !

 

Merci énormément d'avoir pris le temps de m'aider en tout cas ! a charge de revanche, même si je ne suis pas sur d'avoir le niveau pour vous aider ;-)

 

Bonne continuation, je mets ce post comme résolu ! a+

  • Like 1
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...