I'm currently evaluating, if Ubercart could be our next solution for our existing online-shop system. At the moment we are using XTCommerce for our fashion label. This fashion label gives customers the possibility to customize the colors and materials of the product. There are currently 45 color/material-options. Some products can have two, some four settings for these options. So the customer can choose, if he want to have the main color of a shirt in red for example and some trims in white and some other parts in black. Just as an example. Of course the size can be chosen to. Depending on the selected color and material and depending on the size (standard or made on measure) the price can change. Not every product has the whole range of possible attributes. So the available attributes and possibilities of choices need to be set for every product.
So I tried to play around with Ubercart attributes and product-kits for a while. I found out, that I could use the same system, like I'm currently using in xtcommerce. Okay. Thats fine for the beginning, but it does not solve the editing hell at the moment.
So whats the current situation:
- we have different kind of material and prices for a product can change, with the selection of the material
- we have different possible colors for each material. depending on the material selection, the range of colors can change.
- a product can have different selections and combinations of material and colors
- a product can have different sizes (of course)
Example (each * would be one selection, the customer has to choose. A default selection should be possible):
Skirt A:
* Selection for Sizes
---- S
---- M
---- L
---- Made To Measure ( +10.00€ )
* Selection 1 for Material/Color
---- Material 1
-------- black
-------- red
-------- green
-------- yellow
---- Material 2 ( +5.00€ )
-------- black
-------- red
-------- white
-------- pink
---- Material 3 ( +15.00€ )
-------- black
-------- white
-------- yellow
* Selection 2 for Material/Color
---- Material 1
-------- black
-------- red
-------- green
-------- yellow
---- Material 2 ( +5.00€ )
-------- black
-------- red
-------- white
-------- pink
* Selection 3 for Material/Color
---- Material 3
-------- black
-------- white
-------- yellow
In this example the customer has to choose the size, a selection for the first part of the skirt (maybe main parts or so), a selection for another part of the skirt and a third selection for again another part. So the skirt could have three different parts and the customer can choose, which materials and colors the parts should be made off. Another skirt or a top or whatever could have other combinations. Maybe just sizes and one selector for material and color. Or maybe two. And maybe just Material 1 and 3 and not the second or so. At the moment I have 3 attributes and each of these attributes having all possible material-color combinations as options. During creating a new product, I can choose the attributes and all the options. Of course its working, but its a pain in the ass, especially, if you have to add prices for all the options.
So what would be nice:
One solution could be to add somehow some dependencies between options of different attributes. Then I could create following structure:
Sizes: S,M,L,Made To Measure
MaterialSelection 1: Material 1, Material 2, Material 3
ColorSelection 1: black,red, green, yellow, white, pink
---- black if MaterialSelection1 is Material 1 or Material 2 or Material 3
---- red if MaterialSelection1 is Material 1 or Material 3
---- green if MaterialSelection1 is Material 1
---- yellow if MaterialSelection1 is Material 1 or Material 3
and so on
I would be forced to duplicate this to MaterialSelection 2 and ColorSelection 2 and again for 3 and also 4. So I have 4 times attributes with the same content. Sadly. But it could work then. I could add for each product the material attributes and color atributes (works with the current version). I could set different prices for the materials and I would need (maybe I develope it by myself, if nothing exists) a module, which takes care about the dependencies.
A better way, would be a tree structure for atttributes and options and the possibilitie to add attributes as often as I need.
Example:
Size
--S
--M
--L
--XL
--Made on measure
Materials and Color
--Material 1
----Color A
----Color B
----Color C
----…
--Material 2
----Color A
----Color C
----Color D
----…
--Material 3
----Color C
----Color D
----Color F
So I have just two attributes. One for sizes and for for material and colors.
Now it would be nice to be able to create sets of different attributes selections. For example one set for products, who needs two selectors for colors and one for sizes. So I could add the attribute “Size†and use the label “Size†for a selection and then the attribute “Material and Color†and use the label “Main Material/Color†for another selection and then the attribute “Material and Color†again and call it “Trim Material and Color†for a third selection.
After that I can choose inside this set, which options I maybe do not want to have for this set. So maybe “Trim Material and Color†should be without “Material 3â€. In this case I just can remove this part of the set-tree. Each parent-knot gets a flag, if I change something inside the childs. If nothing changed, all default settings from the main attribute/options configuration are valid and inherited. So if a new color is added under Material 2, it will be immediately available for the selections inside the sets (used for creating new products) and for all the products, which are using this parent knot without individual changes.
If I edit a product, I want to be able to say, this product gets following attributes. I can assign the attributes manual or just use one of my sets created above as a template. But of course i can make changes individual for this current product afterwards, if necessary. As long as I do not change anything (add or remove childs from a knot or add or remove attribute-selections inherited from a template set), all changes to the attributes, options and sets will be immediately available to the products.
Changes for prices and product-numbers can be assigned on any knot. If i add a price to a knot, then the price will change (+ or - or absolute), if this option was chosen by the customer. If i add a price to a knot, then every property under the knot will get this price, except it has an own price setting. So after I assigned my attribute and option tree to my product (via set or manual), I could just add some prices for all the tree-parts, which should get these price-changes.
Same with product-numbers and maybe also product names. A combination of prefix, suffix and overwriting for numbers and names on knots would be nice and make the complete thing flexible.
Here an example:
Attribute: Size
--Size
----S
----M [DEFAULT]
----L
----XL
----Made on measure (+20.00€)
Attribute: Main Material/Color
--Materials and Color
----Material 1
------Color A [DEFAULT]
------Color B
------Color C
------…
----Material 2 (+10.00€)
------Color A
------Color C
------Color D
------…
----Material 3 (-5.00€)
------Color C
------Color D
------Color F (+5.00€)
Attribute: Trim Material/Color
--Materials and Color
----Material 1
------Color A
------Color B
------Color C
------…
----Material 3
------Color C
------Color D [DEFAULT]
------Color F
So in the example above the main price could be 100€. I have three selectors. One for Size, one for Main Material/Color and one for Trim Material/Color. The properties marked as STANDARD are preselected. If someone would like to have it made on measure, then it would be 20€ in addition. If someone would like to have the Main Material as Material 2 with Color C, it would costs 10€ more. If it should be Material 3, it would be for Color C and D 5€ less, but for Color F 5€ in addition.
Yeah its tricky. But I have no glue, how to solve this complex problem in another way. I think the tree version is the most flexible and easy to understand one. Parts of the tree, which are global defined and currently inherited, could be "grey" and marked in a special way. If I add a price to the knot, the inheritance of the price for the childs could be shown "grey" . Removed parts of the tree striked through and so on.
So what you think about it? Is there any other, maybe easier way, to solve such kind of problem?
I would be interested to discuss this. I also will check the next days the current database structure of ubercart to get an idea, how things are located at the moment. I also would be interested to help to integrate a solution. I'm working as a software developer since 15 years and have done some Drupal stuff (also Module writing) in the last months for evaluating the system itself.
