Commandes

Le plugin « commandes » permet de gérer des commandes.

Attention Le plugin ne s’occupe pas de la gestion des paniers, ni des paiements, ni des factures. Pour l’aspect « boutique », voir le post-scriptum.

Ce plugin a été élaboré grâce aux contributions de Matthieu Marcillaud, Rastapopoulos, Yffic, touti, Cyril, et du rédacteur de cet article.

Principe

Le plugin agit sur 2 fronts :
→ d’une part il permet aux utilisateurs de gérer les commandes depuis l’espace privé.
→ d’autre part, il fournit les outils permettants et aux développeurs et aux autres plugins de créer et manipuler des commandes.

Installation et dépendances

Le plugin est repertorié dans le dépôt proposé par défaut : « SPIP-Zone - Plugins ». Aussi, il est installable depuis la page Gestion des plugins, onglet Ajouter des plugins si vous avez activé ce dépôt.

2 dépendances seront installées automatiquement :

  • Saisies
  • API prix : permet de calculer les prix HT et TTC des commandes et de leurs détails.

D’autres plugins sont plus ou moins optionnels, là c’est à vous de voir :

  • Notifications avancées : à installer si on veut bénéficier de l’envoi de notifications par email.
  • Facteur : sans lui, les notifications seront au format texte au lieu d’un joli HTML.
  • Coordonnées : fortement recommandé afin de pouvoir gérer les adresses liées aux commandes (livraison et facturation).
  • Contacts et organisations : peut vous servir à gérer les auteurs/clients des commandes.

Fonctionnement

A l’installation, 2 tables sont créées :

  • La table principale spip_commandes sert à enregistrer les données de base des commandes : l’auteur/client, le numéro de référence, le statut et les dates.
  • La table auxiliaire spip_commandes_details sert à enregistrer les « détails » correspondants aux commandes, c’est à dire tous les éléments à partir desquels on va pouvoir calculer le prix total d’une commande : objets et services commandés, frais annexes, ristournes etc.

En théorie, à chaque commande enregistrée dans la table spip_commandes doit correspondre une ou plusieurs lignes de détails dans la table spip_commandes_details.

La table spip_commandes :
Une commande est un objet éditorial, au même titre que les articles, brèves et cie. Elles ont un auteur (le client), différents statuts et 3 types de dates : date de création, date de paiement & date d’envoi.
La date de création correspond au champ « date », elle est définie à la création de la commande, et n’est pas censée être altérée par la suite.
Le changement d’un statut peut déclencher l’envoi de notifications par email, et la mise à jour de la date s’y rapportant :
→ passer le statut à "payée" met à jour la date de paiement.
→ passer le statut à "envoyée" met à jour la date d’envoi.

composition de la table spip_commandes
id_commande Identifiant unique de la commande
reference Numéro de référence (il ne s’agit pas d’une clé unique).
id_auteur Identifiant de l’auteur/client
statut encours, attente, partiel, paye, envoye, retour_partiel, retour, erreur
date Date de création
date_paiement Date de paiement
date_envoi Date d’envoi
maj Date de la dernière mise à jour

La table spip_commandes_details :
Pour le contenu des commandes, on parle de « détails » : chaque commande est constituée d’une ou plusieurs lignes de détails.
Un détail est tout élément qui participe au prix d’une commande.
On peut distinguer 2 types de détails :

  • Les détails correspondants directement aux objets ou aux services commandés.
  • Les détails « annexes » : il peut s’agir des frais de port, des frais de dossier, des ristournes etc.

Une ligne de détail comprend à minima les champs descriptif et prix_unitaire_ht, le cas échéant complétés par les champs taxe et quantite.
Dans le cas où l’objet commandé est un objet éditorial SPIP, des champs objet et id_objet permettent de l’identifier.

