Product customization with oxid

dear oxid-professionals,
we want to take oxid as a basis for our spreadshirt/zazzle/cafepress-like shop, and i wonder how we implement our requirements with oxid;

that
means, we have articles (like different shirts), all with discrete
attributes (3-6 colors, 4 sizes, …).
additionally the user can use an online-designer, where he can upload
images and create his design; this online designer generates a unique
design-ID;
now, how do i attach this design-ID to a t-shirt?
when i have two t-shirts with same size and color, but with a
different design-ID, the customer should see 2 separate items in his
basket, so he can adjust the quantity for them independently.
what is the right way to model this in oxid?

thank you in advance for any hint,

benno!

Hi Benno,

you are probably looking for stuff like this.

A module for it is available here: http://www.oxid-esales.com/de/resources/forum/module/neues-flash-konfigurator-modul-fuer-oxid-ce-4000


Marco Steinhäuser
Community Guide
OXID eSales AG

thx marco for your quick reply (myself was ill for a week :frowning: )

this looks great, and i wonder how the shop deals with the data of the flash. we have a second web application where the online designer is hosted, that means, when the customer clicks on the “configure” link, a popup window opens with the online designer, there he does his customisation stuff, everything is saved under a unique desig-id; then the online designer webapp would somehow talk to the oxid shop backend and tell about the design id for the user’s article.

and this is where i am unsure, how could i do this, how should i attach this “external” product attribute to the article, so that i can use it within the page templates (e.g. to display a preview-image) and also in the backend later (for fulfillment)?

tia, benno!

Hi Benno,

what you need for this is a “bridge”, an interface that communicates with both applications, the designer and the shop. That means that the API of the designer needs to be open as well.

Once done, you can use shop functions like tobasket() to put your configured product into the basket and into the article base as well.


Marco Steinhäuser
Community Guide
OXID eSales AG

this sounds doable (as we develop the online designer by ourselves and have all possibilities there);

allow me another 2 questions:

[ul]
[li] ok, from inside the oxid application i can call the rich oxid api and use e.g. tobasket; is there also a remote api (json, soap, etc)?[/li]
[li] if i have a product (e.g. a tshirt) with some variants (e.g. large/medium/small), and then the customer customizes this t-shirt with his design (which is a unique design number generated by an external application), how can i connect the selected product with this unique design number?[/ul][/li]this design id is somehow an additional attribute of the existing product, which makes this instance of the product unique;

do i have to create a new article in the article base for that (wouldnt that fill up the db after some time?) or is there a more elegant way to add this kind of additional attribute to an existing product? (in the www.shirt-x.de shop you mentioned they seem to append the unique design-id to the original product-id, separated by a dot - but i cannot judge if it is a newly created product in the article base then)

tia, benno!

Hallo Benno,

Yes. For both, the Professional Edition and the Enterprise Edition, a SOAP interface is available. For the Community Edition, this project was set to life but tbo I dont know the status of it:Google Code Archive - Long-term storage for Google Code Project Hosting.

Your second question: Using unique design numbers, you would blow up the database anyway, either saving the complete (new) article or a variant to an existing article, would not you?

Marco


Marco Steinhäuser
Community Guide
OXID eSales AG

…but i still have no idea how to attach the unique design ID to an instance of a product;

everytime the customer has put a customized tshirt into the basket, i could…

  • create a new product (via the api) in the article base, e.g. with
    new productnumber = (productnumber of un-customized tshirt) + “.” +
    uniqueDesignId

  • create and add a new variant for the base article, (name for the entry = uniqueDesignId)

for me, these solutions seem to misuse oxid’s abstractions and i had
to take care to hide these products/variabnts from other users.

another hack would be to define a special selection list (for
example called “uniqueDesignId”) that is attached to all products; when
a customer puts a new customized tshirt into the basket, i would add
the new designId into this selection list and set the article’s
selection-list-value to this new designId (i would also make this
selection list read only for the customer); this seems cheaper than the
2 other approches but it still does not feel right to have a selection
list with 1000s of entries.

what i really need is an individual attribute that i can attach to
an instance of an article, just like a value from a selection list, but
it must be a “free value” like a string or a number;

additionally it must make the article unique, that means, if i have
two articles with the same article number in the basket, and they
differ only by this attribute, the customer should see two order lines
in his basket (both with a quantity of 1) instead of 1 line with a
quantity of 2; (this is the behaviour when i use oxid’s selection lists
and i have two articles in the basket that just differ by the value of
the associated selection list)

does oxid provide an abstraction for this? or how would you implement this?

thank you in advance for any hint,

benno!

Hi Benno,

I will try to find somebody who can give you a bit more detailed information than I could. May take a while…

Cheers


Marco Steinhäuser
Community Guide
OXID eSales AG

thank you!

i think this is a feature that is interesting for many people -

shop owners also need this to let customers order a customer-specified amount of something (individual weight or size), put a special message on an article or …

when i sell iron pipes f.ex. the customer needs to say how long the pipe should be, and in the basket he could then have several order-lines, each line with the same article but with different lengths. for iron pipes this would even be more complex as this attribute would also influence the price.

cheers, uwe!

Hi Benno,

The feature you are looking for we call persistent parameters. You can check how it works in demoshop by going to Purse GLAM item and adding it to basket. As you see you can add some customized label there:

http://demoshop.oxid-esales.com/professional-edition/en/Gifts/Purse-GLAM.html

So I think this is the way to go: bind this parameter to your custom design and make changes in template to reflect it.

Good luck ;)Tomas

thx tomas, this was the right hint!

i will include the design id (which will be a non guessable uuid that is generated ba the external online-designer-application) as a hidden field in the template;

additionally i can insert a preview -image, in the form of www.host.com/onlinedesigner/theUuid/preview.jpg

the only thing i missed is, when i clicked on the item in the basket i get back to the detail page of the article, but the text-inputfield does not get filled with the text i inserted into the field “Beschreibung” before; but its correctly displayed in the basket.

but now i know where to work on.

thx tomas&marco!

benno uwe buesch.

Just my 2 cents, you can find the bridge that marco talked about in the webservice connector http://code.google.com/p/oxid-webservice-connector/source/browse/trunk/Oxid-Webservice-Connector-No-Zend/php/bridge.php

Aggrosoft it intelligence GbR