<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><DIV>(oscommerce vs PmWiki)</DIV><DIV>Round 1: Fight!</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>I had my first experience with oscommerce and MAN am I pissed.  I ranted about it in my blog if anyone is interested (and YES, it mentions PmWiki) at <A href="http://www.eclectictech.net/etblog/">http://www.eclectictech.net/etblog/</A> (right now it's the 2nd entry since I put a delicious (food!) recipe in last night).</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Due to my horrific experiences installing oscommerce, and my joy and love of PmWiki, I'm thinking of creating a featured &amp; extensible product shopping cart feature for the PmWiki cookbook.  Beyond my little PayPal recipe/hack.  I had insomnia this morning thinking up the markup for it, how to handle products &amp; services for sale, product options, multiple vendors, etc.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>I got up and attacked my whiteboard, and came up with a markup idea similar to wikiforms.  It would allow multiple vendors on a single website (and even on a single page if needed) the way I have it figured out right now.  It looks good on the whiteboard -- markup-wise, but it would take a lot of work to program the back-end.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>So. Is there interest in a shopping cart system for PmWiki, with a lot of extensibility in mind?  I would be creating it as a cookbook plug-in.  How much need is there?  Patrick says he needs a shopping cart so I think it's time to toss ideas around.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>My idea:</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>(:metacart:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>(:cart XES1 seller=XES *other seller info here*:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                </SPAN>(:code XyZ type=item name="Product Name" amt=123.45 desc="Product description" pic=<A href="http://example.com/products/pic.gif">http://example.com/products/pic.gif</A>:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                        </SPAN>(:pic <A href="http://example.com/products/pic2.gif">http://example.com/products/pic2.gif</A>:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                </SPAN>(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                </SPAN>(:code YYz type=coupon name="Special Offer" math=* amt=.9 redeem="BuyMyStuff" expire=2006-07-28:)(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                </SPAN>(:code PQT type=item name="Wholesale Product" amt=40 desc="Description" exempt pic=url:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                        </SPAN>(:code DEF type=discount name="25-50" range=25,50 math=- amt=50:)(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                        </SPAN>(:code ABC type=discount name="100+" range=100, math=/ amt=2:)(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                        </SPAN>(:code GHI type=discount name="51-99" range=51,99 math=* amt=.75:)(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                        </SPAN>(:code NOP type=options name="Colors" select=1:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                                </SPAN>(:code RED type=option name="Red":)(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                                </SPAN>(:code BLUE type=option name="Blue":)(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                        </SPAN>(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                        </SPAN>(:code QHI type=options name="Size" select=1:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                                </SPAN>(:code 8oz type=option name="Small" default:)(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                                </SPAN>(:code 20oz type=option name="Large" math=+ amt=10.50:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                                        </SPAN>(:code GREEN type=option name="Green" parent="Colors" math=* amt=1.1 exempt:)(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                                </SPAN>(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                        </SPAN>(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                </SPAN>(:code SVC type=service name="Install PmWiki" amt=100 desc="description" exempt:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                        </SPAN>(:code Basic type=option name="Basic PmWiki Package" amt=250 desc="description":)(:codeend:)</DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">                </SPAN>(:codeend:)<SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">        </SPAN>(:cartend:)</DIV><DIV>(:metacartend:)</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Notes:</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>exempt -&gt; exempt from cart-wide coupons &amp; discounts, but you can still nest coupons for a particular product or item</DIV><DIV>math -&gt; the result is a calculation from the amount of the parent, use this mathematical function (* + - / maybe ^)  (parent_amount MATH amt)</DIV><DIV>range -&gt; the discount applies to order quantities within "range".   "range=100+" could be an alias for "range=100," since 100+ is more intuitive</DIV><DIV>redeem -&gt; the code the customer must enter to add the coupon to the cart</DIV><DIV>parent -&gt; under these circumstances add this option to the parent's matching option (in this case, when selecting the 20oz size, add Green to "Colors" -- and increase the price)</DIV><DIV>options -&gt; default display would be drop-down, "default" is selected, and a "display=" option for checkboxes, radio buttons, etc. can be added in</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>There needs to be more functionality, like tax settings, checkout options, and payment features, etc. but this is just a starting concept</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>The above would be read from markup into the $metacart array variable, processed by the cookbook, and spat out in HTML forms, I think.  The order can be tracked for the entire site as an array of vendorcode, itemcode, optioncodes, qty, etc.  Checkout across multiple vendors will be the tricky part, probably requiring separate transactions per vendor?</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>A copy of the resulting array from this concept for anyone who wants it, or I can post it to the list for the geeks out there :)  I only wrote out an array -- no parsing logic.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Is this either too complicated, or too short-sighted? LOL  A cart can be much less complex than the sample above -- I purposely wanted to show a bunch of options and concepts for nesting options, a product with 2 pictures, etc.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><P style="margin: 0.0px 0.0px 0.0px 0.0px"><FONT face="Comic Sans MS" size="3" style="font: 12.0px Comic Sans MS">Crisses</FONT></P> <P style="margin: 0.0px 0.0px 0.0px 0.0px"><FONT face="Comic Sans MS" size="3" style="font: 12.0px Comic Sans MS">----</FONT></P> <P style="margin: 0.0px 0.0px 0.0px 0.0px"><FONT face="Comic Sans MS" size="3" style="font: 12.0px Comic Sans MS">Regardless of what they do in the external world, multiples have created an elaborately rich internal one, and sometimes punishing the</FONT></P> <P style="margin: 0.0px 0.0px 0.0px 0.0px"><FONT face="Comic Sans MS" size="3" style="font: 12.0px Comic Sans MS">wicked outside the system just makes the wicked inside the system feel all the more like they need to be punished also -- as outside, so inside.<SPAN class="Apple-converted-space">  </SPAN>How hypocritical to expect that the externals who made huge mistakes must suffer for what they did, but expect the internals who made huge mistakes to be absolved....it doesn't work that way.</FONT></P></DIV></BODY></HTML>