Bonjour la Liste,
Pour le plugin http://plugins.spip.net/paniers.html
j’ai besoin d’un bouton permettant de retirer 1 produit du panier.
Pour cela j’ai repris comme base le fichier ./action/remplir_panier.php
renommé retirer_panier.php avec le code modifié comme suit :
<pre><code>
<?php
//2014-06-09 Copie de remplir_panier.php à modifier pour nouvelle fonction retirer_panier.php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Remplir un panier avec un objet quelconque
* @param unknown_type $arg
* @return unknown_type
*/
function action_retirer_panier_dist($arg=null) {
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// On récupère les infos de l'argument !!! *** quantité passée de 1 à (-1) pour décrémentation
@list($objet, $id_objet, $quantite) = explode('-', $arg);
$id_objet = intval($id_objet);
$quantite = intval($quantite) ? intval($quantite) : -1;
// Il faut cherche le panier du visiteur en cours
include_spip('inc/session');
$id_panier = session_get('id_panier');
// Suppression de la création du panier
// On ne fait que s'il y a bien un panier existant et un objet valable -- OUI ! on conserve
if ($id_panier > 0 and $objet and $id_objet) {
// Il faut maintenant chercher si cet objet précis est *déjà* dans le panier -- OUI ! Aussi !
/*
Il faudrait tester si la quantité n'est pas déjà = O
et alors afficher un message : "Ce produit n'est sur votre liste d'achat"
*/
$quantite_deja = intval(sql_getfetsel(
'quantite',
'spip_paniers_liens',
array(
'id_panier = '.$id_panier,
'objet = '.sql_quote($objet),
'id_objet = '.$id_objet
)
));
// Si on a déjà une quantité, on fait une mise à jour -- OUI ! Aussi !
if ($quantite_deja){
sql_updateq(
'spip_paniers_liens',
array('quantite' => $quantite_deja + $quantite),
'id_panier = '.$id_panier.' and objet = '.sql_quote($objet).' and id_objet = '.$id_objet
);
}
//** Test si quantité déjà = 0 => Afficher message : "Ce produit n'est plus sur votre liste d'achat"
if ($quantite_deja <= 0) {
'Ce produit n\'est plus sur votre liste d\'achat';
}
// Sinon on crée le lien -- Conservé au cas où ...
else{
sql_insertq(
'spip_paniers_liens',
array(
'id_panier' => $id_panier,
'objet' => $objet,
'id_objet' => $id_objet,
'quantite' => $quantite
)
);
}
// Mais dans tous les cas on met la date du panier à jour -- OUI !
sql_updateq(
'spip_paniers',
array('date'=>'NOW()'),
'id_panier = '.$id_panier
);
}
}
?>
</code></pre>
Cela fonctionne comme pour remplir_panier en ajoutant un BOUTON_ACTION :
<pre><code>
[(#BOUTON_ACTION{Retirer du panier,#URL_ACTION_AUTEUR{retirer_panier,produit-#ID_PRODUIT,#SELF},ajax})]
</code></pre>
dans le skel ( produit.html dans mon test) table = spip_produit contenant la description de objet= produit
Voilà pour ce qui est du Bouton « Retirer du panier » qui fonctionne …
Questions :
Peut-être y-a-t-il des améliorations (simplification, suppression???) possibles pour le rendre plus fiable ou plus léger ?
Comment afficher le message :
« Ce produit n’est plus sur votre liste d’achat »
par le skel si $quantite=0 ?
Merci pour vos suggestions.
@+
nh3oh