par
VaN » 13 mai 2010, 16:59
Bonjour,
j'ai une application e-commerce. Mes rayons sont composés de produits, et ces produits sont composés de références. En gros, une référence est une occurence d'un produit, à laquelle sont liées des options de produit. Par option, j'entends tout ce qui peux différer d'une référence à l'autre, comme la taille, la couleur, etc.
J'ai donc par exemple un produit A, avec 2 références. 1 référence avec les options Couleur : Rouge et Taille : S, et 1 référence avec les options Couleur : Noir et Taille : M.
Sur ma fiche produit, j'affiche les différentes options liées au produit, avec un menu déroulant pou chacune listant les choix possibles, et qui vont me permettre de savoir quelle référence du produit le client veut acheter.
Ce que je cherche à faire, c'est lorsque l'utilisateur choisit une valeur pour l'une des options, cela rafraîchit automatiquement les autres menus déroulants, avec seulement les choix possibles restant en fonction du choix fait à l'instant.
Exemple : L'utilisateur affiche le produit T-shirt #1. Sur ce produit, 3 options, taille, couleur et manches.
La référence R1 possède les options Taille S, couleur rouge, manche longues,
La référence R2 possède les options Taille M, couleur noire, manches courtes.
La référence R3 possède les options Taille S, couleur rouge, manche courtes.
Si l'utilisateur choisit S dans le menu déroulant de l'option Taille, j'aimerai que le menu déroulant Couleur se mette à jour automatiquement, et ne contienne que le choix "rouge", puisque les seules références possibles pour la taille S sont les références R1 et R3.
Et évidemment, j'aimerai que cela fonctionne également lorsque l'on cumule les choix.
Si l'utilisateur choisit Taille S et manches courtes, le menu déroulant Couleur ne doit proposer que "rouge".
Voici la structure de ma base de données :
--
-- Structure de la table `echope_links_products_options`
--
CREATE TABLE IF NOT EXISTS `echope_links_products_options` (
`link_id` int(11) NOT NULL AUTO_INCREMENT,
`link_product_id` int(11) NOT NULL,
`link_option_id` int(11) NOT NULL,
PRIMARY KEY (`link_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Contenu de la table `echope_links_products_options`
--
INSERT INTO `echope_links_products_options` (`link_id`, `link_product_id`, `link_option_id`) VALUES
(1, 1, 1),
(2, 1, 2);
-- --------------------------------------------------------
--
-- Structure de la table `echope_links_references_options_choices`
--
CREATE TABLE IF NOT EXISTS `echope_links_references_options_choices` (
`link_id` int(11) NOT NULL AUTO_INCREMENT,
`link_reference_id` int(11) NOT NULL,
`link_option_id` int(11) NOT NULL,
`link_choice_id` int(11) NOT NULL,
PRIMARY KEY (`link_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
--
-- Contenu de la table `echope_links_references_options_choices`
--
INSERT INTO `echope_links_references_options_choices` (`link_id`, `link_reference_id`, `link_option_id`, `link_choice_id`) VALUES
(14, 2, 2, 4),
(13, 2, 1, 1),
(7, 1, 1, 1),
(8, 1, 2, 4);
-- --------------------------------------------------------
--
-- Structure de la table `echope_products`
--
CREATE TABLE IF NOT EXISTS `echope_products` (
`product_id` int(11) NOT NULL AUTO_INCREMENT,
`product_name` varchar(100) NOT NULL,
`product_price` float NOT NULL,
`product_family_id` int(11) NOT NULL,
`product_stock` int(11) NOT NULL,
`product_delivery_delay` smallint(6) NOT NULL,
`product_weight` float NOT NULL,
`product_description` text NOT NULL,
`product_rewrite` text NOT NULL,
`product_statut` tinyint(4) NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- Contenu de la table `echope_products`
--
INSERT INTO `echope_products` (`product_id`, `product_name`, `product_price`, `product_family_id`, `product_stock`, `product_delivery_delay`, `product_weight`, `product_description`, `product_rewrite`, `product_statut`) VALUES
(1, 'Sac Lolita', 150, 1, 0, 12, 1.5, '<p>Très beau sac rouge</p>', 'sac-lolita', 1),
(2, 'Sac marron', 145, 1, 5, 5, 2.2, '<p>Joli sac marron</p>', 'sac-marron', 1),
(3, 'Sac #3', 99, 1, 15, 4, 1.6, '', 'sac-3', 1);
-- --------------------------------------------------------
--
-- Structure de la table `echope_products_options`
--
CREATE TABLE IF NOT EXISTS `echope_products_options` (
`option_id` int(11) NOT NULL AUTO_INCREMENT,
`option_name` varchar(100) NOT NULL,
`option_statut` tinyint(1) NOT NULL,
PRIMARY KEY (`option_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Contenu de la table `echope_products_options`
--
INSERT INTO `echope_products_options` (`option_id`, `option_name`, `option_statut`) VALUES
(1, 'Taille', 1),
(2, 'Couleur', 1);
-- --------------------------------------------------------
--
-- Structure de la table `echope_products_options_choices`
--
CREATE TABLE IF NOT EXISTS `echope_products_options_choices` (
`choice_id` int(11) NOT NULL AUTO_INCREMENT,
`choice_option_id` int(11) NOT NULL,
`choice_name` varchar(100) NOT NULL,
`choice_statut` tinyint(1) NOT NULL,
PRIMARY KEY (`choice_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
--
-- Contenu de la table `echope_products_options_choices`
--
INSERT INTO `echope_products_options_choices` (`choice_id`, `choice_option_id`, `choice_name`, `choice_statut`) VALUES
(1, 1, 'S', 1),
(2, 1, 'M', 1),
(3, 2, 'Rouge', 1),
(4, 2, 'Noir', 1);
-- --------------------------------------------------------
--
-- Structure de la table `echope_products_references`
--
CREATE TABLE IF NOT EXISTS `echope_products_references` (
`reference_id` int(11) NOT NULL AUTO_INCREMENT,
`reference_product_id` int(11) NOT NULL,
`reference_name` varchar(100) NOT NULL,
`reference_price` float NOT NULL,
`reference_stock` int(11) NOT NULL,
`reference_delivery_delay` smallint(6) NOT NULL,
`reference_weight` float NOT NULL,
`reference_rewrite` text NOT NULL,
`reference_statut` tinyint(4) NOT NULL,
PRIMARY KEY (`reference_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Contenu de la table `echope_products_references`
--
INSERT INTO `echope_products_references` (`reference_id`, `reference_product_id`, `reference_name`, `reference_price`, `reference_stock`, `reference_delivery_delay`, `reference_weight`, `reference_rewrite`, `reference_statut`) VALUES
(2, 1, 'Sac Lolita', 150, 0, 12, 1.5, 'sac-lolita', 1);
Comment dois-je m'y prendre ?
Bonjour,
j'ai une application e-commerce. Mes rayons sont composés de produits, et ces produits sont composés de références. En gros, une référence est une occurence d'un produit, à laquelle sont liées des options de produit. Par option, j'entends tout ce qui peux différer d'une référence à l'autre, comme la taille, la couleur, etc.
J'ai donc par exemple un produit A, avec 2 références. 1 référence avec les options Couleur : Rouge et Taille : S, et 1 référence avec les options Couleur : Noir et Taille : M.
Sur ma fiche produit, j'affiche les différentes options liées au produit, avec un menu déroulant pou chacune listant les choix possibles, et qui vont me permettre de savoir quelle référence du produit le client veut acheter.
Ce que je cherche à faire, c'est lorsque l'utilisateur choisit une valeur pour l'une des options, cela rafraîchit automatiquement les autres menus déroulants, avec seulement les choix possibles restant en fonction du choix fait à l'instant.
Exemple : L'utilisateur affiche le produit T-shirt #1. Sur ce produit, 3 options, taille, couleur et manches.
La référence R1 possède les options Taille S, couleur rouge, manche longues,
La référence R2 possède les options Taille M, couleur noire, manches courtes.
La référence R3 possède les options Taille S, couleur rouge, manche courtes.
Si l'utilisateur choisit S dans le menu déroulant de l'option Taille, j'aimerai que le menu déroulant Couleur se mette à jour automatiquement, et ne contienne que le choix "rouge", puisque les seules références possibles pour la taille S sont les références R1 et R3.
Et évidemment, j'aimerai que cela fonctionne également lorsque l'on cumule les choix.
Si l'utilisateur choisit Taille S et manches courtes, le menu déroulant Couleur ne doit proposer que "rouge".
Voici la structure de ma base de données :
[quote]--
-- Structure de la table `echope_links_products_options`
--
CREATE TABLE IF NOT EXISTS `echope_links_products_options` (
`link_id` int(11) NOT NULL AUTO_INCREMENT,
`link_product_id` int(11) NOT NULL,
`link_option_id` int(11) NOT NULL,
PRIMARY KEY (`link_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Contenu de la table `echope_links_products_options`
--
INSERT INTO `echope_links_products_options` (`link_id`, `link_product_id`, `link_option_id`) VALUES
(1, 1, 1),
(2, 1, 2);
-- --------------------------------------------------------
--
-- Structure de la table `echope_links_references_options_choices`
--
CREATE TABLE IF NOT EXISTS `echope_links_references_options_choices` (
`link_id` int(11) NOT NULL AUTO_INCREMENT,
`link_reference_id` int(11) NOT NULL,
`link_option_id` int(11) NOT NULL,
`link_choice_id` int(11) NOT NULL,
PRIMARY KEY (`link_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
--
-- Contenu de la table `echope_links_references_options_choices`
--
INSERT INTO `echope_links_references_options_choices` (`link_id`, `link_reference_id`, `link_option_id`, `link_choice_id`) VALUES
(14, 2, 2, 4),
(13, 2, 1, 1),
(7, 1, 1, 1),
(8, 1, 2, 4);
-- --------------------------------------------------------
--
-- Structure de la table `echope_products`
--
CREATE TABLE IF NOT EXISTS `echope_products` (
`product_id` int(11) NOT NULL AUTO_INCREMENT,
`product_name` varchar(100) NOT NULL,
`product_price` float NOT NULL,
`product_family_id` int(11) NOT NULL,
`product_stock` int(11) NOT NULL,
`product_delivery_delay` smallint(6) NOT NULL,
`product_weight` float NOT NULL,
`product_description` text NOT NULL,
`product_rewrite` text NOT NULL,
`product_statut` tinyint(4) NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- Contenu de la table `echope_products`
--
INSERT INTO `echope_products` (`product_id`, `product_name`, `product_price`, `product_family_id`, `product_stock`, `product_delivery_delay`, `product_weight`, `product_description`, `product_rewrite`, `product_statut`) VALUES
(1, 'Sac Lolita', 150, 1, 0, 12, 1.5, '<p>Très beau sac rouge</p>', 'sac-lolita', 1),
(2, 'Sac marron', 145, 1, 5, 5, 2.2, '<p>Joli sac marron</p>', 'sac-marron', 1),
(3, 'Sac #3', 99, 1, 15, 4, 1.6, '', 'sac-3', 1);
-- --------------------------------------------------------
--
-- Structure de la table `echope_products_options`
--
CREATE TABLE IF NOT EXISTS `echope_products_options` (
`option_id` int(11) NOT NULL AUTO_INCREMENT,
`option_name` varchar(100) NOT NULL,
`option_statut` tinyint(1) NOT NULL,
PRIMARY KEY (`option_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Contenu de la table `echope_products_options`
--
INSERT INTO `echope_products_options` (`option_id`, `option_name`, `option_statut`) VALUES
(1, 'Taille', 1),
(2, 'Couleur', 1);
-- --------------------------------------------------------
--
-- Structure de la table `echope_products_options_choices`
--
CREATE TABLE IF NOT EXISTS `echope_products_options_choices` (
`choice_id` int(11) NOT NULL AUTO_INCREMENT,
`choice_option_id` int(11) NOT NULL,
`choice_name` varchar(100) NOT NULL,
`choice_statut` tinyint(1) NOT NULL,
PRIMARY KEY (`choice_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
--
-- Contenu de la table `echope_products_options_choices`
--
INSERT INTO `echope_products_options_choices` (`choice_id`, `choice_option_id`, `choice_name`, `choice_statut`) VALUES
(1, 1, 'S', 1),
(2, 1, 'M', 1),
(3, 2, 'Rouge', 1),
(4, 2, 'Noir', 1);
-- --------------------------------------------------------
--
-- Structure de la table `echope_products_references`
--
CREATE TABLE IF NOT EXISTS `echope_products_references` (
`reference_id` int(11) NOT NULL AUTO_INCREMENT,
`reference_product_id` int(11) NOT NULL,
`reference_name` varchar(100) NOT NULL,
`reference_price` float NOT NULL,
`reference_stock` int(11) NOT NULL,
`reference_delivery_delay` smallint(6) NOT NULL,
`reference_weight` float NOT NULL,
`reference_rewrite` text NOT NULL,
`reference_statut` tinyint(4) NOT NULL,
PRIMARY KEY (`reference_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Contenu de la table `echope_products_references`
--
INSERT INTO `echope_products_references` (`reference_id`, `reference_product_id`, `reference_name`, `reference_price`, `reference_stock`, `reference_delivery_delay`, `reference_weight`, `reference_rewrite`, `reference_statut`) VALUES
(2, 1, 'Sac Lolita', 150, 0, 12, 1.5, 'sac-lolita', 1);
[/quote]Comment dois-je m'y prendre ?