Panier, encore...

Bonsoir,

Il y a quelques semaines, j'ai lancé un appel à l'aide pour la mise en place d'un Panier ainsi que le système de Bon de Commandes. Ca, c'est fonctionnel, grâce à l'aide précieuse de Nathalie.

MAIS !

Ce serait trop simple, forcément. Dans le panier doivent apparaître la taille du produit (taille ou pointure, selon produit), et la couleur en plus de ce qu'il y a de base (titre, prix, quantité, prix+quantité).
Il y a également un deuxième prix à rajouter, ça en bidouillant en tant que codeur du dimanche, c'est passé et c'est fonctionnel.
Mais reste le coup des tailles/pointures/couleurs.
Je regarde le PHP, et même si j'arrive plus ou moins à comprendre ce qui en ressort du code général, je reste impuissant...

Les valeurs taille, etc, sont données grâce aux Champs Extras. Quand le client clique sur "ajouter au panier", il faut que les valeurs qu'il a sélectionné soient transmises dans le panier. Si jamais la taille diffère mais que l'article est le même, alors la valeur ''quantité'' du premier article ne s'actualise pas et un nouvel article se rajoute.
Les valeurs en question se trouvent dans un "select".
Ca donne :

<select name="taille_dispo" value="#ENV{taille_dispo}">
     <BOUCLE_tailles(POUR){tableau #LISTER_VALEURS**{taille_dispo}}>
         [<option value="#ENV{#VALEUR}">[(#VALEUR)]</option>]
     </BOUCLE_tailles>
</select>

Ici c'est surtout pour que vous puissiez visualiser la chose. Et c'est donc la valeur sur laquelle se trouve le client qui doit être récupérée.

Et là, je suis dans un brouillard complet.
Sauriez-vous m'éclairez, s'il vous plaît ?

En vous remerciant d'avance,

Victor-Arnaud.

Bonjour Victor,
Effectivement, il faut que ton panier embarque ces paramètres de taille et de couleur de la même façon qu'il le fait avec le paramètre quantité.
Est-ce qu'il ne faudrait pas regarder du côté de champs extras à ajouter à la table spip_paniers_liens ?
Dans le code ci-dessous, #ID_OBJET contient le numéro de l'article sélectionné dans le panier. J'imagine que c'est ici qu'il faudra ensuite manipuler ces nouveaux champs taille et couleur sur le modèle :

value="[(#ENV{quantites}|table_valeur{#OBJET}|table_valeur{#ID_OBJET}|sinon{#QUANTITE})]"

Dans formulaire panier.html :

<BOUCLE_contenu_panier(PANIERS_LIENS){id_panier=#ENV{_id_panier}}>
               #SET{prix_unitaire,#PRIX*{#OBJET,#ID_OBJET}}
                 [(#SET{taxe_objet,[(#GET{prix_unitaire}|moins{#PRIX_HT*{#OBJET,#ID_OBJET}}|mult{#QUANTITE})]})]
    [(#SET{cumul_taxes,[(#GET{cumul_taxes}|plus{[(#GET{taxe_objet})]})]})]
               <tr class="emplette[ (#ENV{erreurs}|table_valeur{quantites}|table_valeur{#OBJET}|table_valeur{#ID_OBJET}|?{erreur})]">
                  <td class="description">#INCLURE{fond=formulaires/inc-panier-description-emplette,objet=#OBJET,id_objet=#ID_OBJET}</td>
                  <td class="prix_unitaire">[(#GET{prix_unitaire}|prix_formater)]</td>
                  <td class="quantite"><input type="text" class="text" size="3" name="quantites[#OBJET][#ID_OBJET]" value="[(#ENV{quantites}|table_valeur{#OBJET}|table_valeur{#ID_OBJET}|sinon{#QUANTITE})]" /></td>
                  <td class="montant">[(#GET{prix_unitaire}|mult{#QUANTITE}|prix_formater)]</td>
               </tr>
               </BOUCLE_contenu_panier>

-----Message d'origine-----
De : Victor-A MARCHISET [mailto:djack.mister@gmail.com]
Envoyé : mercredi 21 mai 2014 00:25
À : spip@rezo.net
Objet : [Spip] Panier, encore...

Bonsoir,

Il y a quelques semaines, j'ai lancé un appel à l'aide pour la mise en place d'un Panier ainsi que le système de Bon de Commandes. Ca, c'est fonctionnel, grâce à l'aide précieuse de Nathalie.

MAIS !

Ce serait trop simple, forcément. Dans le panier doivent apparaître la taille du produit (taille ou pointure, selon produit), et la couleur en plus de ce qu'il y a de base (titre, prix, quantité, prix+quantité).
Il y a également un deuxième prix à rajouter, ça en bidouillant en tant que codeur du dimanche, c'est passé et c'est fonctionnel.
Mais reste le coup des tailles/pointures/couleurs.
Je regarde le PHP, et même si j'arrive plus ou moins à comprendre ce qui en ressort du code général, je reste impuissant...

Les valeurs taille, etc, sont données grâce aux Champs Extras. Quand le client clique sur "ajouter au panier", il faut que les valeurs qu'il a sélectionné soient transmises dans le panier. Si jamais la taille diffère mais que l'article est le même, alors la valeur ''quantité'' du premier article ne s'actualise pas et un nouvel article se rajoute.
Les valeurs en question se trouvent dans un "select".
Ca donne :

<select name="taille_dispo" value="#ENV{taille_dispo}">
     <BOUCLE_tailles(POUR){tableau #LISTER_VALEURS**{taille_dispo}}>
         [<option value="#ENV{#VALEUR}">[(#VALEUR)]</option>]
     </BOUCLE_tailles>
</select>

Ici c'est surtout pour que vous puissiez visualiser la chose. Et c'est donc la valeur sur laquelle se trouve le client qui doit être récupérée.

Et là, je suis dans un brouillard complet.
Sauriez-vous m'éclairez, s'il vous plaît ?

En vous remerciant d'avance,

Victor-Arnaud.
_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Bonjour,

Bonne question !
Je ne sais pas si ce cas de figure a été prévu par le plugin paniers.

Pour saisir le problème, revoyons comment fonctionnent les paniers.
Un panier est séparé en 2 éléments :

- la panier en lui même dans la table spip_paniers, il contient les trucs de base : identifiant, auteur, cookie, statut et date.

- le contenu du panier dans la table spip_paniers_liens.
A chaque article du panier correspond une ligne dans cette table.
Elle contient 4 colonnes :
  * id_panier : l'identifiant du panier
  * id_objet : l'identifiant de l'objet
  * objet : le type d'objet
  * quantite : comme son nom l'indique

Pour ajouter un objet à un panier, on dispose d'un bouton d'action "remplir_panier", qui accepte 3 paramètres, et pas plus : objet-id_objet-quantite.

Ex:
[(#BOUTON_ACTION{
     'ajouter au panier',
     #URL_ACTION_AUTEUR{remplir_panier,#OBJET-#ID_OBJET,#SELF},
     ajax})]

On voit que ces 3 paramètres correspondent aux données de la ligne qui va être ajoutée (ou mise à jour) dans la table spip_paniers_liens.

Donc voilà le noeud du problème : la table spip_paniers_liens sert à identifier les objets des paniers et leurs quantités, mais il n'y a pas de colonne supplémentaire pour d'autres informations : les variantes (de couleur, de taille, ou d'autre chose) en ce qui nous concerne.
Et de toute façon, le bouton d'action ne prend pas de paramètres supplémentaires pour choisir une de ces hypotétiques variantes.
Qui plus est, ces paramètres doivent être connus à l'avance : au lieu du select, il faudrait un bouton pour chaque variante.

Bon, ça ne veut pas dire que ce n'est pas faisable.
Mais là du coup, je ne suis pas sûr de la bonne solution. Il faudrait contacter l'auteur du plugin pour voir comment "bien" faire.
En attendant, voilà une proposition, à brûle-pourpoint :

1) Ajouter 2 champs "taille" et "couleur" à la table spip_paniers_liens
Ca ne va pas être possible depuis l'interface des champs extras puisque c'est une table "technique" et du coup elle n'apparaîtra pas dans la liste des objets modifiables. Il faut utiliser directement l'API.

2) Au lieu d'utiliser un bouton d'action, il faut utiliser un formulaire (à créer).
Le formulaire doit avoir au moins 2 paramètres "objet" et "id_objet", et contenir les 2 sélecteurs de variante : "taille" et "couleur" (et éventuellement 'quantite').
ex : #FORMULAIRE_REMPLIR_PANIER{#OBJET,#ID_OBJET,#SELF}

Dans la fonction traiter, tu récupères dans un premier temps les traitements de l'action "remplir_panier". Ca va ajouter/mettre à jour l'objet dans le panier comme si le bouton d'action avait été utilisé.
Ensuite, il ne reste plus qu'à mettre à jour la ligne de l'objet en indiquant les variantes.
Ca pourrait ressembler à ça :

function formulaires_remplir_panier($objet='', $id_objet=0, $retour=''){

$res=array();

// on récupère le traitement normal du bouton d'action
// ajoute/met à jour la ligne correspondant à l'objet dans spip_paniers_liens
$quantite = _request('quantite');
$remplir_panier = charger_fonction('remplir_panier','action');
$remplir_panier($objet,$id_objet,$quantite);

// ensuite, s'occuper des variantes
// met à jour la ligne correspondant à l'objet dans spip_paniers_liens pour les champ 'taille' et 'couleur'
include_spip('inc/session');
$id_panier = session_get('id_panier'); // id du panier en cours
$set = array('taille'=>_request('taille'), 'couleur'=>_request('couleur')); // valeurs des variantes
sql_updateq(
     'spip_paniers_liens',
     $set,
     'id_panier='.$id_panier.' and objet='.sql_quote($objet).' and id_objet='.$id_objet
);

if ($retour) $res['redirect'] = $retour;

return $res;

}

Bon, c'est au plus simple, il n'y a pas les messages de succès et d'erreur ni rien, mais c'est pour l'exemple.

Cela dit, je répète, c'est une bonne question ! J'essaierai de voir avec l'auteur du plugin pour voir ce qu'il en pense.

C.R

Le 21/05/2014 00:24, Victor-A MARCHISET a écrit :

Bonsoir,

Il y a quelques semaines, j'ai lancé un appel à l'aide pour la mise en
place d'un Panier ainsi que le système de Bon de Commandes. Ca, c'est
fonctionnel, grâce à l'aide précieuse de Nathalie.

MAIS !

Ce serait trop simple, forcément. Dans le panier doivent apparaître la
taille du produit (taille ou pointure, selon produit), et la couleur en
plus de ce qu'il y a de base (titre, prix, quantité, prix+quantité).
Il y a également un deuxième prix à rajouter, ça en bidouillant en tant
que codeur du dimanche, c'est passé et c'est fonctionnel.
Mais reste le coup des tailles/pointures/couleurs.
Je regarde le PHP, et même si j'arrive plus ou moins à comprendre ce qui
en ressort du code général, je reste impuissant...

Les valeurs taille, etc, sont données grâce aux Champs Extras. Quand le
client clique sur "ajouter au panier", il faut que les valeurs qu'il a
sélectionné soient transmises dans le panier. Si jamais la taille
diffère mais que l'article est le même, alors la valeur ''quantité'' du
premier article ne s'actualise pas et un nouvel article se rajoute.
Les valeurs en question se trouvent dans un "select".
Ca donne :

<select name="taille_dispo" value="#ENV{taille_dispo}">
     <BOUCLE_tailles(POUR){tableau #LISTER_VALEURS**{taille_dispo}}>
         [<option value="#ENV{#VALEUR}">[(#VALEUR)]</option>]
     </BOUCLE_tailles>
</select>

Ici c'est surtout pour que vous puissiez visualiser la chose. Et c'est
donc la valeur sur laquelle se trouve le client qui doit être récupérée.

Et là, je suis dans un brouillard complet.
Sauriez-vous m'éclairez, s'il vous plaît ?

En vous remerciant d'avance,

Victor-Arnaud.

Bonjour,

Bonne question !
Je ne sais pas si ce cas de figure a été prévu par le plugin paniers.

Pour saisir le problème, revoyons comment fonctionnent les paniers.
Un panier est séparé en 2 éléments :

- la panier en lui même dans la table spip_paniers, il contient les trucs de base : identifiant, auteur, cookie, statut et date.

- le contenu du panier dans la table spip_paniers_liens.
A chaque article du panier correspond une ligne dans cette table.
Elle contient 4 colonnes :
  * id_panier : l'identifiant du panier
  * id_objet : l'identifiant de l'objet
  * objet : le type d'objet
  * quantite : comme son nom l'indique

Pour ajouter un objet à un panier, on dispose d'un bouton d'action "remplir_panier", qui accepte 3 paramètres, et pas plus : objet-id_objet-quantite.

Ex:
[(#BOUTON_ACTION{
     'ajouter au panier',
     #URL_ACTION_AUTEUR{remplir_panier,#OBJET-#ID_OBJET,#SELF},
     ajax})]

On voit que ces 3 paramètres correspondent aux données de la ligne qui va être ajoutée (ou mise à jour) dans la table spip_paniers_liens.

Donc voilà le noeud du problème : la table spip_paniers_liens sert à identifier les objets des paniers et leurs quantités, mais il n'y a pas de colonne supplémentaire pour d'autres informations : les variantes (de couleur, de taille, ou d'autre chose) en ce qui nous concerne.
Et de toute façon, le bouton d'action ne prend pas de paramètres supplémentaires pour choisir une de ces hypotétiques variantes.
Qui plus est, ces paramètres doivent être connus à l'avance : au lieu du select, il faudrait un bouton pour chaque variante.

Bon, ça ne veut pas dire que ce n'est pas faisable.
Mais là du coup, je ne suis pas sûr de la bonne solution. Il faudrait contacter l'auteur du plugin pour voir comment "bien" faire.
En attendant, voilà une proposition, à brûle-pourpoint :

1) Ajouter 2 champs "taille" et "couleur" à la table spip_paniers_liens
Ca ne va pas être possible depuis l'interface des champs extras puisque c'est une table "technique" et du coup elle n'apparaîtra pas dans la liste des objets modifiables. Il faut utiliser directement l'API.

2) Au lieu d'utiliser un bouton d'action, il faut utiliser un formulaire (à créer).
Le formulaire doit avoir au moins 2 paramètres "objet" et "id_objet", et contenir les 2 sélecteurs de variante : "taille" et "couleur" (et éventuellement 'quantite').
ex : #FORMULAIRE_REMPLIR_PANIER{#OBJET,#ID_OBJET,#SELF}

Dans la fonction traiter, tu récupères dans un premier temps les traitements de l'action "remplir_panier". Ca va ajouter/mettre à jour l'objet dans le panier comme si le bouton d'action avait été utilisé.
Ensuite, il ne reste plus qu'à mettre à jour la ligne de l'objet en indiquant les variantes.
Ca pourrait ressembler à ça :

function formulaires_remplir_panier($objet='', $id_objet=0, $retour=''){

$res=array();

// on récupère le traitement normal du bouton d'action
// ajoute/met à jour la ligne correspondant à l'objet dans spip_paniers_liens
$quantite = _request('quantite');
$remplir_panier = charger_fonction('remplir_panier','action');
$remplir_panier($objet,$id_objet,$quantite);

// ensuite, s'occuper des variantes
// met à jour la ligne correspondant à l'objet dans spip_paniers_liens pour les champ 'taille' et 'couleur'
include_spip('inc/session');
$id_panier = session_get('id_panier'); // id du panier en cours
$set = array('taille'=>_request('taille'), 'couleur'=>_request('couleur')); // valeurs des variantes
sql_updateq(
     'spip_paniers_liens',
     $set,
     'id_panier='.$id_panier.' and objet='.sql_quote($objet).' and id_objet='.$id_objet
);

if ($retour) $res['redirect'] = $retour;

return $res;

}

Bon, c'est au plus simple, il n'y a pas les messages de succès et d'erreur ni rien, mais c'est pour l'exemple.

Cela dit, je répète, c'est une bonne question ! J'essaierai de voir avec l'auteur du plugin pour voir ce qu'il en pense.

C.R

Le 21/05/2014 00:24, Victor-A MARCHISET a écrit :

Bonsoir,

Il y a quelques semaines, j'ai lancé un appel à l'aide pour la mise en
place d'un Panier ainsi que le système de Bon de Commandes. Ca, c'est
fonctionnel, grâce à l'aide précieuse de Nathalie.

MAIS !

Ce serait trop simple, forcément. Dans le panier doivent apparaître la
taille du produit (taille ou pointure, selon produit), et la couleur en
plus de ce qu'il y a de base (titre, prix, quantité, prix+quantité).
Il y a également un deuxième prix à rajouter, ça en bidouillant en tant
que codeur du dimanche, c'est passé et c'est fonctionnel.
Mais reste le coup des tailles/pointures/couleurs.
Je regarde le PHP, et même si j'arrive plus ou moins à comprendre ce qui
en ressort du code général, je reste impuissant...

Les valeurs taille, etc, sont données grâce aux Champs Extras. Quand le
client clique sur "ajouter au panier", il faut que les valeurs qu'il a
sélectionné soient transmises dans le panier. Si jamais la taille
diffère mais que l'article est le même, alors la valeur ''quantité'' du
premier article ne s'actualise pas et un nouvel article se rajoute.
Les valeurs en question se trouvent dans un "select".
Ca donne :

<select name="taille_dispo" value="#ENV{taille_dispo}">
     <BOUCLE_tailles(POUR){tableau #LISTER_VALEURS**{taille_dispo}}>
         [<option value="#ENV{#VALEUR}">[(#VALEUR)]</option>]
     </BOUCLE_tailles>
</select>

Ici c'est surtout pour que vous puissiez visualiser la chose. Et c'est
donc la valeur sur laquelle se trouve le client qui doit être récupérée.

Et là, je suis dans un brouillard complet.
Sauriez-vous m'éclairez, s'il vous plaît ?

En vous remerciant d'avance,

Victor-Arnaud.

Je pense que vous n'appréhendez pas bien le problème (panier/commande/paiement)
Le panier c'est donc le caddie qui sert à prendre soit le short noir taille 48 et le short noir taille 50 et le short rouge taille 48.
Ce sont bien 3 articles différents. 2 noirs mais différents dans la taille et un rouge mais identique dans la taille.
Ensuite en regardant bien et c'est pas trop compliqué comment est construit panier, on peut ajouter des champs extras et des <td><tr> dans la table du panier pour obtenir soit une image, soit une référence, soit ce que l'on souhaite par le biais d'un champs Xtras!
Enfin pour finir, tout objet spip (ou presque) peuvent être mis en panier..articles, brèves, auteurs?? je ne sais pas? mais aussi celui que vous allez créer grâce au plugin qui permet de construire des plugins!!
J'ai déjà fait 3 boutiques en lignes, avec ça, voir 4 dont 2 sont multilingues!
Donc commencez doucement avec le panier, puis regardez bien la base de données pour commande et vous comprendrez vite.
BB

Charles Razack a écrit :

Bonjour,

Bonne question !
Je ne sais pas si ce cas de figure a été prévu par le plugin paniers.

Pour saisir le problème, revoyons comment fonctionnent les paniers.
Un panier est séparé en 2 éléments :

- la panier en lui même dans la table spip_paniers, il contient les trucs de base : identifiant, auteur, cookie, statut et date.

- le contenu du panier dans la table spip_paniers_liens.
A chaque article du panier correspond une ligne dans cette table.
Elle contient 4 colonnes :
* id_panier : l'identifiant du panier
* id_objet : l'identifiant de l'objet
* objet : le type d'objet
* quantite : comme son nom l'indique

Pour ajouter un objet à un panier, on dispose d'un bouton d'action "remplir_panier", qui accepte 3 paramètres, et pas plus : objet-id_objet-quantite.

Ex:
[(#BOUTON_ACTION{
    'ajouter au panier',
    #URL_ACTION_AUTEUR{remplir_panier,#OBJET-#ID_OBJET,#SELF},
    ajax})]

On voit que ces 3 paramètres correspondent aux données de la ligne qui va être ajoutée (ou mise à jour) dans la table spip_paniers_liens.

Donc voilà le noeud du problème : la table spip_paniers_liens sert à identifier les objets des paniers et leurs quantités, mais il n'y a pas de colonne supplémentaire pour d'autres informations : les variantes (de couleur, de taille, ou d'autre chose) en ce qui nous concerne.
Et de toute façon, le bouton d'action ne prend pas de paramètres supplémentaires pour choisir une de ces hypotétiques variantes.
Qui plus est, ces paramètres doivent être connus à l'avance : au lieu du select, il faudrait un bouton pour chaque variante.

Bon, ça ne veut pas dire que ce n'est pas faisable.
Mais là du coup, je ne suis pas sûr de la bonne solution. Il faudrait contacter l'auteur du plugin pour voir comment "bien" faire.
En attendant, voilà une proposition, à brûle-pourpoint :

1) Ajouter 2 champs "taille" et "couleur" à la table spip_paniers_liens
Ca ne va pas être possible depuis l'interface des champs extras puisque c'est une table "technique" et du coup elle n'apparaîtra pas dans la liste des objets modifiables. Il faut utiliser directement l'API.

2) Au lieu d'utiliser un bouton d'action, il faut utiliser un formulaire (à créer).
Le formulaire doit avoir au moins 2 paramètres "objet" et "id_objet", et contenir les 2 sélecteurs de variante : "taille" et "couleur" (et éventuellement 'quantite').
ex : #FORMULAIRE_REMPLIR_PANIER{#OBJET,#ID_OBJET,#SELF}

Dans la fonction traiter, tu récupères dans un premier temps les traitements de l'action "remplir_panier". Ca va ajouter/mettre à jour l'objet dans le panier comme si le bouton d'action avait été utilisé.
Ensuite, il ne reste plus qu'à mettre à jour la ligne de l'objet en indiquant les variantes.
Ca pourrait ressembler à ça :

function formulaires_remplir_panier($objet='', $id_objet=0, $retour=''){

$res=array();

// on récupère le traitement normal du bouton d'action
// ajoute/met à jour la ligne correspondant à l'objet dans spip_paniers_liens
$quantite = _request('quantite');
$remplir_panier = charger_fonction('remplir_panier','action');
$remplir_panier($objet,$id_objet,$quantite);

// ensuite, s'occuper des variantes
// met à jour la ligne correspondant à l'objet dans spip_paniers_liens pour les champ 'taille' et 'couleur'
include_spip('inc/session');
$id_panier = session_get('id_panier'); // id du panier en cours
$set = array('taille'=>_request('taille'), 'couleur'=>_request('couleur')); // valeurs des variantes
sql_updateq(
    'spip_paniers_liens',
    $set,
    'id_panier='.$id_panier.' and objet='.sql_quote($objet).' and id_objet='.$id_objet
);

if ($retour) $res['redirect'] = $retour;

return $res;

}

Bon, c'est au plus simple, il n'y a pas les messages de succès et d'erreur ni rien, mais c'est pour l'exemple.

Cela dit, je répète, c'est une bonne question ! J'essaierai de voir avec l'auteur du plugin pour voir ce qu'il en pense.

C.R

Le 21/05/2014 00:24, Victor-A MARCHISET a écrit :

Bonsoir,

Il y a quelques semaines, j'ai lancé un appel à l'aide pour la mise en
place d'un Panier ainsi que le système de Bon de Commandes. Ca, c'est
fonctionnel, grâce à l'aide précieuse de Nathalie.

MAIS !

Ce serait trop simple, forcément. Dans le panier doivent apparaître la
taille du produit (taille ou pointure, selon produit), et la couleur en
plus de ce qu'il y a de base (titre, prix, quantité, prix+quantité).
Il y a également un deuxième prix à rajouter, ça en bidouillant en tant
que codeur du dimanche, c'est passé et c'est fonctionnel.
Mais reste le coup des tailles/pointures/couleurs.
Je regarde le PHP, et même si j'arrive plus ou moins à comprendre ce qui
en ressort du code général, je reste impuissant...

Les valeurs taille, etc, sont données grâce aux Champs Extras. Quand le
client clique sur "ajouter au panier", il faut que les valeurs qu'il a
sélectionné soient transmises dans le panier. Si jamais la taille
diffère mais que l'article est le même, alors la valeur ''quantité'' du
premier article ne s'actualise pas et un nouvel article se rajoute.
Les valeurs en question se trouvent dans un "select".
Ca donne :

<select name="taille_dispo" value="#ENV{taille_dispo}">
     <BOUCLE_tailles(POUR){tableau #LISTER_VALEURS**{taille_dispo}}>
         [<option value="#ENV{#VALEUR}">[(#VALEUR)]</option>]
     </BOUCLE_tailles>
</select>

Ici c'est surtout pour que vous puissiez visualiser la chose. Et c'est
donc la valeur sur laquelle se trouve le client qui doit être récupérée.

Et là, je suis dans un brouillard complet.
Sauriez-vous m'éclairez, s'il vous plaît ?

En vous remerciant d'avance,

Victor-Arnaud.

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Oui, mais là vous parlez d'une autre façon d'aborder le problème, qui n'est pas celle qu'a choisie la personne qui a posé la question.

Votre méthode consiste à enregistrer en base un produit différent pour chaque variante.
C'est jouable dans la mesure ou il y a peu de variantes, mais à partir d'un certain nombre, ce n'est plus du tout pratique, voir ingérable.
Pour reprendre l'exemple du short, imaginez qu'il y ait 5 tailles et 10 couleurs différentes : ça vous oblige à enregistrer 50 shorts différents dans la base.

Une autre méthode, c'est un seul produit enregistré en base, avec des champs extras pour chaque type de variantes (taille, couleur). Et à ma connaissance, le plugin paniers ne permet pas "nativement" d'enregistrer ces informations supplémentaires lors de la constitution d'un panier.
La question posait sur ce point-là, et ce n'est pas si facile à résoudre.

Le 21/05/2014 23:09, Bernard Blazin a écrit :

Je pense que vous n'appréhendez pas bien le problème
(panier/commande/paiement)
Le panier c'est donc le caddie qui sert à prendre soit le short noir
taille 48 et le short noir taille 50 et le short rouge taille 48.
Ce sont bien 3 articles différents. 2 noirs mais différents dans la
taille et un rouge mais identique dans la taille.
Ensuite en regardant bien et c'est pas trop compliqué comment est
construit panier, on peut ajouter des champs extras et des <td><tr> dans
la table du panier pour obtenir soit une image, soit une référence, soit
ce que l'on souhaite par le biais d'un champs Xtras!
Enfin pour finir, tout objet spip (ou presque) peuvent être mis en
panier..articles, brèves, auteurs?? je ne sais pas? mais aussi celui que
vous allez créer grâce au plugin qui permet de construire des plugins!!
J'ai déjà fait 3 boutiques en lignes, avec ça, voir 4 dont 2 sont
multilingues!
Donc commencez doucement avec le panier, puis regardez bien la base de
données pour commande et vous comprendrez vite.
BB

Charles Razack a écrit :

Bonjour,

Bonne question !
Je ne sais pas si ce cas de figure a été prévu par le plugin paniers.

Pour saisir le problème, revoyons comment fonctionnent les paniers.
Un panier est séparé en 2 éléments :

- la panier en lui même dans la table spip_paniers, il contient les
trucs de base : identifiant, auteur, cookie, statut et date.

- le contenu du panier dans la table spip_paniers_liens.
A chaque article du panier correspond une ligne dans cette table.
Elle contient 4 colonnes :
* id_panier : l'identifiant du panier
* id_objet : l'identifiant de l'objet
* objet : le type d'objet
* quantite : comme son nom l'indique

Pour ajouter un objet à un panier, on dispose d'un bouton d'action
"remplir_panier", qui accepte 3 paramètres, et pas plus :
objet-id_objet-quantite.

Ex:
[(#BOUTON_ACTION{
    'ajouter au panier',
    #URL_ACTION_AUTEUR{remplir_panier,#OBJET-#ID_OBJET,#SELF},
    ajax})]

On voit que ces 3 paramètres correspondent aux données de la ligne qui
va être ajoutée (ou mise à jour) dans la table spip_paniers_liens.

Donc voilà le noeud du problème : la table spip_paniers_liens sert à
identifier les objets des paniers et leurs quantités, mais il n'y a
pas de colonne supplémentaire pour d'autres informations : les
variantes (de couleur, de taille, ou d'autre chose) en ce qui nous
concerne.
Et de toute façon, le bouton d'action ne prend pas de paramètres
supplémentaires pour choisir une de ces hypotétiques variantes.
Qui plus est, ces paramètres doivent être connus à l'avance : au lieu
du select, il faudrait un bouton pour chaque variante.

Bon, ça ne veut pas dire que ce n'est pas faisable.
Mais là du coup, je ne suis pas sûr de la bonne solution. Il faudrait
contacter l'auteur du plugin pour voir comment "bien" faire.
En attendant, voilà une proposition, à brûle-pourpoint :

1) Ajouter 2 champs "taille" et "couleur" à la table spip_paniers_liens
Ca ne va pas être possible depuis l'interface des champs extras
puisque c'est une table "technique" et du coup elle n'apparaîtra pas
dans la liste des objets modifiables. Il faut utiliser directement l'API.

2) Au lieu d'utiliser un bouton d'action, il faut utiliser un
formulaire (à créer).
Le formulaire doit avoir au moins 2 paramètres "objet" et "id_objet",
et contenir les 2 sélecteurs de variante : "taille" et "couleur" (et
éventuellement 'quantite').
ex : #FORMULAIRE_REMPLIR_PANIER{#OBJET,#ID_OBJET,#SELF}

Dans la fonction traiter, tu récupères dans un premier temps les
traitements de l'action "remplir_panier". Ca va ajouter/mettre à jour
l'objet dans le panier comme si le bouton d'action avait été utilisé.
Ensuite, il ne reste plus qu'à mettre à jour la ligne de l'objet en
indiquant les variantes.
Ca pourrait ressembler à ça :

function formulaires_remplir_panier($objet='', $id_objet=0, $retour=''){

$res=array();

// on récupère le traitement normal du bouton d'action
// ajoute/met à jour la ligne correspondant à l'objet dans
spip_paniers_liens
$quantite = _request('quantite');
$remplir_panier = charger_fonction('remplir_panier','action');
$remplir_panier($objet,$id_objet,$quantite);

// ensuite, s'occuper des variantes
// met à jour la ligne correspondant à l'objet dans spip_paniers_liens
pour les champ 'taille' et 'couleur'
include_spip('inc/session');
$id_panier = session_get('id_panier'); // id du panier en cours
$set = array('taille'=>_request('taille'),
'couleur'=>_request('couleur')); // valeurs des variantes
sql_updateq(
    'spip_paniers_liens',
    $set,
    'id_panier='.$id_panier.' and objet='.sql_quote($objet).' and
id_objet='.$id_objet
);

if ($retour) $res['redirect'] = $retour;

return $res;

}

Bon, c'est au plus simple, il n'y a pas les messages de succès et
d'erreur ni rien, mais c'est pour l'exemple.

Cela dit, je répète, c'est une bonne question ! J'essaierai de voir
avec l'auteur du plugin pour voir ce qu'il en pense.

C.R

Le 21/05/2014 00:24, Victor-A MARCHISET a écrit :

Bonsoir,

Il y a quelques semaines, j'ai lancé un appel à l'aide pour la mise en
place d'un Panier ainsi que le système de Bon de Commandes. Ca, c'est
fonctionnel, grâce à l'aide précieuse de Nathalie.

MAIS !

Ce serait trop simple, forcément. Dans le panier doivent apparaître la
taille du produit (taille ou pointure, selon produit), et la couleur en
plus de ce qu'il y a de base (titre, prix, quantité, prix+quantité).
Il y a également un deuxième prix à rajouter, ça en bidouillant en tant
que codeur du dimanche, c'est passé et c'est fonctionnel.
Mais reste le coup des tailles/pointures/couleurs.
Je regarde le PHP, et même si j'arrive plus ou moins à comprendre ce qui
en ressort du code général, je reste impuissant...

Les valeurs taille, etc, sont données grâce aux Champs Extras. Quand le
client clique sur "ajouter au panier", il faut que les valeurs qu'il a
sélectionné soient transmises dans le panier. Si jamais la taille
diffère mais que l'article est le même, alors la valeur ''quantité'' du
premier article ne s'actualise pas et un nouvel article se rajoute.
Les valeurs en question se trouvent dans un "select".
Ca donne :

<select name="taille_dispo" value="#ENV{taille_dispo}">
     <BOUCLE_tailles(POUR){tableau #LISTER_VALEURS**{taille_dispo}}>
         [<option value="#ENV{#VALEUR}">[(#VALEUR)]</option>]
     </BOUCLE_tailles>
</select>

Ici c'est surtout pour que vous puissiez visualiser la chose. Et c'est
donc la valeur sur laquelle se trouve le client qui doit être récupérée.

Et là, je suis dans un brouillard complet.
Sauriez-vous m'éclairez, s'il vous plaît ?

En vous remerciant d'avance,

Victor-Arnaud.

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Bonjour,

Je ne vois pas en quoi mon système est plus ingérable que de prendre des articles. Un article par définition SPIP est un ensemble éditorial et non un produit du commerce. Personnellement je préfère cloisonner les choses pour des attributions bien définies.
Mais peut_être ais_je mal compris la demande initiale?
Pourquoi ne pas rajouter dans des xtras de spip_panier_liens les tailles, couleurs etc?
Si nativement ce n'est pas prévu il est toujours possible dans panier_administrations, de faire l'ajout de ces champs extras ainsi que dans /base/ du plugin. Certes il faut mettre les mains dans le cambouis, mais c'est la seule solution que je vois raisonnablement.
BB
Charles Razack a écrit :

Oui, mais là vous parlez d'une autre façon d'aborder le problème, qui n'est pas celle qu'a choisie la personne qui a posé la question.

Votre méthode consiste à enregistrer en base un produit différent pour chaque variante.
C'est jouable dans la mesure ou il y a peu de variantes, mais à partir d'un certain nombre, ce n'est plus du tout pratique, voir ingérable.
Pour reprendre l'exemple du short, imaginez qu'il y ait 5 tailles et 10 couleurs différentes : ça vous oblige à enregistrer 50 shorts différents dans la base.

Une autre méthode, c'est un seul produit enregistré en base, avec des champs extras pour chaque type de variantes (taille, couleur). Et à ma connaissance, le plugin paniers ne permet pas "nativement" d'enregistrer ces informations supplémentaires lors de la constitution d'un panier.
La question posait sur ce point-là, et ce n'est pas si facile à résoudre.

Le 21/05/2014 23:09, Bernard Blazin a écrit :

Je pense que vous n'appréhendez pas bien le problème
(panier/commande/paiement)
Le panier c'est donc le caddie qui sert à prendre soit le short noir
taille 48 et le short noir taille 50 et le short rouge taille 48.
Ce sont bien 3 articles différents. 2 noirs mais différents dans la
taille et un rouge mais identique dans la taille.
Ensuite en regardant bien et c'est pas trop compliqué comment est
construit panier, on peut ajouter des champs extras et des <td><tr> dans
la table du panier pour obtenir soit une image, soit une référence, soit
ce que l'on souhaite par le biais d'un champs Xtras!
Enfin pour finir, tout objet spip (ou presque) peuvent être mis en
panier..articles, brèves, auteurs?? je ne sais pas? mais aussi celui que
vous allez créer grâce au plugin qui permet de construire des plugins!!
J'ai déjà fait 3 boutiques en lignes, avec ça, voir 4 dont 2 sont
multilingues!
Donc commencez doucement avec le panier, puis regardez bien la base de
données pour commande et vous comprendrez vite.
BB

Charles Razack a écrit :

Bonjour,

Bonne question !
Je ne sais pas si ce cas de figure a été prévu par le plugin paniers.

Pour saisir le problème, revoyons comment fonctionnent les paniers.
Un panier est séparé en 2 éléments :

- la panier en lui même dans la table spip_paniers, il contient les
trucs de base : identifiant, auteur, cookie, statut et date.

- le contenu du panier dans la table spip_paniers_liens.
A chaque article du panier correspond une ligne dans cette table.
Elle contient 4 colonnes :
* id_panier : l'identifiant du panier
* id_objet : l'identifiant de l'objet
* objet : le type d'objet
* quantite : comme son nom l'indique

Pour ajouter un objet à un panier, on dispose d'un bouton d'action
"remplir_panier", qui accepte 3 paramètres, et pas plus :
objet-id_objet-quantite.

Ex:
[(#BOUTON_ACTION{
    'ajouter au panier',
    #URL_ACTION_AUTEUR{remplir_panier,#OBJET-#ID_OBJET,#SELF},
    ajax})]

On voit que ces 3 paramètres correspondent aux données de la ligne qui
va être ajoutée (ou mise à jour) dans la table spip_paniers_liens.

Donc voilà le noeud du problème : la table spip_paniers_liens sert à
identifier les objets des paniers et leurs quantités, mais il n'y a
pas de colonne supplémentaire pour d'autres informations : les
variantes (de couleur, de taille, ou d'autre chose) en ce qui nous
concerne.
Et de toute façon, le bouton d'action ne prend pas de paramètres
supplémentaires pour choisir une de ces hypotétiques variantes.
Qui plus est, ces paramètres doivent être connus à l'avance : au lieu
du select, il faudrait un bouton pour chaque variante.

Bon, ça ne veut pas dire que ce n'est pas faisable.
Mais là du coup, je ne suis pas sûr de la bonne solution. Il faudrait
contacter l'auteur du plugin pour voir comment "bien" faire.
En attendant, voilà une proposition, à brûle-pourpoint :

1) Ajouter 2 champs "taille" et "couleur" à la table spip_paniers_liens
Ca ne va pas être possible depuis l'interface des champs extras
puisque c'est une table "technique" et du coup elle n'apparaîtra pas
dans la liste des objets modifiables. Il faut utiliser directement l'API.

2) Au lieu d'utiliser un bouton d'action, il faut utiliser un
formulaire (à créer).
Le formulaire doit avoir au moins 2 paramètres "objet" et "id_objet",
et contenir les 2 sélecteurs de variante : "taille" et "couleur" (et
éventuellement 'quantite').
ex : #FORMULAIRE_REMPLIR_PANIER{#OBJET,#ID_OBJET,#SELF}

Dans la fonction traiter, tu récupères dans un premier temps les
traitements de l'action "remplir_panier". Ca va ajouter/mettre à jour
l'objet dans le panier comme si le bouton d'action avait été utilisé.
Ensuite, il ne reste plus qu'à mettre à jour la ligne de l'objet en
indiquant les variantes.
Ca pourrait ressembler à ça :

function formulaires_remplir_panier($objet='', $id_objet=0, $retour=''){

$res=array();

// on récupère le traitement normal du bouton d'action
// ajoute/met à jour la ligne correspondant à l'objet dans
spip_paniers_liens
$quantite = _request('quantite');
$remplir_panier = charger_fonction('remplir_panier','action');
$remplir_panier($objet,$id_objet,$quantite);

// ensuite, s'occuper des variantes
// met à jour la ligne correspondant à l'objet dans spip_paniers_liens
pour les champ 'taille' et 'couleur'
include_spip('inc/session');
$id_panier = session_get('id_panier'); // id du panier en cours
$set = array('taille'=>_request('taille'),
'couleur'=>_request('couleur')); // valeurs des variantes
sql_updateq(
    'spip_paniers_liens',
    $set,
    'id_panier='.$id_panier.' and objet='.sql_quote($objet).' and
id_objet='.$id_objet
);

if ($retour) $res['redirect'] = $retour;

return $res;

}

Bon, c'est au plus simple, il n'y a pas les messages de succès et
d'erreur ni rien, mais c'est pour l'exemple.

Cela dit, je répète, c'est une bonne question ! J'essaierai de voir
avec l'auteur du plugin pour voir ce qu'il en pense.

C.R

Le 21/05/2014 00:24, Victor-A MARCHISET a écrit :

Bonsoir,

Il y a quelques semaines, j'ai lancé un appel à l'aide pour la mise en
place d'un Panier ainsi que le système de Bon de Commandes. Ca, c'est
fonctionnel, grâce à l'aide précieuse de Nathalie.

MAIS !

Ce serait trop simple, forcément. Dans le panier doivent apparaître la
taille du produit (taille ou pointure, selon produit), et la couleur en
plus de ce qu'il y a de base (titre, prix, quantité, prix+quantité).
Il y a également un deuxième prix à rajouter, ça en bidouillant en tant
que codeur du dimanche, c'est passé et c'est fonctionnel.
Mais reste le coup des tailles/pointures/couleurs.
Je regarde le PHP, et même si j'arrive plus ou moins à comprendre ce qui
en ressort du code général, je reste impuissant...

Les valeurs taille, etc, sont données grâce aux Champs Extras. Quand le
client clique sur "ajouter au panier", il faut que les valeurs qu'il a
sélectionné soient transmises dans le panier. Si jamais la taille
diffère mais que l'article est le même, alors la valeur ''quantité'' du
premier article ne s'actualise pas et un nouvel article se rajoute.
Les valeurs en question se trouvent dans un "select".
Ca donne :

<select name="taille_dispo" value="#ENV{taille_dispo}">
     <BOUCLE_tailles(POUR){tableau #LISTER_VALEURS**{taille_dispo}}>
         [<option value="#ENV{#VALEUR}">[(#VALEUR)]</option>]
     </BOUCLE_tailles>
</select>

Ici c'est surtout pour que vous puissiez visualiser la chose. Et c'est
donc la valeur sur laquelle se trouve le client qui doit être récupérée.

Et là, je suis dans un brouillard complet.
Sauriez-vous m'éclairez, s'il vous plaît ?

En vous remerciant d'avance,

Victor-Arnaud.

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Le 21/05/2014 23:58, Charles Razack a écrit :

Oui, mais là vous parlez d'une autre façon d'aborder le problème, qui
n'est pas celle qu'a choisie la personne qui a posé la question.

Votre méthode consiste à enregistrer en base un produit différent pour
chaque variante.
C'est jouable dans la mesure ou il y a peu de variantes, mais à partir
d'un certain nombre, ce n'est plus du tout pratique, voir ingérable.
Pour reprendre l'exemple du short, imaginez qu'il y ait 5 tailles et 10
couleurs différentes : ça vous oblige à enregistrer 50 shorts différents
dans la base.

C'est pourtant ce qui se pratique généralement car cela permet une meilleure gestion des stocks. Sinon, comment savoir qu'il n'y a plus de shorts noirs en taille L et encore une cinquantaine de rose en taille S ? Et du coup cela facilite les analyses des ventes.

Prenons un exemple que je connais pour l'avoir pratiqué : une boutique de laine et de mercerie. Chaque coloris de pelote dans une gamme a droit a sa référence, chaque taille de bouton et chaque couleur de bouton pourtant de formes identiques a droit à sa référence, une paire d'aiguille à tricoter en bambou N°3 aura sa référence à elle de même que sa cousine N°3.5 en bambou et ainsi de suite.

--
Ysabeau

Bonjour,

Je mets un peu de temps à répondre, j'en suis désolé. Et je vous remercie pour vos réponses =)

Je n'ai même pas pensé à aller voir du côté de la BDD, je me sens un peu bête...d'un autre côté c'est logique, car en regardant un peu le php et en testant 2-3 trucs j'étais mis au courant que la liaison SQL n'était pas faisable. Il me faut réfléchir un peu plus je pense.

Je n'ai encore rien testé, par manque de temps, cependant vos propositions ravivent ma motivation !

Hum, afin de mieux éclaircir ma problématique, voici comment sont les articles et leur contenu :

Ils ont des champs extras. Il y aura un prix français et un prix export, taille de vêtement, de gilet et de gants, pointure de chaussures et les couleurs.
Les rédacteurs qui saisiront les articles ne le feront que pour un article et ses variantes, je pars donc du principe qu'il ne pourra y avoir qu'un seul type de taille et les couleurs.

En ligne, l'article donnera ceci :

Nom article
Prix selon type d'acheteur (déjà fait)
Taille
Couleur
Quantité
Ajouter au panier

Donc, en fonction de la sélection du client, l'article sera rajouté. Effectivement, il y aura le fait que le t-shirt noir XL sera différent du t-shirt noir XS, mais ces valeurs seront contenues dans un même article. Comme l'a dit Charles, cela revient démultiplier l'article pour ses variantes dans la base de données.

Je suis allé jeter un coup d'oeil rapide au fichier dans /base/ ainsi que la BDD, et cela m'a l'air abordable...je sens que que je vais fonctionner à grand coup de backups de ma BDD tellement je vais y mettre le dawa ^^

En tout cas, une fois ce problème résolu, il faudra en faire profiter ceux qui essayent / essayeront de faire la même.

Merci encore pour vos réponses!

ps: je viens de voir une nouvelle parution, donc j'ai envoyé ce mail sans avoir lu la réponse de Nathalie et de Ysabeau.

Le 22/05/2014 11:57, Bernard Blazin a écrit :

Bonjour,

Je ne vois pas en quoi mon système est plus ingérable que de prendre des articles. Un article par définition SPIP est un ensemble éditorial et non un produit du commerce. Personnellement je préfère cloisonner les choses pour des attributions bien définies.
Mais peut_être ais_je mal compris la demande initiale?
Pourquoi ne pas rajouter dans des xtras de spip_panier_liens les tailles, couleurs etc?
Si nativement ce n'est pas prévu il est toujours possible dans panier_administrations, de faire l'ajout de ces champs extras ainsi que dans /base/ du plugin. Certes il faut mettre les mains dans le cambouis, mais c'est la seule solution que je vois raisonnablement.
BB
Charles Razack a écrit :

Oui, mais là vous parlez d'une autre façon d'aborder le problème, qui n'est pas celle qu'a choisie la personne qui a posé la question.

Votre méthode consiste à enregistrer en base un produit différent pour chaque variante.
C'est jouable dans la mesure ou il y a peu de variantes, mais à partir d'un certain nombre, ce n'est plus du tout pratique, voir ingérable.
Pour reprendre l'exemple du short, imaginez qu'il y ait 5 tailles et 10 couleurs différentes : ça vous oblige à enregistrer 50 shorts différents dans la base.

Une autre méthode, c'est un seul produit enregistré en base, avec des champs extras pour chaque type de variantes (taille, couleur). Et à ma connaissance, le plugin paniers ne permet pas "nativement" d'enregistrer ces informations supplémentaires lors de la constitution d'un panier.
La question posait sur ce point-là, et ce n'est pas si facile à résoudre.

Le 21/05/2014 23:09, Bernard Blazin a écrit :

Je pense que vous n'appréhendez pas bien le problème
(panier/commande/paiement)
Le panier c'est donc le caddie qui sert à prendre soit le short noir
taille 48 et le short noir taille 50 et le short rouge taille 48.
Ce sont bien 3 articles différents. 2 noirs mais différents dans la
taille et un rouge mais identique dans la taille.
Ensuite en regardant bien et c'est pas trop compliqué comment est
construit panier, on peut ajouter des champs extras et des <td><tr> dans
la table du panier pour obtenir soit une image, soit une référence, soit
ce que l'on souhaite par le biais d'un champs Xtras!
Enfin pour finir, tout objet spip (ou presque) peuvent être mis en
panier..articles, brèves, auteurs?? je ne sais pas? mais aussi celui que
vous allez créer grâce au plugin qui permet de construire des plugins!!
J'ai déjà fait 3 boutiques en lignes, avec ça, voir 4 dont 2 sont
multilingues!
Donc commencez doucement avec le panier, puis regardez bien la base de
données pour commande et vous comprendrez vite.
BB

Charles Razack a écrit :

Bonjour,

Bonne question !
Je ne sais pas si ce cas de figure a été prévu par le plugin paniers.

Pour saisir le problème, revoyons comment fonctionnent les paniers.
Un panier est séparé en 2 éléments :

- la panier en lui même dans la table spip_paniers, il contient les
trucs de base : identifiant, auteur, cookie, statut et date.

- le contenu du panier dans la table spip_paniers_liens.
A chaque article du panier correspond une ligne dans cette table.
Elle contient 4 colonnes :
* id_panier : l'identifiant du panier
* id_objet : l'identifiant de l'objet
* objet : le type d'objet
* quantite : comme son nom l'indique

Pour ajouter un objet à un panier, on dispose d'un bouton d'action
"remplir_panier", qui accepte 3 paramètres, et pas plus :
objet-id_objet-quantite.

Ex:
[(#BOUTON_ACTION{
    'ajouter au panier',
#URL_ACTION_AUTEUR{remplir_panier,#OBJET-#ID_OBJET,#SELF},
    ajax})]

On voit que ces 3 paramètres correspondent aux données de la ligne qui
va être ajoutée (ou mise à jour) dans la table spip_paniers_liens.

Donc voilà le noeud du problème : la table spip_paniers_liens sert à
identifier les objets des paniers et leurs quantités, mais il n'y a
pas de colonne supplémentaire pour d'autres informations : les
variantes (de couleur, de taille, ou d'autre chose) en ce qui nous
concerne.
Et de toute façon, le bouton d'action ne prend pas de paramètres
supplémentaires pour choisir une de ces hypotétiques variantes.
Qui plus est, ces paramètres doivent être connus à l'avance : au lieu
du select, il faudrait un bouton pour chaque variante.

Bon, ça ne veut pas dire que ce n'est pas faisable.
Mais là du coup, je ne suis pas sûr de la bonne solution. Il faudrait
contacter l'auteur du plugin pour voir comment "bien" faire.
En attendant, voilà une proposition, à brûle-pourpoint :

1) Ajouter 2 champs "taille" et "couleur" à la table spip_paniers_liens
Ca ne va pas être possible depuis l'interface des champs extras
puisque c'est une table "technique" et du coup elle n'apparaîtra pas
dans la liste des objets modifiables. Il faut utiliser directement l'API.

2) Au lieu d'utiliser un bouton d'action, il faut utiliser un
formulaire (à créer).
Le formulaire doit avoir au moins 2 paramètres "objet" et "id_objet",
et contenir les 2 sélecteurs de variante : "taille" et "couleur" (et
éventuellement 'quantite').
ex : #FORMULAIRE_REMPLIR_PANIER{#OBJET,#ID_OBJET,#SELF}

Dans la fonction traiter, tu récupères dans un premier temps les
traitements de l'action "remplir_panier". Ca va ajouter/mettre à jour
l'objet dans le panier comme si le bouton d'action avait été utilisé.
Ensuite, il ne reste plus qu'à mettre à jour la ligne de l'objet en
indiquant les variantes.
Ca pourrait ressembler à ça :

function formulaires_remplir_panier($objet='', $id_objet=0, $retour=''){

$res=array();

// on récupère le traitement normal du bouton d'action
// ajoute/met à jour la ligne correspondant à l'objet dans
spip_paniers_liens
$quantite = _request('quantite');
$remplir_panier = charger_fonction('remplir_panier','action');
$remplir_panier($objet,$id_objet,$quantite);

// ensuite, s'occuper des variantes
// met à jour la ligne correspondant à l'objet dans spip_paniers_liens
pour les champ 'taille' et 'couleur'
include_spip('inc/session');
$id_panier = session_get('id_panier'); // id du panier en cours
$set = array('taille'=>_request('taille'),
'couleur'=>_request('couleur')); // valeurs des variantes
sql_updateq(
    'spip_paniers_liens',
    $set,
    'id_panier='.$id_panier.' and objet='.sql_quote($objet).' and
id_objet='.$id_objet
);

if ($retour) $res['redirect'] = $retour;

return $res;

}

Bon, c'est au plus simple, il n'y a pas les messages de succès et
d'erreur ni rien, mais c'est pour l'exemple.

Cela dit, je répète, c'est une bonne question ! J'essaierai de voir
avec l'auteur du plugin pour voir ce qu'il en pense.

C.R

Le 21/05/2014 00:24, Victor-A MARCHISET a écrit :

Bonsoir,

Il y a quelques semaines, j'ai lancé un appel à l'aide pour la mise en
place d'un Panier ainsi que le système de Bon de Commandes. Ca, c'est
fonctionnel, grâce à l'aide précieuse de Nathalie.

MAIS !

Ce serait trop simple, forcément. Dans le panier doivent apparaître la
taille du produit (taille ou pointure, selon produit), et la couleur en
plus de ce qu'il y a de base (titre, prix, quantité, prix+quantité).
Il y a également un deuxième prix à rajouter, ça en bidouillant en tant
que codeur du dimanche, c'est passé et c'est fonctionnel.
Mais reste le coup des tailles/pointures/couleurs.
Je regarde le PHP, et même si j'arrive plus ou moins à comprendre ce qui
en ressort du code général, je reste impuissant...

Les valeurs taille, etc, sont données grâce aux Champs Extras. Quand le
client clique sur "ajouter au panier", il faut que les valeurs qu'il a
sélectionné soient transmises dans le panier. Si jamais la taille
diffère mais que l'article est le même, alors la valeur ''quantité'' du
premier article ne s'actualise pas et un nouvel article se rajoute.
Les valeurs en question se trouvent dans un "select".
Ca donne :

<select name="taille_dispo" value="#ENV{taille_dispo}">
     <BOUCLE_tailles(POUR){tableau #LISTER_VALEURS**{taille_dispo}}>
         [<option value="#ENV{#VALEUR}">[(#VALEUR)]</option>]
     </BOUCLE_tailles>
</select>

Ici c'est surtout pour que vous puissiez visualiser la chose. Et c'est
donc la valeur sur laquelle se trouve le client qui doit être récupérée.

Et là, je suis dans un brouillard complet.
Sauriez-vous m'éclairez, s'il vous plaît ?

En vous remerciant d'avance,

Victor-Arnaud.

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc