Paniers : un bouton "Retirer du panier"

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

Dans le message initial le code du fichier retirer_panier.php ne s’affiche pas correctement,
je le renvoie sans les balises début et fin de php … si cela peut arranger l’affichage

début php
//2014-06-09 Copie de remplir_panier.php modifié 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
);
}
}

fin php

Avec mes excuses …

nh3oh

Le Mercredi 11 juin 2014 19h04, « nh3oh-com2@yahoo.fr » nh3oh-com2@yahoo.fr a écrit :

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


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