composition de la table spip_commandes_details
id_commandes_detail Identifiant unique du détail (attention au « s » à commandes)
id_commande Identifiant de la commande concernée
descriptif Texte décrivant le détail. S’il s’agit d’un objet éditorial, il peut s’agir de son titre, descriptif ou autre.
quantite Quantité
prix_unitaire_ht Prix Hors Taxe
taxe Taxe (TVA)
statut Statut
objet Type d’objet s’il s’agit d’un objet éditorial
id_objet Identifiant de l’objet s’il s’agit d’un objet éditorial
maj Date de la dernière mise à jour

Exemple des enregistrements en base pour une commande et ses détails

Prenons une commande de 2 objets avec TVA à 20%, comportant des frais de port et une ristourne. Dans la base de donnée, ça nous donne ceci :

1 ligne dans la table spip_commandes

id_commande reference id_auteur statut date date_paiement date_envoi maj
1 xxxxxx 1 encours 2014-05-14 09:00:00 0000-00-00 00:00:00 0000-00-00 00:00:00 2014-05-14 09:00:00

4 lignes dans la table spip_commandes_details

id_commandes

_detail

id_commande descriptif quantite prix

_unitaire_ht

taxe statut objet id_objet maj
1 1 Gibolin 2000 2 8 0.2 produit 1 2014-05-14 09:00:00
2 1 Ripolin 5000 1 12 0.2 produit 2 2014-05-14 09:00:00
3 1 Frais de port 0 4 0 2014-05-14 09:00:00
4 1 Ristourne 0 -2 0 2014-05-14 09:00:00

Boucles et balises

Balises #PRIX et #PRIX_HT

Grâce au plugin API prix, les balises #PRIX et #PRIX_HT permettent d’obtenir automagiquement les prix TTC et HT d’une commande ou d’un de ses détails.

Dans une boucle COMMANDES :

  • #PRIX = somme des prix TTC des détails.
  • #PRIX_HT = somme des prix HT des détails.

Dans une boucle COMMANDES_DETAILS :

  • #PRIX = #QUANTITE * (#PRIX_UNITAIRE_HT + (#TAXE * #PRIX_UNITAIRE_HT))
  • #PRIX_HT = #QUANTITE * #PRIX_UNITAIRE_HT.

Boucles

Exemple minimal de boucle affichant pour chaque commande un résumé de ses détails et son prix total TTC :

