8791 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

Voila je suis toujours sur mon projet et j’ai déjà sollicité pas mal votre aide.
Mon problème aujourd’hui est au niveau du mode d’expédition. Je vous explique :

Sur le site une personne peut acheter plusieurs produits du même vendeur ce qui aura pour effet de réduire les frais de port.
Ex : L’acheteur A achète une Jeux de PS3 et un jeu XBOX360 au vendeur B
Pour le premier jeu les frais de ports sont de 2.20€ pour le deuxième il sera de +0.50 car il achète plusieurs jeux au même vendeur.

Si par exemple il ajoute un article (toujours du même vendeur).
Ex : Une Xbox360 le seul envoi possible sera en Recommandé avec assurance
Ainsi les frais de port pour les jeux seront annulés

Mon problème est que je ne c’est pas trop comment faire ? Pour la gestion du panier et autre aucun souci je bloque vraiment pour le système de livraison (Mode d’expédition, prix etc.)

Merci d’avance pour votre aide ! Heyoan t’es dans le coin ? ^^
A priori c'est surtout un problème d'algorithme.

Dans ce genre de cas le mieux est de prendre une feuille blanche et un crayon pour faires de jolies petites flèches avec des verbes pour décrire les actions (vive l'UML) Smiley langue

Pour ton problème je pense que la première chose à faire est de catégoriser tes produits de façon à connaitre le mode de livraison associé (recommandé, assurance, colissimo...). A partir de là à toi de prioriser chaque catégories.
Par exempel si l'un des produit est de type "recommandé" alors c'est le prix de livraison correspondant qui sera appliqué. Sinon c'est le prix de livraison normal plus 0.50ct pour chaque article supplémentaire (2.20 + (nombre_articles - 1 ) * 0.50).

Il te faudra appliquer ce modèle pour chaque expéditeur vu ton explication. Donc à voir pour ranger les produits dans un tableau des vendeurs. Exemple :
-vendeur1
--article1
--article2
-vendeur2
-vendeur3
--article3

Il suffit alors de boucler sur chaque vendeur pour calculer les coûts de livraison pour chacun.

En espérant que ces quelques indications puissent t'aider Smiley cligne
Je galère comme un malade pour faire un menu déroulant et que le client choisise les frais de port.

J'arrive à afficher les frais de port dans une page mais impossible pour moi de réafficher les frais de port dans une autre page.

C'est pas compliqué à première vue, mais j'y arrive pas.

Pour ton affaire, c'est faisable mais je n'ose imaginer les lignes de codes !!!

Allez courage Smiley smile

Marc
salut

@ viva

j'ai eu ça sur un site... avec en plus le port qui change suivant la destination Smiley cligne
beaucoup de if de else de case... enfin bon lourd .. mais uen fois codé... ouf !

Par contre il fat bien penser tout les cas et là seul le papier avec des petites flèches peut t'aider Smiley smile
donc suivre les bons conseils de moust Smiley cligne

@ cvs...

je ne comprend pas que tu ne stocke pas tes frais de port en bdd !! ou dans la session ou dans un hidden pour circuler dans les pages... dans tout les cas je crois que ton panier est mal pensé !
Salut à toi Moust !
Avant tout merci de ton aide.

Alors pour information j’ai déjà pris une feuille et fait des jolies petites flèches avec des beau verbes pour décrire les actions.

Pour la catégorisation de mes produits j'ai fais comme ça

idCategorie 1 = Jeux vidéo
idCategorie 2 = Accessoire
idCategorie 3 = Console

Pour les livraisons :

Pour un Jeux vidéo -> expédition possible : Normal, Suivi, Recommandé
Pour un Accessoire -> expédition possible : Normal, Suivi, Recommandé
Pour une Console -> expédition possible : Suivi, Recommandé

Je voudrais faire en sorte que si par exemple un acheteur à achète deux produit du même vendeur ex : un jeu vidéo et un console de jeux
Je voudrais que le mode d’expédition soit suivi ou recommandé (Car pour une console le mode d'expédition et le plus élevé niveau prix pour un envoi de ce type) et que les frais de ports pour les jeux soit gratis. Si par exemple il y a deux jeux vidéo alors la pour le premier article 2.20 pour le second +0.50 et je ne vois pas trop comment faire en faite. Sur papier aucun souci c’est niveau programmation que je bloque.

Pareil si le l’acheteur supprimer la console du panier que l’on prenne le mode d’expédition choisi par rapport au produit présent dans le panier.

Comme je stock les frais de port dans ma BDD je ne c’est pas trop comment faire pour dire vue qu’il y a deux article (exemple deux jeux vidéo) pour l’article avec l’id temps frais de port à 2.20€ pour les suivant 0.50.

Pour le vendeur dans mon panier j’ai un div par vendeur donc la aucun souci.
Mais encore une fois niveau programmation et mysql je ne vois pas trop comment faire …

Si tu peux me donner un petit coup de mail ça serait vraiment sympa.
Merci d’avance !
Modifié par Viva25 (07 Sep 2010 - 16:01)
Salut,

en partant d'une structure et des contenus suivants :

table categories
* idCategorie (clé primaire unique en auto_increment)
* libelleCategorie

qui contient :
1 / Jeux vidéo
2 / Accessoire
3 / Console


table modes_livraison
* idModeLivraison (clé primaire unique en auto_increment)
* libelleModeLivraison

qui contient :
1 / Normal
2 / Suivi
3 / Recommandé


table expeditions_possibles
* idExpe (clé primaire unique en auto_increment)
* idCategorie (clé étrangère de la table Categories)
* idModeLivraison (clé étrangère de la table Modes_Livraison)

qui contient :
1 / 1 / 1
2 / 1 / 2
3 / 1 / 3
4 / 2 / 1
5 / 2 / 2
6 / 2 / 3
7 / 3 / 2
8 / 3 / 3

Tu pourrais faire quelque chose comme ça pour récupérer les modes de livraison possibles en fonction des différentes catégories d'un même vendeur (à passer en argument dans un tableau à getOptionsExpe :
require_once('connexion.php');

$categories = array();
$modesLivraison = array();
$expeditions = array();

function init() {		// On charge tout en une seule fois
	global $categories;
	$sql = "SELECT idCategorie, libelleCategorie FROM categories";
	$result = mysql_query($sql);
	while($row = mysql_fetch_row($result)) {
		$categories[$row[0]] = $row[1];
	}
	global $modesLivraison;
	$sql = "SELECT idModeLivraison, libelleModeLivraison FROM modes_livraison";
	$result = mysql_query($sql);
	while($row = mysql_fetch_row($result)) {
		$modesLivraison[$row[0]] = $row[1];
	}
	global $expeditions;
	$sql = "SELECT idCategorie, GROUP_CONCAT( idModeLivraison Separator ',' ) FROM expeditions_possibles Group By idCategorie";
	$result = mysql_query($sql) or die( mysql_error() );
	while($row = mysql_fetch_row($result)) {
		$expeditions[$row[0]] = explode(',', $row[1]);
	}
}
	
function getOptionsExpe($categoriesArray) {	// Tous les modes de livraison possibles pour les catégories pasées en paramètre
	global $modesLivraison;
	global $expeditions;
	$optionsExpe = array();
	foreach($categoriesArray as $categorie) {
		$optionsExpe = empty($optionsExpe) ? $expeditions[$categorie] : array_intersect($optionsExpe, $expeditions[$categorie]);
	}
	foreach($optionsExpe as $key=>$value) {
		$optionsExpe[$key] = $modesLivraison[$value];
	}
	return $optionsExpe;
}
	
init();
//$optionsExpe = getOptionsExpe( array(1) );
//$optionsExpe = getOptionsExpe( array(1, 2) );
$optionsExpe = getOptionsExpe( array(1, 2, 3) );
echo '<pre>';
print_r($optionsExpe);
echo '</pre>';


Pour les autres règles j'ai la flemme de regarder là tout de suite. Smiley langue
Modifié par Heyoan (08 Sep 2010 - 15:39)
Mercy Heyoan je sort du taff à 19h quand je rentre cher moi je regarde ça.

Au niveau des tables mysql j'ai presque fait pareil mais ton idée est beaucoup mieux.

Je test tout ça et je te tiens au jus !

Encore merci à tous de votre aide Smiley langue
Salut Heyoan,

Alors j'ai bien regarder ton code chapeau !
Pour le mode de livraison selon le type de produit c'est parfait !

Par contre maintenant ce que je chercher à faire c'est exemple le l'acheteur ajoute un jeux vidéo les frais de ports seront alors de 4.50 par exemple puis il ajoute un deuxième jeux du même vendeur les frais de port seront alors de 4.50 pour le premier et gratuit pour le second. Encore plus loin si il ajoute une xbox360 à sont panier les ports seront : 11 pour la console et gratuit pour les deux jeux.
Je vais bossé dessus ce matin si ta une petite idée.

Merci pour ton aide.
Ben comme te le disais moust plus haut il faut réussir à identifier chacune de tes règles puis écrire l'algorithme correspondant... et c'est vrai que l'utilisation de l'UML ou de l'algèbre de Boole peut aider mais si toutes les règles sont clairement définies tu devrais t'en sortir (après le code sera juste plus ou moins beau et plus ou moins optimisé Smiley cligne ).
Je ne connait pas l'UML ou de l'algèbre de Boole donc je vais essayer de faire avec mes connaissance dans un premiers temps pis si j'arrive pas je viendrais demander de l'aide.
salut...

Heyoan t'as fait poussé comme études Smiley cligne

Autodidacte en informatique, j'ai jamais eu les cours... mais l'algèbre de boole te sauvera à tout les coups sa logique est sommes toute assez simple et très pratique dans nombre de cas conditionnel...

Prend le temps de lire le lien VIVA, essayes d'en retenir la logique tu verra que ta vie se simplifiera Smiley cligne

c'est sur cette base de logique que j'ai réglé mes problèmes de calcul de frais de port
Oui je vais regardé mais bon j'ai regardé vite fait ça fait peur ^^
La je fait des test on verra bien
Par contre je comprend pas trop cette ligne dans le code :


$optionsExpe = empty($optionsExpe) ? $expeditions[$categorie] : array_intersect($optionsExpe, $expeditions[$categorie]); 
Eh bien déjà j'espère que tu connais (et utilises) http://fr.php.net/manual/fr/

Pour la ligne elle utilise l'opérateur ternaire et le test est utile car la fonction array_intersect permet de ne garder que l'intersection de 2 ou plusieurs tableaux mais au premier passage $optionsExpe est vide donc l'intersection renverrait un tableau vide : on l'alimente donc avec le contenu du premier tableau de la boucle.

En français cela donnerait :

SI $optionsExpe est vide alors on lui affecte le contenu du tableau en cours (dans la boucle)

SINON on lui affecte l'intersection entre son contenu actuel et celui du tableau en cours (dans la boucle)
Modifié par Heyoan (08 Sep 2010 - 15:37)
D'accord mon problème c'était le empty je savait pas du tout que :


$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];


est égale à :


if (empty($_POST['action'])) {
   $action = 'default';
} else {
   $action = $_POST['action'];
}


mais avec ton explication nickel tout devient plus claire ^^
Es-que tu serait ou je pourrait apprendre plus au niveau programmation car je pense qu'il y a beaucoup de choses que je ne connait pas et qui pourrait mettre fort utile.
Viva25 a écrit :
Es-que tu serait ou je pourrait apprendre plus au niveau programmation car je pense qu'il y a beaucoup de choses que je ne connait pas et qui pourrait mettre fort utile.
Eh bien je dirais : pour débuter phpdebutant.org et le site du zéro et quand on est un peu plus à l'aise developpez.com
Parfait merci à vous tous je vais essayer de regarder un peu tout ça et voir si j'arrive à faire quelques choses de correct.
Pages :