Aide - Recherche - Membres - Calendrier
Version complète : Recherche développeur MS2.2 -> Papier Cadeau
Forum osCommerce-fr > Adapter OsCommerce MS2 > Echanges développeurs
mickael34
Bonjour,

J'ai des besoins bien précis en terme de Gestion de Papier Cadeaux payant.

Après recherches, j'ai trouvé ces 2 contributions :
- osC_GiftWrap_v1.0
- Gift Wrap Module

On peut gérer l'option papier cadeau de 2 façons : forfaitaire ou au coût par produits.


De mon côté j'ai 2 soucis :

- Tous mes produits ne sont pas emballables -> pas de problème à priori, je crée une case à cocher côté admin dans mes fiches produits qui va dire on accepte ou non l'option côté site.

- Je souhaite que le client puisse choisir pour quel produit de son panier il souhaite un emballage payant ou non -> c'est là que je bloque et c'est quelque chose que ne font pas les 2 contributions existantes.


L'idée serait donc d'avoir :
- sur le panier une case à cocher ligne par ligne.
- ou via un module (comme le font les contrib existantes) qui me détaille le contenu du panier avec une case à cocher individuellement.

L'information du ou des choix devant évidemment être récupérable côté admin dans la commande.


Tout cela dépassant mes compétences, si un développeur connaissant bien OsCommerce est intéressé, me contacter en MP.

Merci beaucoup smile.gif

Bonbec
Bonjour,

Il y a peut-être une autre solution : les options (products_attributes).
Cela permet au commerçant :
- de ne mettre l'option "papier cadeau" qu'aux articles qui peuvent être emballés.
- d'avoir des tarifs différents selon la taille du papier à utiliser (c'est un exemple)

Cela permet au client :
- de sélectionner l'option "papier cadeau" lors qu'il met l'article dans le panier.

Cela ne nécessite pas de programmation ...
SaphyraK
Citation (Bonbec @ 17 Sep 2020, 13:37) *
Bonjour,

Il y a peut-être une autre solution : les options (products_attributes).
Cela permet au commerçant :
- de ne mettre l'option "papier cadeau" qu'aux articles qui peuvent être emballés.
- d'avoir des tarifs différents selon la taille du papier à utiliser (c'est un exemple)

Cela permet au client :
- de sélectionner l'option "papier cadeau" lors qu'il met l'article dans le panier.

Cela ne nécessite pas de programmation ...


Haha astucieux.
J'étais en train de regarder les contributions (leur code), et effectivement, les options pourraient coller.

De plus, dans le fichier du panier (shopping_cart.php) et dans le fichier de la page produit (product_info.php) on peut ajouter un if conditionnel pour check si l'option pour le produit existe et on peut afficher un message: "Ce produit peut être emballé comme cadeau, sélectionnez l'option si vous souhaitez en bénéficier!" wink.gif
mickael34
smile.gif

J'ai oublié de préciser que pour diverses raisons je ne souhaite pas passer pour le système d'options qui je vous l'accorde aurait été bien bien bien plus simple !
J'ai déjà pas mal de produits à options : couleur, taille... et je ne souhaite pas charger l'ergonomie de mes fiches.


J'ai pendant un moment creusé l'idée de "jouer" avec la fonction :
Code
add_cart($products_id, $qty = '1', $attributes = '', $notify = true)


A côté de chaque produit de mon panier, j'aurais eu un lien "ajouter un papier cadeau" qui aurait ajouté un nouveau produit dans mon panier : le produit "papier cadeau" en question.

C'était nickel mais je ne savais pas depuis quelle ligne produit de mon panier, le "papier cadeau" était ajouté :
- J'ai 3 produits dans mon panier.
- Je clique sur ajouter un papier cadeau sur mon premier produit puis le deuxième.
- Dans mon panier s'ajoute donc le produit papier cadeau en quantité 1 puis encore 1 soit =2.
- Mais impossible de savoir quels sont les 2 produits sur 3 concernés par l'emballage cadeau !

J'ai donc abandonné cette idée.
SaphyraK
Citation (mickael34 @ 17 Sep 2020, 14:10) *


J'ai oublié de préciser que pour diverses raisons je ne souhaite pas passer pour le système d'options ...


Hahahaha, ok, dommage, c'eût été plus simple biggrin.gif

Cela-dit, là, comme ça, je ne connais absolument pas comment est conçu le fonctionnement du module (enfin, des modules) que tu cites.
L'idée en revanche, qui bourgeonne dans ma tête est simple (attention, c'est un draft, les codes tels quels ne fonctionneront absolument pas, c'est juste une ébauche):

Ajout d'une colonne à customers_order, 'giftwrap_per_products'

Sur la page du panier, un champ de formulaire caché avec pour nom: "giftwrap_per_products"
Sur la page du panier, une case ajoutée par produit.
Chaque case produirait ce code (au sein d'une boucle listant chaque produit dans le panier):
->
Code
id="giftwrapPerProducts_cb_<?php echo $shopping_cart['id']; ?>"

->
Code
onclick="giftwrapPerProducts_fn('<?php echo $shopping_cart['id']; ?>', this.id);"


et un .js injecté:

Code
function giftwrapPerProducts_fn(product_id, case_dom) {

checkboxToTest = case_dom.checked;
elementToParseOrUpdate = document.getElementById('giftwrap_per_products').value;
regexPattern = new RegExp('\|wrap\['+product_id+'\]', 'g');

switch (checkboxToTest) {

   default:
   case false:
   case '';
         // si la case était décochée, on ajoute un tag d'emballage, uniquement  si le terme précis d'emballage n'est déjà pas trouvé:
        if (!elementToParseOrUpdate.match(regexPattern)) { elementToParseOrUpdate += '|wrap['+product_id+']'; }
     break;

   case true:
   case 'checked':
        // si la case était cochée, on supprimer juste le tag d'emballage,  uniquement si le terme précis d'emballage est trouvé:
        if (elementToParseOrUpdate.match(regexPattern)) { elementToParseOrUpdate.replace(regexPattern, ''); }
    break;
}


En fait, maintenant, plus qu'à ne jamais oublier de passer le champ caché à la classe order, elle a pour name 'giftwrap_per_products'
A partir de la page panier, sera injecté dans l'instance actuelle '$order' un index au tableau php:
Code
giftWrapPerProducts' =>  $order['giftwrap_per_products']


Depuis l'administration maintenant:

Dans edit_orders, à un endroit, on créé une structure HTML:

Code
<table>
  <tr>
    <td>
       Le client veut que les produits suivants soit emballés: <?php /* on  récupère le champ giftwrap_per_products depuis la base de données */ et on le liste: echo  str_replace(array('|wrap[', ']'), array('', ''),  $order['giftwrap_per_products']); ?>
    </td>
  </tr>
</table>


Et ainsi, on sait quels produits sont ou non à emballer.
Evidemment, c'est très "brouillon", c'est un proof-of-concept, mais, la logique est bien là.
Il faut mettre en développement chaque partie importante: base de données, classe order, fichier de transitions: shopping_cart.php, checkout_shipping.php, checkout_payment.php et checkout_process.php.
Aussi, la partie de récupération de qupi doit être emballé dans l'administration, peut se faire plus joliement, directement inclu dans le listing du $order->cart(), puis, si le wrap[XXX] (où XXX = id du produit), coincide avec la ligne actuelle du produit, alors, ça ajoute la mention: "-- Le client veut que ce produit soit emballé!".

Voilà.
EDIT: il se peut que des erreurs de syntaxe JS/PHP soit apparente, ceci car, ce n'est pas un code testé, mais une logique de concept.
mickael34
biggrin.gif

Je te remercie pour l'idée, je vais creuser cette piste !

Je sens que je m'amuser quand même tongue.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2021 Invision Power Services, Inc.