<BOUCLE_commandes(COMMANDES)>
<h4>Commande N°#ID_COMMANDE</h4>
<ul><BOUCLE_details(COMMANDES_DETAILS){id_commande}>
<li>[(#QUANTITE) *]#DESCRIPTIF = #PRIX</li>
</BOUCLE_details></ul>
Prix total TTC : #PRIX
</BOUCLE_commandes>

Gestion dans l’espace privé

Configuration
La page de configuration est accessible depuis le menu Configuration > Commandes
On peut y gérer les 3 points suivants :

  • La durée d’expiration des commandes ayant le statut « en cours ». On considère que les commandes restant « en cours » pendant plus d’un certain temps sont des commandes abandonnées : il est inutile de les conserver dans la base.
  • l’activation et le fonctionnement des notifications (cf. plus bas).
  • L’affichage en page d’accueil de la liste des commandes « actives » (cf. plus bas).

Liste des commandes
Une page Commandes est accessible depuis le menu Edition.
L’encart à gauche sert à filtrer les commandes en fonction de leurs états, de leurs dates de création, et des auteurs/clients.
Au niveau de la liste, les commandes ayant le statut « envoyé » sont surlignées en vert, afin de repérer facilement les commandes terminées.

Page de gestion des commandes

Fiche d’une commande
La fiche d’une commande est composé de 3 parties :

  • Le contenu de la commande : il s’agit d’un tableau listant les détails de la commande.
  • Les adresses : si le plugin Coordonnées est installé, sont affichées les adresses associées à la commande, ou à défaut celles associées à l’auteur de la commande.
  • L’auteur/client de la commande : si le plugin Contacts et Organisations est installé, on affiche les infos du contact, sinon des infos sur le client.

A noter : Pour les adresses, il n’est pas nécessaire d’activer l’ajout de coordonnées aux commandes dans les options du plugin Coordonnées.

Fiche d’une commande

Commandes « actives »
Il est possible d’afficher en page d’accueil la liste des commandes « actives ». il s’agit des commandes nécessitant une prise en charge. Pour se faire, il faut activer l’option dans la configuration du plugin, et choisir les statuts correspondants.

Commandes « actives » en page d’accueil

Notifications

Mise en place
On peut activer ’envoi d’emails de notification au vendeur et au client lorsque les commandes acquièrent certains statuts.
Le plugin « Notifications avancées » doît être installé. Le plugin Facteur est également fortement recommandé afin d’envoyer les messages au format HTML.
Rendez vous ensuite sur le formulaire de configuration du plugin pour activer et configurer les notifications.

Personnalisation des emails
Par défaut, les messages envoyés sont spartiates :

Email par défaut envoyé au client

Leurs squelettes sont présents dans le répertoire /notifications du plugin.
Pour chaque type de notification (vendeur & client), il y a 3 variantes :

  • commande_xxx_html.html au format HTML.
  • commande_xxx.html au format texte brut.
  • commande_xxx_court.html au format court, type microblog ou SMS.

Par commodité, ces 6 squelettes incluent tous le même squelette mutualisé, avec différents paramètres pour moduler l’affichage : contenu_commande_mail.html.
Il suffit de surcharger ce squelette pour le personnaliser selon vos besoins.

Si vous avez besoin de 2 squelettes vraiment différents pour les emails vendeur et client, vous pouvez au choix :

  • Faire ça au niveau du squelette contenu_commande_mail.html en jouant sur le paramètre #ENV{qui} :
    [(#ENV{qui}|=={client}|oui)<INCLURE{fond=mon_squelette_mail_client, env}>][(#ENV{qui}|=={vendeur}|oui)<INCLURE{fond=mon_squelette_mail_vendeur, env}>]
  • Ou bien surcharger directement les 6 squelettes clients et vendeurs.

Fonctions utiles

Voici une liste non exhaustive de certaines fonctions, celles qui pourront vous être utiles lors de l’intégration du plugin dans votre projet. Pour les détails (paramètres etc.) et la liste complète, voir le site https://code.spip.net/commandes/.

commandes_fonctions.php
commandes_lister_statuts
Cette fonction retourne les différents statuts des commandes. On peut s’en servir comme filtre dans les squelettes pour obtenir la chaîne de langue d’un statut : [(#STATUT|commandes_lister_statut)]
inc/commandes.php
creer_commande_encours
Crée une commande avec le statut « en cours » pour le visiteur actuel. La commande créée est « vide » : la fonction ne se charge pas de créer les détails. C’est le rôle des plugins tiers (Commandes de paniers par ex.).

A noter : on considère qu’il ne peut y avoir qu’une commande « en cours » par session et par auteur. Si une telle commande est déjà présente dans la session, elle va être supprimée de la base et de la session avant la création de la nouvelle.

Exemple :

$creer_commande = charger_fonction('creer_commande_encours', 'inc/');
$id_commande = $creer_commande;
commandes_supprimer
Permet de supprimer « proprement » une ou plusieurs commandes, en s’occupant également des données associées. Pour chaque commande à supprimer, la fonction effectue les actions suivantes :
-  suppression de la commande
-  suppression de ses détails
-  dissociation de ses adresses liées, et éventuellement suppression si elles se retrouvent orphelines.

Exemple :
$ids_commandes = array(1,2,3);
$supprimer_commandes = charger_fonction('commandes_supprimer', 'inc/');
$supprimer_commandes($ids_commandes);
traiter_notifications_commande
Envoie les notifications par email d’une commande, si les conditions sont réunies. Cette fonction est appelée lors de la création d’une commande, puis à chaque changement de statut.
inc/commandes_reference.php
inc_commandes_reference_dist
Cette fonction retourne une référence unique utilisée pour remplir le champ éponyme lors de la création d’une commande. Il s’agit du temps écoulé depuis le 1er janvier 1970, en secondes.
Elle est destinée à être surchargée pour l’adapter à vos besoins.
action/xxx.php
supprimer_commande
Supprime « proprement » une commande. Fait appel à la fonction commandes_effacer, avec les mêmes effets donc.

Exemple :
#URL_ACTION_AUTEUR{supprimer_commande,#ID_COMMANDE,#SELF}
instituer_commande
Change le statut d’une commandes

Exemple :
#URL_ACTION_AUTEUR{instituer_commande,#ID_COMMANDE-envoye,#SELF}

Pour aller plus loin : « Commandes » au sein du framework e-commerce

Ce plugin fait partie d’un framework dédié au e-commerce, il s’interface notamment avec les plugins suivants :

Il n’y a pas encore de documentation qui traite du framework dans son ensemble, on notera cependant les 2 plugins suivants :

  • Tuto commerce » : tutoriel des briques minimales à mettre en place pour une boutique en ligne.
  • Zcommerce : charger les plugins nécessaires à la création d’une boutique en ligne

Pour un aperçu général de tous les outils destinés au e-commerce, voir l’article Inventaire des outils SPIP pour du e-commerce

Discussion

38 discussions

  • 4

    Bonjour,

    Je viens d’installer tous ces plugins sur un site 3.1.3 tout « neuf » et le plugin « prix_objet » ne s’affiche pas dans les articles alors que les « prix » sont activés. A la place se trouvent 2 « e ».
    Quelqu’un aurait une idée svp ?

    • Baaah… demander aux auteurs de prix_objet par exemple ? :p
      Parce que là c’est le plugin Commandes, ici.

    • Je sais bien, mais il n’est pas documenté (sauf erreur) et je ne voyais pas où poster ailleurs.

    • Si pas de doc ou autre contact, il faut t’inscrire sur la liste spip-zone dédiée aux plugins, et y poser la question à l’auteur dans ce cas. :)

    • Merci.

      Pour info en ajoutant « Declinaisons », le fonctionnement est ok, mais il y a d’autres soucis

    Répondre à ce message

  • 3

    Très bien et très pratique, ce plugin. Tout comme la suite ’tuto_commerce’, très didactique avec enfin sur SPIP un espace de vente facile à mettre en place (sauf pour les ’livraisons’, qui restent un chouilla compliquées à implémenter).

    C’est couillon - et j’ai un peu suivi les ’débats’ sur le sujet - mais à trop vouloir se la jouer ’puriste nobizness’ les - excellentisssimes et merveilleux [vous aves construit un outil magique et oh combien utile pour les assos et collectifs]- dévelopeurs/pluginiseurs de SPIP privaient jusque-là les associations d’un outil pour mettre en vente leur production (livres & kits militants, son/vidéo ....). Or comme disait l’autre mac(hiavel), « l’argent est le nerf de la guerre » et les associations et collectifs ont BESOIN de pouvoir vendre des choses pour financer leur action.

    Bref...
    Néanmoins je butte sur un probléme : comment faire une page ’mes achats’ ?
    On touve des solutions (à la façon dont le fait Teenoo) pour la page du ’produit’ lui-même. Mais comment faire pour implémenter une page avec tous les ’achats’(donc commandes au statut ’payé’) d’un membre enregistré ?

    Idées bienvenues...

    • Bah tu fais un squelette page=mes_commandes (mes_commandes.html quoi), et dedans tu listes les commandes liés à l’utilisateur connecté (COMMANDES){id_auteur=#SESSION{id_auteur}} ou plus simplement (COMMANDES){id_auteur} si l’utilisateur est déjà dans l’environnement au-dessus.

    • Merci pour ta réponse.
      Oui, je vois bien la chose, en partant des squelettes du plugin.
      Mais mon probléme n’est pas résolu pour autant car si je peux afficher le descriptif de chaque objet commandé (en l’occurence un article Spip) à l’aide de #DESCRIPTIF je n’arrive pas à faire un lien vers ce dernier... c’est bein d’avoir l’info sur les produits achetés, c’est mieux de pouvoir se rendre directement sur la page de chacun d’entre eux.
      Je n’arrive pas à mettre ça en place : je me retrouve avec des #ID_OBJET qui ne correspondent pas à celles des articles achetès, et donc un lien qui pointe vers un autre contenu... C’est bien la boucle (COMMANDES_DETAILS) qu’il faut utiliser, non ?
      Merci encore...

    • Tu as le plugin profils développé par Cerdic sur le GitHub / Nursit qui peut te donner une base pour la gestion coté client des informations, adresse, commandes. Moi j’avais codé un mon_compte qui est similaire.

      Ta boucle commande doit englober commandes_details pour lister les bon produits attaché a la commande : tu as un exemple dans les squelettes du privé : commandes/prive/squelettes/inclure/commande_contenu.html

    Répondre à ce message

  • Bonjour à tous,
    Je dois mettre en place un code promo dans mon processus de commande. Que me conseillez-vous ? Un champ extra dans la table spip_commandes_details ? N’allant pas jusqu’au paiement, je pense qu’il faut que mon code promo soit géré au niveau de la commande.
    Mais si à l’avenir un paiement doit être mis en place, comment ça va « causer » avec la suite du processus ?
    Merci d’avance.

    Répondre à ce message

  • Un grand merci pour ce plugin qui m’a permis de mettre en place (avec bank, Paniers et Commandes de paniers) une boutique en ligne avec Payplug.
    Je signale un petit bug dans le fichier /inc/commandes.php :
    $options['from'] = $config['expediteur_'.$config['expediteur']];
    et pas
    $options['expediteur'] = $config['expediteur_'.$config['expediteur']];
    Ceci permet d’utiliser les notifications lorsque la commande est modifiée (par exemple payée) pour envoyer la facture avec une autre adresse email que celle du site ou de Facteur

    Répondre à ce message

  • 1

    Dans le tuto on voit sur « Fiche d’une commande » une ligne pour frais de dossier et frais de port... Comment est-ce géré ?

    Répondre à ce message

  • 2

    Super ce nouveau plugin :))) Je dois développer une boutique de formation online, ça va être top. Quelques questions toutefois auxquelles je n’ai pas trouvé réponse dans les docs :
    -  Je souhaite que le client ait accès à son compte perso, pourtant rien n’indique une inscription et/ou connexion au moment de l’achat.
    -  Peut-on lister l’ensemble des articles (produits) achetés ?
    -  Peut-on pour un article (produit) définir dans la boucle à la fois la #SESSION et la confirmation d’achat par la session ?

    Pour l’instant c’est tout ce qui me tracasse pour le moment ! Merci encore pour ce super plug, je sens que je vais m’amuser dessus ^^

    • 1) Ce plugin est mono-tâche et ne s’occupe que de gérer des listes de commandes. Comment elles sont remplies, qui les achète ou comment on les achète, ça ce n’est pas son problème. :D
      Il faut forcément d’autres plugins pour gérer le reste.

      2) Des produits déjà achetés ? Par qui ? Achetés en général ou par une personne précise ? Je ne comprend pas trop la question.

      3) Par compris non plus ce que signifie « définir la session » ou « définir la confirmation d’achat par la session ».

      À priori ce plugin est souvent à utiliser en conjonction avec le plugin Paniers qui permet de… faire des paniers. Et il existe une fonction permettant de générer une commande à partir d’un panier (qui lui est en cookie/session). Malheureusement tout ça n’est pas encore très documenté…

      C’est dans ce plugin qui fait la liaison :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/commandes_paniers/trunk/action/commandes_paniers.php

    • Yes ! j’ai réussi à faire pas mal de chose :)
      Alors pour la partie affichage des produits achetés par un client voici le code si ça peut servir. En fait la majeure partie de la boutique vend du dématérialisé.

      Dans la page d’un produit non gratuit (prix_ht !=0) je cherche la commande du client (id_auteur) qui a une session active, qui a payé cet article (statut IN paye) je récupère dans un tableau et j’affiche.

      <BOUCLE_principale(PRODUITS) {id_produit}>
      <BOUCLE_formules(PRODUITS){id_produit}{prix_ht!=0}{par num titre}>
         
          <B_commandes>
          <BOUCLE_commandes(COMMANDES spip_commandes_details){id_objet=#ID_PRODUIT}{id_auteur=#SESSION{id_auteur}}{statut IN paye}{prix_unitaire_ht!=0}>
            
      #SET{affiche,#ID_OBJET}
      
              <BOUCLE_produit(PRODUITS){id_produit=#GET{affiche}}>
             
                  <section>
            <h1>#TITRE</h1>
            <h2>#DESCRIPTIF</h2>
              <hr>
               <article>#TEXTE</article>
            </section>
        
              </BOUCLE_produit>
      
          </BOUCLE_commandes>
          </B_commandes>
          Achetez la vidéo
          <//B_commandes>
      </BOUCLE_formules>
      </BOUCLE_principale>

      Ma grande interrogation à présent c’est la livraison. J’ai tenté le plugin de Rainer Muller sans succès jusqu’à présent, il existe apparemment un autre de Cedric Morin mais qui n’est pas activable dans SPIP. Eh oui, le client a eu la bonne idée de changer d’avis en cours de route et souhaiter vendre du produit physique obligeant donc à faire des frais de livraison. Hourra !

    Répondre à ce message

  • 1

    Rien à faire, le prix s’affiche à zéro …
    Ma boucle dans la page article, tout s’affiche bien (isbn, stock, sauf prix !)
    j’ai créé prix via champ extra après installation du plugin prix, le champ est correct en base (j’ai aussi mis prix_ht). Mais la ligne Prix : #PRIX -> toujours à 0…

    une idée ?merci d’avance…

            <div class="pricing">
                <ul><li>Réf. : #INPUT_CODE_ISBN </li>
                <li>Prix : #PRIX</li>
                <li>Disponibilité : #SELECTION_STOCK</li>
                <BOUCLE_achat(ARTICLES){id_article}{selection_stock=Oui}>
                    [(#BOUTON_ACTION{'ajouter au panier',
                        #URL_ACTION_AUTEUR{remplir_panier,#OBJET-#ID_OBJET,#SELF},ajax})]
                    <INCLURE{fond=noisettes/minipanier}></INCLURE>
                    <BOUCLE_ispanier(CONDITION){si #SESSION{id_panier}|oui}>
                    [(#BOUTON_ACTION{<:paniers:voir_mon_panier:>,[(#URL_PAGE{commande_panier}|parametre_url{lang, #LANG})]})] 
                    </BOUCLE_ispanier>
    
                </BOUCLE_achat>
                </ul>
            </div>
    • T’as remplis quoi comme champ ? Juste « prix » ?

      Parce que la balise #PRIX, par défaut, si le champ « prix_ht » existe, ça prend ça en priorité, en appliquant une taxe s’il trouve (ou aucune taxe sinon). Et si ça existe pas, ça cherche le champ « prix » tout court.

      Du coup si t’as rempli le champ « prix », mais que t’as un champ « prix_ht » à 0, ça serait possiblement logique.

    Répondre à ce message

  • 2

    Bonjour,

    j’aurais une question concernant les boucles :)) Après commande payée, je souhaite que l’acheteur puisse afficher la page du produit (page masquée tant qu’que le produit n’est pas achetée - objet dématérialisé).
    Sauf que je n’arrive pas à faire la liaison entre le n° de produit et le n° d’objet qui est pourtant le même...

    Voila mon bout de code qui est mauvais car

     id_objet IN #ID_PRODUIT

    ça veut pas ! :

    <BOUCLE_commandes(COMMANDES){id_auteur=#SESSION{id_auteur}}{statut IN paye}>
              <h1>id_commande : #ID_COMMANDE</h1>
              #ID_AUTEUR
              
               <BOUCLE_details(COMMANDES_DETAILS){id_commande}{par id_objet}{id_objet IN #ID_PRODUIT}>
                <h2>id_commande_detail : #ID_COMMANDES_DETAIL</h2>
                <h3>id_commande : #ID_COMMANDE</h3>   
                
            <BOUCLE_produit(PRODUITS){id_produit}>
                <section>
          <h1>#TITRE</h1>
          <h2>#DESCRIPTIF</h2>
            <hr>
             <article>#TEXTE</article>
            <hr>
          </section>
      
            </BOUCLE_produit>
           </BOUCLE_details>
        </BOUCLE_commandes>

    Merci pour votre aide

    • Je ne saisis pas tout mais en tout cas « IN » c’est quand on veut tester si une valeur est dans un tableau. Là #ID_PRODUIT c’est pas un tableau, c’est juste comparer deux valeurs, donc « machin=truc ».

    • J’ai trouvé la solution :))) Je l’avais transmise sur le rézo !

      Boucle commandes est jointe à commandes_details et vérifie que l’id_objet est similaire à l’id_produit actif (page produit.html), récupère l’id du client connecté, vérifie ce produit a été acheté (et payé) enfin regarde si ce n’est pas un produit gratuit.

      Je récupère donc dans un #SET l’id de l’objet et j’affiche le produit !

      Sinon, je demande d’acheter la vidéo (car dans ce cas c’est une vidéo).

       <B_commandes>
          <BOUCLE_commandes(COMMANDES spip_commandes_details){id_objet=#ID_PRODUIT}{id_auteur=#SESSION{id_auteur}}{statut IN paye}{prix_unitaire_ht!=0}>
            
      #SET{affiche,#ID_OBJET}
      
              <BOUCLE_produit(PRODUITS){id_produit=#GET{affiche}}>
                 #ID_PRODUIT
                  <section>
            <h1>#TITRE</h1>
            <h2>#DESCRIPTIF</h2>
              <hr>
               <article>#TEXTE</article>
              <hr>
            </section>
        
              </BOUCLE_produit>
      
          </BOUCLE_commandes>
          </B_commandes>
          Achetez la vidéo
          <//B_commandes>

      Ouala ! Prochain challenge —> la livraison :D

    Répondre à ce message

  • 3
    Renée Picard

    Sur le site www.mangersaison.com à chaque fois que je commande un produit j’ai une erreur 302.
    Pour faire le test :http://www.mangersaison.com/Pour-tester-le-processus-d-achat

    • Bonjour,

      J’avais aussi rencontré ce problème, c’était dû au fait que le serveur utilisé n’était pas apache. Résolu en ajoutant define('_SERVER_APACHE',true); dans mes_options.php

      cf. rapport de bug : https://core.spip.net/issues/2529

    • Renée Picard

      MERCI ! Cela fonctionne à merveille

    • Renée Picard

      Je viens de recevoir cette réponse de l’hébergeur.

      Je vous confirme que le serveur de P*** sont des serveurs Linux fonctionnant avec la technologie Apache, cela est totalement compatible avec le CMS SPIP.

      Alors pourquoi define(’_SERVER_APACHE’,true) ; règle le problème ?

      Je n’y comprends rien.

    Répondre à ce message

  • Renée Picard

    Depuis peu le site mangersaison.com ne gère plus les commandes et je ne comprends pas pourquoi ?
    plugin commande 1.4.9
    sur planet hoster

    J’ai beau faire des tests je reçois des courriels (clients et vendeurs) à 0
    Copier-coller d’un courriel client


    Bonjour Renée Picard

    Nous avons bien enregistré votre commande et nous vous remercions de votre confiance.

    Récapitulatif de commande :

    Commande 1431626474

    Date : 2015-05-14 14:01:14

    Cette commande est : En cours

    Détails de commande :

    Désignation Montant
    Total 0
    http://www.mangersaison.com


    C’est la même chose coté courriel-vendeur et sur le site en privé dans activités/commandes le message est une commande vide.
    Pourtant sur le site, à la page http://www.mangersaison.com/spip.php?page=commande_terminee&lang=fr
    j’ai bien les items commandés.

    Je suis allé voir la BD et je vois que commande prend en compte un seul item. Si je retourne sur le site et en ajoute un autre, je retourne dans la bd et il y a seulement le dernier ajout
    Toujours sur la bd, spip_commandes_details est vide

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom