Jump to content

Grisé declinaison hors stock


Recommended Posts

ok.. alors pour modifier l'affichage des déclinaisons.. voici un petite bidouille qui fonctionne sur product.tpl du thème, vous pouvez vous en inspirer pour griser la ligne avec une balise <span> par exemple et du css au lieu de rajouter EN STOCK ou HORS STOCK comme le fait ce code :

				{foreach from=$groups key=id_attribute_group item=group}
					{if $group.attributes|@count}
						<fieldset class="attribute_fieldset">
							{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();">
									<option value="0" selected="selected" title="Choose your size">Choose your size</option>
									
								 {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'} {foreach from=$combinations item=foo}{foreach from=$foo key=key item=floo}{if $key == 'attributes'}{if $floo.0 == $id_attribute}{assign var="verif" value="true"}{else}{assign var="verif" value="false"}{/if}{/if}{if $key == 'quantity' && $verif == 'true'} - {if $floo == '0'}OUT OF STOCK{ELSE}IN STOCK{/if}{/if}{/foreach}{/foreach}</option>
 								{/foreach}	
									
								</select>
							{elseif ($group.group_type == 'color')}
Link to comment
Share on other sites

ca a l'air pas mal comme solution

on peut pas mettre choisissez votre taille dans le select, par défaut? au lieu de mettre la déclinaison par défaut ?

 

un client qui arrive sur une fiche produit. si la déclinaison par défaut est hors stock. le message de indisponibilité est affiché. il croit alors que c'est valable pour toutes les declinaisons

en revanche si "choisissez votre taille" ça incite a choisir sa taille.

 

j'ai pas reussi a mettre en grisé par contre :

<select name="{$groupName}" id="group_{$id_attribute_group|intval}" class="attribute_select" onchange="findCombination();getProductAttribute();">
									<option value="0" selected="selected" title="Choose your size">Choississez la taille</option>
									
								 {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'} {foreach from=$combinations item=foo}{foreach from=$foo key=key item=floo}{if $key == 'attributes'}
                                        {if $floo.0 == $id_attribute}{assign var="verif" value="true"}{else}{assign var="verif" value="false"}{/if}{/if}
                                        <span style="color:#B9B9B9">{if $key == 'quantity' && $verif == 'true'} - {if $floo == '0'}indisponible</span>
                                        {ELSE}Disponible{/if}{/if}{/foreach}{/foreach}</option>
 								{/foreach}	
									
								</select>
Link to comment
Share on other sites

c'est déjà le cas pour le texte dans mon code modifié :

 

<option value="0" selected="selected" title="Choose your size">Choose your size</option>

 

pour griser une ligne.. j'ai expliqué qu'il faut rajouter une balise avant et apres la ligne et rajouter du code css pour arriver à tes fins.

Link to comment
Share on other sites

Je tiens à préciser que le code en l'état ne fonctionnera que si vous avez des tailles à sélectionner et non la couleur aussi.. pour ça il va falloir modifier le code en conséquence.

Link to comment
Share on other sites

pour griser la ligne .. le plus simple est de rajouter une classe dans l'option : soit avec le mm code on obtient :

{foreach from=$groups key=id_attribute_group item=group}
									{if $group.attributes|@count}
										<fieldset class="attribute_fieldset">
											<label class="attribute_label" {if $group.group_type != 'color' && $group.group_type != 'radio'}for="group_{$id_attribute_group|intval}"{/if}>{$group.name|escape:'html':'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="form-control attribute_select no-print">
													<option value="" selected="selected" title="Choose your size">Choose your size</option>
														{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'}"
										{foreach from=$combinations item=foo}
											{foreach from=$foo key=key item=floo}{if $key == 'attributes'}
												{if $floo.0 == $id_attribute}{assign var="verif" value="true"}
												{else}{assign var="verif" value="false"}{/if}{/if}
												{if $key == 'quantity' && $verif == 'true'} {if $floo == '0'} class="grisee" {/if}{/if}
											{/foreach}
										{/foreach}
										>
										{$group_attribute|escape:'htmlall':'UTF-8'} 
										
										{foreach from=$combinations item=foo}
											{foreach from=$foo key=key item=floo}{if $key == 'attributes'}
												{if $floo.0 == $id_attribute}{assign var="verif" value="true"}
												{else}{assign var="verif" value="false"}{/if}{/if}
												{if $key == 'quantity' && $verif == 'true'} - {if $floo == '0'}OUT OF STOCK {else}IN STOCK{/if}{/if}
											{/foreach}
										{/foreach}</option>
														{/foreach}
													</select>
												{elseif ($group.group_type == 'color')}

il faudrait remanier le code pour qu'il fonctionne correctement avec l'élément "choose you size" car ça fonctionne sous 1.5 à la base ce bout de code mais l'idée est la même.

Link to comment
Share on other sites

j'ai oublié de dire qu'il faut donc rajouter dans product.css le code permettant de "griser" la ligne :

#attributes .attribute_list .form-control option.grisee {
  background: grey none repeat scroll 0 0;
  color: white;
}
Link to comment
Share on other sites

oui .. il faudrait que je regarde ça en détail mais ça vient certainement du javascript qui voit que cette déclinaison n'existe pas et donc va choisir la suivante... c'est ennuyeux, mais ça doit pas être bien méchant à rectifier, encore faut il s'y pencher vraiment dessus.. je ne dis pas que je ne regarderai pas.. mais il va falloir attendre un peu

Link to comment
Share on other sites

  • 1 month later...

Bonjour

 

Mille merci pour ce post je vous suit car j'ai acheté un module pour griser les declinaison qui ne fonctionne pas  :mellow:

 

La actuellement j'ai un autre soucis, le problème est que sur smartphone ou tablette sous chrome la liste déroulante pour changer de déclinaison apparait puis disparait aussitot donc changement de déclinaison impossible  :(  si quelqu'un à une idée ça serait top je perds beaucoup de client

 

Cordialement

 

www.dine-style.fr

Link to comment
Share on other sites

ok.

j'attend ton retour alors.

 

 

merci encore pour ton aide

 

1 mois c'est long et en même temps ça passe très vite.. j'avais zappé, c'est Laslaa qui a fait remonter le topic.

 

Voici les modifs à faire pour que ça fonctionne  :

 

Modifier la partie suivante dans le fichier /montheme/js/product.js

		//display that the product is unavailable with theses attributes
		if (!selectedCombination['unavailable'])
		{
			$('#availability_value').text(doesntExistNoMore + (globalQuantity > 0 ? ' ' + doesntExistNoMoreBut : ''));
			if (!allowBuyWhenOutOfStock)
				$('#availability_value').removeClass('label-success').addClass('label-warning');
		}
		else
		{
			$('#availability_value').text(doesntExist).removeClass('label-success').addClass('label-warning');
			$('#oosHook').hide();
		}

par

		//display that the product is unavailable with theses attributes
		if (!selectedCombination['unavailable'])
		{
			$('#availability_value').text(doesntExistNoMore + (globalQuantity > 0 ? ' ' + doesntExistNoMoreBut : ''));
			if (!allowBuyWhenOutOfStock)
				$('#availability_value').removeClass('label-success').addClass('label-warning');
		}
		else
		{
			$('#oosHook').hide();
		}

Ensuite, ajouter à la fin du fichier css : montheme/css/product.css

#attributes .attribute_list .form-control option.grisee {
  background: grey none repeat scroll 0 0;
  color: white;
} 

et modifier toujours la même partie du fichier product.tpl comme suit :

								{foreach from=$groups key=id_attribute_group item=group}
									{if $group.attributes|@count}
										<fieldset class="attribute_fieldset">
											<label class="attribute_label" {if $group.group_type != 'color' && $group.group_type != 'radio'}for="group_{$id_attribute_group|intval}"{/if}>{$group.name|escape:'html':'UTF-8'} </label>
											{assign var="groupName" value="group_$id_attribute_group"}
											<div class="attribute_list">
												{if ($group.group_type == 'select')}
													<select name="Choose your size" id="group_{$id_attribute_group|intval}" class="form-control attribute_select no-print">
													<option value="" selected="selected" title="Choose your size">Choose your size</option>
														{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} {/if} title="{$group_attribute|escape:'htmlall':'UTF-8'}"
										{foreach from=$combinations item=foo}
											{foreach from=$foo key=key item=floo}{if $key == 'attributes'}
												{if $floo.0 == $id_attribute}{assign var="verif" value="true"}
												{else}{assign var="verif" value="false"}{/if}{/if}
												{if $key == 'quantity' && $verif == 'true'} {if $floo == '0'} class="grisee" {/if}{/if}
											{/foreach}
										{/foreach}
										>
										{$group_attribute|escape:'htmlall':'UTF-8'} 
										
										{foreach from=$combinations item=foo}
											{foreach from=$foo key=key item=floo}{if $key == 'attributes'}
												{if $floo.0 == $id_attribute}{assign var="verif" value="true"}
												{else}{assign var="verif" value="false"}{/if}{/if}
												{if $key == 'quantity' && $verif == 'true'} - {if $floo == '0'}OUT OF STOCK {else}IN STOCK{/if}{/if}
											{/foreach}
										{/foreach}</option>
														{/foreach}
													</select>
												{elseif ($group.group_type == 'color')}

Enjoy :)

Link to comment
Share on other sites

Dans product.tpl on ajoute la dernière partie c'est ça?

 

Relisez tout le post, j'ai pris la peine d'expliquer correctement.

Link to comment
Share on other sites

Merci beaucoup, celà fonctionne pour moi,

 

Comment traduire les champs Choose your size et Out Of stock ou In stock? Car j'ai un champs taille et un champs couleur de mon côté ?

 

Est ce que c'est possible de sélectionner la déclinaison par avance lorsqu'une seule déclinaison est disponible ? Par exemple 2 couleurs 1 tailles donc la tailles toujours active.

 

En tout cas trés bon boulot  ;)

Link to comment
Share on other sites

J'ai réussi mais pas pour la déclinaison unique :) Est il possible de rendre la déclinaison indisponible non sélectionnable ?

 

Par contre j'ai un soucis supplémentaire désolé de vous embêtez :(

 

Sur la première déclinaison il affiche autant de fois qu'il y a de tailles pour une couleur par exemple en répété la mention En stock ou Indisponible,

 

Exemple : http://www.dine-style.fr/fr/tunique/1109-tunique-kim.html

Link to comment
Share on other sites

pas testé sur cette version, mais ça devrait le faire.. à vous d'essayer et merci du retour si ça fonctionne.

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...