Carnet Wiki

paniers et commandes

Version 2 — Mai 2014 JLuc

(De : Nathalie Brunelli (Mirobolus))

Ça bouge beaucoup du côté du plugin Commandes.

Pour ma part, j’ai installé Commandes + Commandes de paniers + Panier pour un site qui a pour vocation de proposer très exactement un bon de commande.

- Pour Commandes : la version du trunk (donc en cours de chamboulements) : http://zone.spip.org/trac/spip-zone/browser/_plugins_/commandes/trunk
-  Pour Commandes de paniers : http://plugins.spip.net/panier2commande.html (et sûrement de nouvelles choses sur la zone)
-  Pour Paniers : http://plugins.spip.net/paniers.html
-  La page qui m’a fait découvrir tout cela est ici : http://contrib.spip.net/Z-Commerce

Ces plugins ont été développés il y a quelques mois déjà, sur une belle idée collective de créer un système d’e-commerce digne de ce nom basé sur Zpip,
mais ça a été abandonné, puis repris par d’autres, des versions différentes existent un peu partout,
et il y a plein de dépendances à d’autres plugins.
A noter que ces plugins font l’objet de nouveaux développements.

Voici les étapes que j’ai suivies :

- D’abord, dans le fichier article, tu insères un bouton d’ajout au panier :

[(#BOUTON_ACTION{<:action_ajouter:>,#URL_ACTION_AUTEUR{remplir_panier,article-#ID_ARTICLE,#SELF},ajax})]   

- Quelque part dans l’interface, j’ai mis le minipanier (fourni dans le plugin Paniers, dans noisettes/) :
        <INCLURE{fond=inclure/minipanier}>       
=> dès qu’on clique sur le bouton, le minipanier se met à jour.

- Ensuite, j’ai créé une page qui récapitule le panier (chez moi, elle s’appelle commande_panier), dans laquelle j’ai mis ceci :
        <div class="ajax">#FORMULAIRE_PANIER</div>
=> on trouve un tableau récapitulant les produits ajoutés au panier, leur quantité, leur prix, etc... avec la possibilité de modifier ces quantités (bouton Recalculer)

Et (en dessous de ce code) j’ai inséré des boutons :

	<BOUCLE_ispanier(CONDITION){si #SESSION{id_panier}|oui}>
	        	<table class="nobord" width="100%"><tr>
	            <td style="text-align:left" width="50%">[(#BOUTON_ACTION{<:mon_panier_vider:>,#URL_ACTION_AUTEUR{supprimer_panier_encours,'',#SELF},ajax})]</td>
	            <td style="text-align:right" width="50%">[(#BOUTON_ACTION{<:passer_etape_suivante:> 2 >>,[(#URL_PAGE{commande_validation}|parametre_url{lang, #LANG})]})]</td>
	            </tr></table>
	</BOUCLE_ispanier>

Pour appeler cette page :

	<BOUCLE_ispanier(CONDITION){si #SESSION{id_panier}|oui}>
     		 [(#BOUTON_ACTION{<:paniers:voir_mon_panier:>,[(#URL_PAGE{commande_panier}|parametre_url{lang, #LANG})]})]
	 </BOUCLE_ispanier>

- Ma page commande_validation appelée contient :

	 [(#REM) Récap panier ]
	  <h2><:paniers:mon_panier:></h2>
	      <div class="ajax">#FORMULAIRE_PANIER</div>
	      <BOUCLE_ispanier(CONDITION){si #SESSION{id_panier}|oui}>
	     	 <table class="nobord" width="100%"><tr>
	     	 <td style="text-align:left" width="50%"> 
	   	   [(#BOUTON_ACTION{<:mon_panier_vider:>,#URL_ACTION_AUTEUR{supprimer_panier_encours,'',#SELF},ajax})]      
	    	  </td>
	  	    <td style="text-align:right" width="50%">
	 	     <BOUCLE_isclient(CONDITION){si #SESSION{id_auteur}|oui}>
	    	  [(#BOUTON_ACTION{<:commander:>  >>,#URL_ACTION_AUTEUR{commandes_paniers,'',#URL_PAGE{commande_terminee}|parametre_url{lang, #LANG}},ajax})]
	    	  </BOUCLE_isclient>
	      	</td>
	     	 </tr></table>
		</BOUCLE_ispanier>

Ce code provoque la transformation du panier en commande (c’est là qu’interviennent les bouts de code de Commandes de paniers). A cet instant, le panier est vidé, une commande est créée.
Dans l’espace privé, dans Edition > Commandes, tu y trouveras ta commande.

- Ma dernière page commande_terminée comporte ceci :

      <B_traitement>
     <h2 class="gris"><:commande_merci:></h2>
      <p><:explication_fin_commande:></p>
      <h2 align="center"><:commande_recapitulatif:>
        
      #ANCRE_PAGINATION
      <BOUCLE_traitement(COMMANDES){id_auteur=#SESSION{id_auteur}}{statut?}{tout}{par date} {inverse}{pagination 5}>
      <p><:commande_numero:>#REFERENCE</p>
      <p><:commande_date:> : #DATE</p>
      <p><:modifier_commande_statut:> [<span class="bleu">(#STATUT|commandes_lister_statuts)</span>]</p>
      
      <p><:details_commande:></p>
      <INCLURE{fond=inclure/commande,id_commande=#ID_COMMANDE,statut=#STATUT}>
      <div class="separator"></div>


</BOUCLE_traitement>
      [<p class="pagination">(#PAGINATION)</p>]
      </B_traitement>
      
      <p><:commande_probleme:> <:ou_pas_connecte
            
      <//B_traitement>

La boucle interroge désormais la table Commandes et récapitule les articles qui s’y trouvent.