Jump to content

Ajouter la disponibilité de chaque attribut dans le menu déroulant


Hobbes

Recommended Posts

Bonjour,

 

Je souhaite rajouter l'information "en stock" à côté des attributs (dans la liste déroulante des groupes d'attributs sur la page produit) lorsque l'article est effectivement en stock avec cet attribut.

Par exemple, j'ai un groupe d'attribut "Taille" avec les attributs "50","51","52","53"... qui s'affichent dans le menu déroulant, j'aimerai que l'on puisse voir "50 - en stock", "51 - sous 1 semaine", etc

 

Je suppose que cela doit se passer ici dans le fichier product.tpl :


<!-- 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}
<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>
{/foreach}
</select>
</p>
{/if}
{/foreach}
</div>

 

Quelqu'un connaîtrait-il le bout de code à saisir pour permettre cet affichage ?

Link to comment
Share on other sites

Bonjour,

C'est possible mais en modifiant plusieurs fichiers dans votre thème (themes/js/product.js et themes/product.tpl) dans les fichiers du BO (admin/tabs/AdminProduct.php et js/attributesBack.js) et dans la db (champs supplémentaires)

 

La gestion de stock/dispo des attributs est un manque dans PS.

 

Ckarone

Link to comment
Share on other sites

Tiens? pourquoi faut-il rajouter des champs dans la DB?.... surtout que l'info existe déjà à priori (message si en stock et message si pas en stock)

Est-il possible d'avoir la méthode à suivre ? ou bien cela réclame-t-il vraiment trop de code à modifier ?

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

Oui cette modification fonctionne parfaitement et pour plusieurs langues, mais cela demande pas mal de modifications.

L'utilité de champs dans la DB va permettre d'ajouter une date de dispo et un statut (en commande,sur commande, en rupture,pré-commande) pour chacune des déclinaisons.

 

J'ai déjà cité les fichiers (plus haut) à modifier et je n'ai malheureusement pas le temps pour expliquer pas à pas la procédure.

Si vous avez une compétence en PHP, cela sera assez simple à faire.

 

1/ Ajoutez deux champs dans votre DB (1 pour le statut et 1 pour le délai)

 

2/ Dans le fichier admin/tabs/AdminProduct.php ajoutez deux listes déroulante juste en dessous de la quantité minimal:

Exemple pour le statut :

<select name="dispo_code" id="dispo_code">
   <option value="">--</option>
   <option value="1">En stock</option>
   <option value="2">En commande</option>
   <option value="3">En rupture</option>
   <option value="4">Sur commande</option>
   <option value="5">Pré-commande</option>
   </select>

-La première avec les statuts et la deuxième avec les délais si besoin

-Vous devez modifier le tableau récapitulatif des déclinaisons pour afficher le contenu des deux champs statut et délai.

-Modifier la boucle foreach ($combinaisons AS $k => $combinaison) pour récuperer les valeurs dans la DB.

-Modifier le JS onclick="javascript:fillCombinaison pour ajouter les valeurs et respecter l'ordre.

- Enfin ajouter dans $product->updateProductAttribute($id_product_attribute,..) vos deux champs pour les enreistrer.

 

3/Vous devez ajouter si ce n'est pas déjà les cas un override de la classe Product pour y ajouter vous deux champs dans les méthodes addProductAttribute, addCombinationEntity, updateProductAttribute et ne pas oublier de les déclarer.

 

La suite arrive si vous parvenez à faire ces modifications.

 

Ckarone

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

La suite:

4/Le js du backoffice est à modifier:

-Dans js/adminBack.js au début vous devez modifier function fillCombinaison(wholesale_price, price_impact, weight_impact, ajouter a la fin vos deux variables à rucupérer.

-Ensuite vous devez ajouter ce le code ci-dessous pour que les champs coté BO se remplisse automatiquement lors de la modification d'une déclinaison.

if (dispo_code == 0)
{
 getE('dispo_code').options[getE('dispo_code').selectedIndex].value = 0;
 getE('dispo_code').selectedIndex = 0;
}
 else if (!dispo_code)
{
 getE('dispo_code').options[getE('dispo_code').selectedIndex].value = 0;
 getE('dispo_code').selectedIndex = 0;
}
else if (dispo_code == 1)
{
 getE('dispo_code').options[getE('dispo_code').selectedIndex].value = 1;
 getE('dispo_code').selectedIndex = 1;
}
else if (dispo_code == 2)
{
 getE('dispo_code').options[getE('dispo_code').selectedIndex].value = 2;
 getE('dispo_code').selectedIndex = 2;
}
else if (dispo_code == 3)
{
 getE('dispo_code').options[getE('dispo_code').selectedIndex].value = 3;
 getE('dispo_code').selectedIndex = 3;
}
else if (dispo_code == 4)
{
 getE('dispo_code').options[getE('dispo_code').selectedIndex].value = 4;
 getE('dispo_code').selectedIndex = 4;
}
else if (dispo_code == 5)
{
 getE('dispo_code').options[getE('dispo_code').selectedIndex].value = 5;
 getE('dispo_code').selectedIndex = 5;
}

Ce code est valable pour votre liste déroulante dispo_code et faites de même pour le champs délai si vous l'utilisez.

 

Voilà ici la modification pour le BO est terminée et vous devez pouvoir attribuer un statut et un délai pour vos déclinaisons.

 

C'est pas suffisamment détaillé mais je manque de temps.

 

La suite pour le FO bientôt

 

Ckarone

Link to comment
Share on other sites

  • 2 months later...

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