106 replies [Last post]
Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422

Alrighty, folks. Let's do this. Cool

So, there's a long standing tradition of us opening the floor for input on ways Ubercart core needs to be improved as we dive into a new development cycle. This was primarily used during the rapid development of the 1.x versions as we were constantly adding core APIs and feature sets. Lately, the name of the game has just been "get a stinking 2.0 out", so battle plans haven't been quite so necessary. However, with 2.0 now in its third release candidate and the number of remaining critical issues approaching 0, it's time to be forward thinking.

Traditionally, mine and Lyle's core emphases have been on core issues and the community's input has come from desired features. I think this represents healthy thinking, as at this point Lyle and I tend to have the most intimate knowledge of all the core code and its shortcomings. Thankfully, this scene is changing, as community members like cha0s, TR, tcindie, neochief and others are fast becoming Ubercart core pros. In fact, some of you also have the same emphases for core improvements as you'll see in our list!

Your feedback at this stage will be invaluable, as we've surely overlooked some core systems that need some love. For the most part, though, we're painfully aware that many of the things on this list are essential for encouraging easier and continued contribution development. Feel free to +1 any of these things as continual headaches or add anything to the list. We'll be hanging out this weekend at an Uber-meetup in anticipation of Ubercamp 2.0 to refine our goals for the near future. We'll be keeping it close to core and continuing to focus on Optimization (revisit my Ubercart on Drupal 6 session for more info) and looking ever toward the future.

Without further ado...

Ryan and Lyle's Ubercart 3.x Battle Plans

Big picture: Develop on D6/D7 simultaneously, allowing API improvements in D7 to drive development forward in the D6 branch, but not implementing new features in the D7 branch. Work would still primarily be D6 based with a forward port in progress. The essential thing would be to nail the D6 version.

Lyle and I had a list of emphases, many of which we both "starred" as important. They are:

  • Introduce CCK (D6) / Fields (D7) dependency for products
  • Code comments / cleanup
  • SimpleTest coverage (100% coverage dependent on JS degradation)
  • Objectify cart, order, line items, etc.
  • Accordingly, turn products on orders into line items
  • Move order total preview from payment pane to order module and implement a single callback to calculate the line items

The following items Lyle starred and Ryan did not:

  • Redo shipping quotes, esp. on the checkout form

The following items Ryan starred and Lyle did not:

  • Simplify cart/order pane systems (good grief... hook_form_alter() anyone? Sticking out tongue)
  • Invoice templates (in theme layer)
  • Redesigned cart form (a la Shopify) + AJAX cart block
  • RDFa support for the product catalog

The following items were other core emphases that we want to see addressed but aren't set on them all happening to call it a 3.0:

  • VAT support in core (would most likely be better served as a contrib)
  • Improvements in theme layer
  • User-friendly CA UI
  • TAPIr UI
  • Operations links in core interfaces (for things like selling roles, node access, etc.)
  • CC API revision - see Ryan's http://www.paymentgatewaypro.com
  • #ahah and JS degradation (ahah_helper module dependency) - neochief is doing a great job here
  • Load all payment details on checkout form; no more AHAH for payment details
  • Remove .cif and replace with a universal country selection system
  • Unified add to cart form for products
  • Module based .tpl.php files where appropriate

So... you've seen our lists. What's on yours? Evil

tcindie@drupal.org's picture
Offline
Getting busy with the Ubercode.
Joined: 05/15/2008
Juice: 440
Re: Ubercart 3.x Battle Plans

I'd really like to see a flexible report building system, whether it relies on views or a separate stand alone reporting module. It would be great to be able to build a custom report based on any available data set.

Ideally, a drag and drop interface that lets you build as simple or complex a report as needed which could then be themed through a .tpl.php file and/or css, and would be assigned a menu path and have permission settings.

This would let you build reports to list customers who have purchased a given item, or all items purchased by a given customer -- within a date range, or over the lifetime of the site, etc.

Exportation of reports to various formats would also fit nicely into this, but I this is the one area I think is a bit lacking and would help promote wider acceptance of the ubercart system.

Might also be worth looking at a mass import/export utility to import or export product catalog's en-masse.. I see requests for that functionality come up rather often. Though that too may be best suited as a contrib.

Follow me on twitter.

Sam_RiteTimeDirect's picture
Offline
Joined: 10/20/2008
Juice: 96
Reports

I want to qualify my comments with the fact that I am really just and end user, although I did develop my site myself.

Having just launched my site, I found the lack of flexibility with the reports to be troublesome. At the end of an ordering day, I wanted to go to my supplier with a "shopping list" of all the products ordered. The only way I found to do that was to manually cut and paste the individual orders into another program (in my case Word). I thought the Reports section would be more user configurable.

Thanks,

Sam

andreiashu's picture
Offline
Joined: 05/18/2009
Juice: 21
tcindie@drupal.org wrote:I'd
tcindie@drupal.org wrote:

I'd really like to see a flexible report building system, whether it relies on views or a separate stand alone reporting module. It would be great to be able to build a custom report based on any available data set.

Ideally, a drag and drop interface that lets you build as simple or complex a report as needed which could then be themed through a .tpl.php file and/or css, and would be assigned a menu path and have permission settings.

This would let you build reports to list customers who have purchased a given item, or all items purchased by a given customer -- within a date range, or over the lifetime of the site, etc.

Exportation of reports to various formats would also fit nicely into this, but I this is the one area I think is a bit lacking and would help promote wider acceptance of the ubercart system.

Might also be worth looking at a mass import/export utility to import or export product catalog's en-masse.. I see requests for that functionality come up rather often. Though that too may be best suited as a contrib.

That is Views. All Views there Smiling Also the exporting bit: you can use Views Datasource to export Views in various formats Smiling So yup, already done. We just have to integrate UC with Views.

mikejoconnor's picture
Offline
AdministratorBug FinderGetting busy with the Ubercode.
Joined: 08/07/2007
Juice: 536
Re: Ubercart 3.x Battle Plans

Let me start by saying +1 to everything on the ryan/lyle list. Also, I think the most important thing we could work on during this release is community involvement. We should work on streamlining the issue -> patch -> review -> commit process, and work on getting as many people as possible involved. Ubercart's primary advantage over other shopping systems is the community, we should do everything we can to grow the community, and encourage it's involvement in UC3.

That being said, here are items I'm interested in working on for UC3.

General usability improvements. We have noticed a lot of stumbling points while working with clients, and during training. I think we need to make a lot of workflow / usability improvements. Although Tapir and conditional actions are a great start, we need to take a broad look at the things people do, and work on making them easier. A good example is adding attributes to products.

I would also like to work on the attributes system in general. To start with, every attribute should have an individual sku. I would like to see us drop the serialized array method we are currently using, however I'm still working on how we would go about that.

Theming could really use some love.

We should focus on product types. For example, currently it's assumed that products are shippable, unless you explicitly say they are not. Even if a product is not shippable, it has shipping fields attached(items per box, dimensions, default package type). In my opinion the default product type should have a price and sku. From there you could add shipping fields, download fields, attributes, etc.

I think we should stop using the term SKU. From my experience that term is not used outside of North America.

Finally I think we should work on improving the current api, and add xml-rpc methods for a number of common items.

There are other items on my list, but I think that's enough for now.

tcindie@drupal.org's picture
Offline
Getting busy with the Ubercode.
Joined: 05/15/2008
Juice: 440
mikejoconnor wrote:I would
mikejoconnor wrote:

I would like to see us drop the serialized array method we are currently using, however I'm still working on how we would go about that.

Normalization of the database. Rather than lumping all the related elements into one serialized entry in one table, you'd make a separate table for all those possible elements, and a third table that exists solely as a link between the id #'s of the two.

So, suppose I've got a product table that has product X with an ID of 4.

I've also got a table with a bunch of attributes X,Y, and Z with IDs of 7,12,and 34 respectively.

The third db table I mentioned about would have 3 entries to relate those attributes to product X,

P | A
4 | 7
4 | 12
4 | 34

etc.. yes, it creates a lot more tables in the database in the long-run, but the more things are normalized, the easier it is to combine pieces and pull out just what you're looking for quickly, and ultimately minimizes errors (human or otherwise)

Follow me on twitter.

ZeroIQ's picture
Offline
Joined: 03/02/2009
Juice: 18
Normalization of the database
tcindie@drupal.org wrote:

Normalization of the database. Rather than lumping all the related elements into one serialized entry in one table, you'd make a separate table for all those possible elements, and a third table that exists solely as a link between the id #'s of the two.

I haven't really used Ubercart 2.0 for very long, but I've found that when you get into product options and attributes things get a little more complex. I think having an extra table to handle the options and attributes would be a good idea.

At the moment if I have a T-Shirt that comes in both Red and Yellow I can use the uc_option_image module to assign different pictures to the options, but I think that only gives me one picture per option. The problem I have is I will have multiple images for each T-Shirt option.

So for example the product is a T-Shirt that has the Attribue Colour and the Options Red and Yellow. Each one of those options will have a Front and Back view of the T-Shirt.

If this Attribute Option table could have a field to handle one or more images that would be really useful.

TutusForToddlers's picture
Offline
Joined: 11/17/2007
Juice: 158
Great work Ryan and Lyle. I

Great work Ryan and Lyle.

I agree that adding attributes to products is currently a pain and very lacking.
How attributes are assigned and handled needs to be improved. They are the biggest issue I have.

Thanks,
Claire
Tutus for Toddlers sells Tutus using UberCart for e-commerce with Drupal.

xibun's picture
Offline
Joined: 05/13/2009
Juice: 104
keep it light & SKU

keep it light!
I think the most important is to keep the core light and easy to extend (tons of hooks). I hope to see many of the ideas above go into Uber-core - but I think the community doesn't need the full function, just the foundation.

In the same line of thought I suggest to remove third party plug-ins from core distribution. Thinking of USPS, UPS rates and non generic payment methods and gateways.

@mikejoconnor:
To experts in commerce, logistics and operations SKU is known in Europe - but it doesn't speak to end consumers.
(maybe it does speak to consumers in the UK, but in the rest of Europe I think it doesn't)

therefore to me it is ok in the admin interface - but it shouldn't get to the final customer.

any comments from the UK?

Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
Re: Ubercart 3.x Battle Plans

Good ideas coming. I did totally forget reports on the lists! Also, I noticed someone just posted in this old thread on theming improvements and figured it would be good to link it in. More food for thought.

Abilnet's picture
Offline
Uber DonorBug Finder
Joined: 12/28/2007
Juice: 718
Re: Re: Ubercart 3.x Battle Plans

Great battle plan Ryan, thanks. I'm personally most interested in improvements of Business Usability of Ubercart... ie. how to make Ubercart chopping a pleasant experience with a quick and easy to understand checkout -process... and that is automagically resulting to more business.

Simple checkout

Amazon, with all the muscles and knowledge behind, is one of the effective shops around to keep on eye. However, when I just took a look at the checkout -process of Shopify (thanks Ryan for the tip) I found it amazing effective from business point of view! So, also from me a big +1 for making the checkout -process very simple and straightforward (at least with options to get rid of all unnecessary elements of checkout)

More attention to buttons

When I browse around different chops and add something to the cart, it's often difficult to see what next? So, it would be a great business & usability booster, if the buttons in Ubercart have some settings to change their colour, size, text, or even background image.

Cart block

Often it's difficult to spot where to cart -block is located to verify its contents. It would be a great usability improvement, if the cart -block is changing its background when client adds the first product in to cart (settings for colours) ...then he knows exactly, where the cart & checkout links are and where to click for checkout when he's ready.

Reporting

Yes... with reporting, it will help a lot easier to understand what's happening in the shop. Specially I can see a lot of use of a report showing how many are quitting the cart. Then I'll immediately get a relative percentage to keep on eye (then make some changes and see how it helps or not etc.)

Summa summarum

Small things in usability can make a big difference in results. One shop, for example, had all those shiny side blocks active during checkout. I recommended the shop owner to get rid of them... finally he took some action and immediately his business went up like crazy - almost three times more real money with the exactly same number of visitors.

My 2 centimos from Sunny Spain Smiling

tcindie@drupal.org's picture
Offline
Getting busy with the Ubercode.
Joined: 05/15/2008
Juice: 440
Abilnet wrote:Specially I
Abilnet wrote:

Specially I can see a lot of use of a report showing how many are quitting the cart. Then I'll immediately get a relative percentage to keep on eye (then make some changes and see how it helps or not etc.)

You can actually do that now, if you set up a goal through google analytics. Basically you would set up a start page, and an end page (end page being the successful checkout) and the start page could be the cart, or the first checkout screen. analytics will then calculate the percentage of people who actually go all the way through to order completion (successful conversions) vs. those who abandon their cart.

Of course that's not a built in method, and the results aren't available as a report within your drupal/ubercart setup, but it's an option until something else can be set up. Analytics is pretty great anyway, so there's really no reason not to use it. Eye-wink

Follow me on twitter.

Abilnet's picture
Offline
Uber DonorBug Finder
Joined: 12/28/2007
Juice: 718
tcindie@drupal.org
tcindie@drupal.org wrote:

...Of course that's not a built in method, and the results aren't available as a report within your drupal/ubercart setup, but it's an option until something else can be set up...

Yes, that was exactly my point - to have an integrated reporting, maybe even get the data integrated to some graphical interface, like:
http://drupal.org/project/charts
http://drupal.org/project/fusioncharts

harrisben's picture
Offline
Joined: 04/17/2009
Juice: 192
Re: tcindie@drupal.org

I haven't been involved with the Ubercart community for long so I'm happy to see that the development process for the next version is so open.

Attributes are a great feature and I'm so glad that the lords of Ubercartness included them. The idea of having options of attributes have unique SKU's/code's is a good one and will go a long way to overcoming the lack of support for attributes in the stock module (ie how can you track stock if you have no ability to identify it).

My pet project though is better support for attributes in product kits.

  • Being able to allow or disallow the ability of the enduser to modify specific options on an option by option basis at the kit creation level (The current system exposes all options of a product kit component to the enduser and they can change any of them)
  • Specify which options are allocated to the kit if it cannot be changed by the enduser, or specify the default if it can
  • Allowing for certain options to affect the price of the kit
Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
Re: Ubercart 3.x Battle Plans

Linking in another thread with some useful input. This one touches on issues related to multilingual sites that abstracting products from nodes through the planned CCK dependency might help out.

Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
Re: Ubercart 3.x Battle Plans

I realized after reading Dries' blog post on Google and the semantic web that I totally left out one of my "Big Ideas" (TM) for the future... a semantic shopping cart. We need to expose product data at the very least using the RDFa protocol currently being implemented through Drupal core. This means our job is being made even easier as I type, and it will take that much less work for Ubercart to be compliant. How cool would it be to have the first fully "semanticized" shopping cart system? Drools... Laughing out loud

harrisben's picture
Offline
Joined: 04/17/2009
Juice: 192
Re: Re: Ubercart 3.x Battle Plans

I hereby declare semanticized to be a word. Of course, it's actually spelt semanticised Sticking out tongue Anyway, it sounds like a painful operation they perform on newborns...

Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
Re: Re: Re: Ubercart 3.x Battle Plans

hah! Would it be enough to spell it with the z in the US and the s in the UK? Eye-wink

I don't suppose my forthcoming daughter will have to have the operation?

scor's picture
Offline
Joined: 06/09/2009
Juice: 2
Re: Re: Ubercart 3.x Battle Plans

As an example, you might want to look at the Best Buy Local Stores platform which just switched to Semantic Web (RDFa and RDF/XML) using the Good Relations ontology.

Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
Re: Re: Re: Ubercart 3.x Battle Plans

Thanks a lot for the heads up, Stéphane!

adamo's picture
Offline
Getting busy with the Ubercode.
Joined: 02/17/2009
Juice: 229
Re: Ubercart 3.x Battle Plans

It may seem trivial/nit-picky, but I would like to see form_set_error() work as expected for forms in Ubercart checkout panes. Currently form fields with errors do not get highlighted if they are in a checkout pane loaded via JQuery. From an end user perspective, having consistent looking forms is a pretty fundamental thing. It looks pretty unprofessional when form fields on the same page behave differently.

RSTaylor's picture
Offline
Joined: 04/02/2008
Juice: 99
Re: Ubercart 3.x Battle Plans

+1 to revisiting the attributes/options. Great feature, but currently very difficult to use or explain.

I would really like to see multiseller capability in the next version, or at least some adjustments to core that would make it easier to add as a contrib module or roll in with Ubercart Marketplace. Doing this currently requires overriding (duplicating) a lot of code to make relatively small changes like adding a foreach loop or adding a seller id.

I would also like to see a few more hooks and callbacks to make customization easier. For instance, in uc_paypal_ipn, there's a switch statement that logs Paypal's transaction status and does a few things on some statuses (such as completing an order on 'Completed'), but there's no way to hook in and, for instance, fire off a notification if the status is 'Failed' or 'Denied'.

And I'd like to see theme_uc_catalog_browse() reworked. There's too much going on in that function, and although it can be replaced with a Views view, it would be better if it didn't need to be overridden.

end user's picture
Offline
Joined: 01/11/2008
Juice: 904
Re: Ubercart 3.x Battle Plans

I would like to see the ability to give each attribute a discount. Say when I'm using attributes to sell different product sizes like selling liquid products with different bottle sizes. Instead of having to create a different product for each size I use attributes for the main product and each bottle/box size is and attribute with a different price but currently it seems that discounts can only be applied to the main product and not the attribute. This would save on having to create a lot of redundant product pages.

Also the ability to have multiple pricing would kick ass reatail/wholesale or per role. I think most of the carts have this implemented already or at least in module form.

univate@drupal.org's picture
Offline
Getting busy with the Ubercode.
Joined: 03/27/2009
Juice: 465
Re: Re: Ubercart 3.x Battle Plans

Rather then any specific new features I would like to see a focus on improving what is there now so its easier to extend via external modules. I know these have already been started above but my vote is for these types of issues:

* Better separation of html from code - ie: moving all html output into *.tpl.php files, specifically things like the catalog and invoices
* Simpletest - this is really essential for this project, its just to too large to test everything manually.
* Better integration with views (that way we can just build our own reports)
* cck and/or field (D7) also a great idea so we can take advantage of RDF etc..
* I'm keen to see more on Ryan's Payment gateway ideas (I think payment gateways should be all objectified

Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
univate@drupal.org
univate@drupal.org wrote:

Rather then any specific new features I would like to see a focus on improving what is there now so its easier to extend via external modules.

In the little Uber meet-up yesterday that was exactly my sentiment. We want Ubercart to grow and more developers to interact with the code, but some of the APIs in there are relics that people have to struggle with nowadays instead of leverage. We might need to start a thread just to tease out all the ways that the current APIs are deficient, though a lot of that is in the battle plans above.

Jes reminded me of my old roadmap thread, and in there the basic roadmap was "Foundation. Optimization. Innovation." Personally, I'm super eager to get to that third step, but Ubercart 3.x will still primarily be an optimization release and development cycle. We're optimizing code and community processes for efficiency, collaboration, and our current understanding of Drupal and development in general. I'm excited. Laughing out loud

univate@drupal.org wrote:

I'm keen to see more on Ryan's Payment gateway ideas (I think payment gateways should be all objectified

So, I actually had more info on Payment Gateway Pro that I wanted to post up there but then lost track of it. I e-mailed it to another payment buff for feedback and we somehow failed to connect. I'll post what I have on http://www.paymentgatewaypro.com. The idea is to develop a library of code that Ubercart will use as its payment engine but that is usable by other projects or as a stand-alone script as well. Could be big, ya know?

CpILL's picture
Offline
Early adopter... addicted to alphas.Getting busy with the Ubercode.
Joined: 08/08/2007
Juice: 549
Hey, Good to see the

Hey,

Good to see the Uberteam crowd sourcing for ideas. When you get a final list for UC3 (i.e. a spec to work to) perhaps you should make a poll and see which feature people want the most, like Wordpress has done with its Ideas section.

Things that I've been struggling with and have been involved in developing answers are, and which are related:

Attributes separate from core product

This is the core of the apple and its messed up and has lead to lots of hacking. I think the design of the 'Product' need to be rethought and attributes unified with the core design instead of a tack-on.

I would say that SKU should be used as the primary ID for products, and the current idea of a "product has attributes" needs to be turned around to "products aggregated together into a single entity". Attributes are just a concept and SKUs are the actual products. You sell a quantity of a SKU not the combination of attributes.

Perhaps each SKU should be a Node and aggregated together under a parent node? Products are then just Price + SKU (perhaps as a combo CCK field?). I think Shopify has a separate product page for each 'variation' and groups them into one "product" with tags. This would be easy with taxonomys, a term for each "product"...?

SKUs and the adjustments table

The adjustment table is an abomination of relational database design and needs to go. See any DB design book.

Its also the symptom of the poor handling of attributes.

Importing product data

Import/Export, one might think, would be a core feature of a "Content Management System" but its notoriously difficult in Drupal. With UC its difficult again because of the attribute system. Mainly because the attribute combos are not Nodes and thus outside the Drupal way of doing things. Its a tricky design problem and needs the be addressed.

Multilingual support

As Ryan noted, its been discussed already. I think that UC will have to go its own way with this however as I don't think the idea of cloning a node for translation is a good idea in general and just translating specific fields is a better idea. Particularly since more of the time its just the Title and Description that need translating

Hope...

I guess I've been a tad harsh but these "issues" have stolen large chunks of my life and are the core problems that must be solved if UC is to have a future. I'm also not the first here to mention them.

In the end bad design decisions in the core of a system, if not dealt with early, will be built on and built on until they are too hard to change and everything written on top is forced to be a hack to work around them. There are already many hacks in UC to work around these problems, and worst of all they just make code for UC no fun!

I feel the Uber-team have much experience with the issues now and have a strong community to help find the way.

I also cheer:
+ workflow / usability for the end user.
+ separate shipping from code product data.
+ rename SKU to something more universal (or make it translatable?).

p.s. perhaps look at UBL for some modelling ideas (even if its not 'online' oriented).

Uberdevelopment www.tsd.net.au/blog

j0rd's picture
Offline
Getting busy with the Ubercode.
Joined: 07/16/2008
Juice: 452
Re: Hey, Good to see the

I'm interested in an overhault of the attributes/options UX and backend. I'd like the ability to associate extra information with attributes/options like images/descriptions.

I'd like "Multiple Seller / Single Store" mentality from Ubercart Marketplace adopted in UC3. As mentioned above, it's essentially just requires adding the sellers UID, then separating privileges of editing all vs. editing own products/attributes/options/stock/shipping. If you design UC3 with this idea in mind, a lot of stuff gets abstracted a little further.

SKU's should get re-looked at. This is some what related to the attributes/options overhaul. Keep in mind, since I would like to see multiple sellers creating their own products in the store, I believe SKU's should not be unique per store, but unique per user or node. What if two sellers are selling the two products which happen to have the same SKU.

Create a unified "is in stock" hook.

Allowing repetitive "end user setup" things to get done by default, and able to be adjusted in the admin. Things like making pages/info available, which most processors require of your site before you can get authorized to sell. See example list for Moneris. Paypal has some too:

  • Display of card association logos (e.g. Visa, MC) Already Does
  • Terms and Conditions, and export or legal restrictions should be visible either at check out with total purchase amount or sequence of pages during checkout
  • Privacy policy is clear and concise with disclosures on what information is collected and tracked and with whom it is shared
  • Return/refund Policy described in full details so cardholders know their options before purchasing the product/service
  • When completing an order cardholder is required to either “click to accept” or an affirmative action
  • Customer Service contact including electronic mail address or telephone number
  • Address of the merchant’s permanent establishment
  • Display a receipt page, after the Cardholder confirms a purchase. The display of the receipt on the screen must be printable
  • Currency of transaction provide (USD or CAD)

Also Include documentation on why Ubercart is "PCI Compliant" in "core".

Extend uc_googleanalytics to include more advanced and robust analytic data such as Goals. Provide documentation on how to set it all up.

Make enough new reports to satisfy 80% of the peoples needs. When time allows, improve/extend the reporting system to allow end user to create their own reports (other 20% of users or add data sales into views and allow us to easily create/share reports.

Change catalog stuff to views. This allows us to easily add/remove field. Sort fields. Theming gets even more abstracted. Require views module as dependency.

Better catalog browsing. Add sorting for name,price,attributes. Would recommend integration of facetted search ideas for this, as it's a much better way to search/sort a catalog.

Improve the default node-product.tpl.php for products with short descriptions and multiple images.

CC API Revision with robust support for recurring payments and roles. Abstracting and creating a stand alone API would be fine in my books. This would allow users outside ubercart to extend that code to support other payment gateways and ubercart would then support these as well.

100% automated testing coverage in core.

Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
Re: Re: Hey, Good to see the

Excellent feedback! You guys are totally motivating me, and it's great to hear your brainstormings and core criticism. I promise it's constructive. Laughing out loud

@CpILL:

I didn't feel your comments were harsh at all; exactly my thoughts and definitely helpful. I'd love for these things to be fixed in core so you can have the extra time to enjoy other things.

We did a little brainstorming at the Uber meet-up over the weekend. There seemed to be a consensus that we need to abstract the core of what it takes to be a product away from the node. The node would then become a display of a certain product. Attributes could then be subdivided into the kinds of attributes that associate multiple products together (without having to create a blue million nodes for something like an apparel store) and the kinds of attributes that describe particular instances of a single product (like an inscription on a plaque or menu items on a meal). I think your thoughts are almost spot on with what we determined in our brainstorm, except for the bit about upgrading SKU to node status.

We tossed around thoughts on Import/Export and couldn't come up with a good core solution. To be honest, it's almost like someone just needs to decide to run a business devoted to converting stores into Ubercart from carts like osCommerce and Zencart and use that to develop the import/export engine in contrib space. I'd love for us to have basic core support, as it's definitely expected and would be helpful, but at this point it'll probably mature faster as a contrib. Of course, at the very least it depends on core modules having reasonable APIs and DB structures.

Last, as far as I'm concerned, you're part of the team. Eye-wink

@j0rd:

It seems like there's some good overlap in your thoughts and CpILL's related to attributes. The advantage of having attributes functioning as associated products is that it could open the door for a more e-Commerce like sub-product approach that would allow you to specify unique images and fields for associated products. I haven't considered it much more than that, so I won't say much more atm.

I like your ideas on simplification of routine setup tasks. I wonder if some of these things could be incorporated into UberDrupal? Or perhaps there could be a store setup wizard module that UberDrupal installs by default and redirects people to upon installation.

I'd also welcome your help on the Payment Gateway Pro idea... still need to post my brainstorms up there. But definitely, the pay off of having the PHP world at large contributing and supporting new payment gateways would be huuuge for Ubercart. I'm interested in your thoughts on the Google Analytics module as well. Do you suppose your extra ideas could reside in a contrib module and still function appropriately? Or is the core GA module not operating in a way that would enable that? If we're not talking about crazy extra amounts of code, it might be worth pursuing new features to that module with you doing some maintaining of that module at the core level. Feel free to PM me to pursue that further. We can always look into something like we've done with univate and the recurring module, though I'd want to retain basic GA support in core as it's an easy win.

CpILL's picture
Offline
Early adopter... addicted to alphas.Getting busy with the Ubercode.
Joined: 08/08/2007
Juice: 549
Hey Ryan, Sounds like we're

Hey Ryan,

Sounds like we're all on the same wave length. The reason I was thinking that 1SKU=1Node was because in Drupal, as soon as you assume a NID you gain all the advantages of being in Drupal i.e. taxonomy, CCK, Views etc for free. You can integrate with them but with extra work and you have to keep up with the API changes.

I guess the alternative is to make a product a special CCK field combo of SKU+Price and any Node that has these attributes can be checked out, but then how do you handle attributes unless you have a node for each attr. combo so they can have a unique SKU?We're trying to create a n-dimensional matrix of SKUs (where n = number of attributes) which have have one title/description and where Price, Picture is dependant on one or more dimensional-axis (i.e. Colour).

Tricky. Attributes are the biggest modelling challenge to any shopping cart system can how you can tell a good one from a bad one, I think.

p.s. I've attached a ER diagram showing the existing way Attributes work in UC2 (I think this is right) and how the existing Adjustments table should be Normalised (but only as a short term fix).

AttachmentSize
bercart ER diagram from existing DB.jpg 121.84 KB

Uberdevelopment www.tsd.net.au/blog

splash112@drupal.org's picture
Offline
Joined: 04/01/2008
Juice: 406
Re: Hey Ryan, Sounds like we're

Translatable products without trashing the database with lots of duplicate information would be great!

Wondering if an approach like:
http://drupal.org/project/LangsAtOnce

Would possible work?
Keeping nodes/sku's/products together by just adding new title and body fields.

Regards
Mark

ron_s's picture
Offline
Joined: 09/11/2008
Juice: 173
Re: Ubercart 3.x Battle Plans

I'd really like to see some cross-sell / up-sell functionality. To start, it could be something simple, such as an administrative form that allows relationships to be defined between products. Then when a particular product is displayed to a user, cross-sell products would be shown in their own summary block. This same functionality could also be used to showcase the more "advanced" version of a product (up-sell).

I'd also like to see this same type of functionality on the checkout page. From what I've seen, pizza places do a good job of this on their websites. When you're in checkout reviewing your order and entering payment info, they present an option to immediately add chicken wings or soda to your order. Don't have to leave the page, just click the button and it is added.

In the future, you could write algorithms so the functionality has intelligence, where users are presented with cross-sell and up-sell opportunities based on the purchase habits of others (rather than having to hard-code relationships). Amazon has done an amazing job of this, having collected data over the years and leveraging it to present users with other products they would be most interested in buying.

adamo's picture
Offline
Getting busy with the Ubercode.
Joined: 02/17/2009
Juice: 229
Re: Re: Ubercart 3.x Battle Plans

@ron_s: There is already an Upsell module that does some of this. IMO this functionality should stay in that module. I'd rather see the core API tightened up and expanded to make it easier for people to write contributed modules, and let those contributed modules deal with stuff like this. If cross-sell/up-sell functionality is implemented in core, then we can't just write our own upsell modules if we want to do something different. We either use what's in core or we have to hack it, which sucks. If Ubercart is more modular, a wider range of functionality will be possible without having to hack core.

zmove's picture
Offline
Bug FinderEarly adopter... addicted to alphas.Getting busy with the Ubercode.Internationalizationizer
Joined: 08/13/2007
Juice: 1192
Hi Ubermates, Long time I

Hi Ubermates,

Long time I didn't post here, but I continue to closely follow the Ubercart Project Eye-wink

I like the battleplan. More Ubercart will be close to Drupal core, better will be the product.

Today, there are a lot of things that ubercart could get rid and would use a little more drupal Core API to do the same things, but with a better flexibility and usability.

Here is the battleplan I would write if I were a core member of the Ubercart Project :

  • Product more inline with core
    As you said, dependency of "fields" of D7. But I would remove product class UI (it just create some new content type, so add a checkbox in the content type add/edit form to make it product instead of creating a content type UI. It will be better to maintain, and drupal users will not be lost).
  • VAT Support in core
    There are 2 things that broke my head with ubercart. The main one is the tax management. A big part of the world use different tax system that ubercart planned at the begining. This is, IMHO, a too important issue to let it managed in a contribution.
  • Better attributes management
    The second thing that make me blaspheme is the attribute system. On the begining it was not a part of the node object, needed a custom and not very flexible API... Now it's a part of the node object thanks to zmove's patch x_x. I think the next step is to integrate them with "fields" the next "CCK". To be able to define any CCK field as a product attribute.
  • Order as node
    The order system of ubercart is pretty good, I remember the line items nightmare of the begining of the project, it was tricky Eye-wink. I think the next step it to make orders more inline with drupal and transform them as node (with "fields" to manage shipping and billing address...) all fields of an order could be easily added or removed using "fields" possibilities. Ubercart would juste create a default order node with some default fields, and drupal would do the rest.
  • Stop CA, love Rules
    Rules is awesome, fago is awesome, Ubercart is awsome, Ubercart team is awesome. Why all these awesome people don't work together ?. I think Ubercart would be definitely more user friendly and inline with drupal by using the excellent Rules modules instead of providing conditionnal action. This is a long discussion, I know Ubercart team position to try to not have some dependencies, but I'm still a rules and a non-module duplication supporter
  • Stop Catalog, love Views ?
    Another thing I would like to see improved the views integration. I already know the Ubercart position too to have an out of the box catalog for non drupal users, but with some good default views and a better view integration all the UI will be better, more centralized and easier to tweak.

I would add that, for me, in a perfect world :

  • Product would be nodes, all product stuff would be provided by "fields" (attributes too) and all product display would be generated with views (even the admin ones)
  • Same things for order, (imagine you can create your custom order admin just by tweaking some views).
  • Rules would manage all conditions / actions things of drupal, with a big panel of possibles conditions and actions for ubercart to manage complex discount, complex shipping etc.... out of the box
  • There would be VAT management in core to stop to fear when you begin an ubercart project and you are european Eye-wink

I finally would add that even if I write a lot of things when we talk about Ubercart improvements, this is an awesome project made by an awesome team. Congratulation guyz, you made somethings very good and creating a nice community around it.

I will continue to follow this project, for sure Eye-wink

Docc's picture
Offline
Getting busy with the Ubercode.
Joined: 07/03/2008
Juice: 168
Just my 2 cents. - Better

Just my 2 cents.

- Better multilanguage support (read total rewrite)
- Support for invoice payments
Let users pay there invoices outside the order traject.
- Views
- Altough CA is good, rules is better.

Thats my top 4 list Smiling

jasonabc's picture
Offline
Uber Donor
Joined: 05/05/2008
Juice: 573
Re: Just my 2 cents. - Better

UberCart is a great app - my hats of to Ryan and the team. For me though - there are four really big holes in it that IMHO need filling fast:

1) Attribute handling - specifically editing attributes that have been assigned to product classes. If you change the class on the back end (say remove the "Large" attribute from your "Size" option) - the products that belong to that class are not updated on the front end. This means I have to go in and pull this option out of each product individually which is a huge pain - especially for stores that have a lot of products using that class.

2) A way to place products on sale (and display the full price with a strikethrough and the sale price next to it ($20.00 $10.00) is an absolute *must*. I can't believe UC does not have this functionality built in.

3) There really should be a mailing list opt-in check box in the UberCart checkout area - otherwise I have a big customer database but can't mailshot any of them because I don't know who wants the newsletter and who doesn't - not good.

4) Shipping modules. The lack of a Table Rate module in core is extremely surprising. Also a way to ship using multiple methods (Ground, Express) etc to multiple zones (domestic & international) has got to be included. Most of my clients want to set their own shipping rates, most of them use several methods and most of them ship domestic and international. Currently UberCart can't handle any of this.

cheers

Jason

RSTaylor's picture
Offline
Joined: 04/02/2008
Juice: 99
jasonabc wrote: 2) A way to
jasonabc wrote:

2) A way to place products on sale (and display the full price with a strikethrough and the sale price next to it ($20.00 $10.00) is an absolute *must*. I can't believe UC does not have this functionality built in.

Products have a list price and a sell price; you could set list to $20 and sell to $10, and fairly easily theme it however you want (with strikeout, "50% off!", or "Save $10.00!"). But I agree that for the most common options, this should just be there as a formatting option, you shouldn't need to edit your theme. Core already has the list price field, so I don't think a contrib module should be needed for it.

jasonabc's picture
Offline
Uber Donor
Joined: 05/05/2008
Juice: 573
Re: jasonabc wrote: 2) A way to

many thanks for the response Eye-wink Will use the list price and sell price fields and tweak my theme and hope this simple and much needed feature makes it's way into future UC releases.

andreiashu's picture
Offline
Joined: 05/18/2009
Juice: 21
Re: Ubercart 3.x Battle Plans

What I would really like to see in the next version of UC is a better integration with tools that are already built and tested (CCK, Views, Rules) and better communication between UC maintainers and maintainers of these good modules. I think solutions like Catalog and CA already proved that they aren't the way to go. It is sad to see that Ryan and Lyle still have CA in their to-do list for UC 3 instead of Rules. I still don't see Views in that list which is also a big surprise for me because it is so damn better than Catalog - many times better in terms of flexibility, themeability, support and so on.

I'm also thinking that if we adopt these modules then their maintainers and maybe part of the community around them would hook in and try and help out(when we need it) - there is already a post here where Fago expressed his support for Rules integration in UC, back when UC2 was being developed.

Trying to make UC more user-friendly is a noble idea (which I support) but don't forget that Ubercart users are Drupal users in the first place - most of them already used with popular modules like CCK, Views and probably Rules (if not they will get). So having custom tools like CA and Catalog to replace those modules is bad for Clients and specifically for developers.

  • Better API
  • Better documentation
  • Rules
  • Views
  • Support for dynamic attributes (please)
  • Me doing my best to help Ubercart become a better Ecommerce solution
  • Learn from others mistakes (other OS Ecommerce solutions)

This is what I don't agree with

  • User-friendly CA UI - we can help Rules be friendlier instead of reinventing the wheel
  • Catalog - Views is better, more flexible and better support, documentation, etc
Ryan's picture
Offline
Joined: 08/07/2007
Juice: 15422
Re: Re: Ubercart 3.x Battle Plans
andreiashu wrote:

It is sad to see that Ryan and Lyle still have CA in their to-do list for UC 3 instead of Rules.

For what it's worth, I included this because it represents incrementally improving what is there without a complete rewrite (since rewriting is already expected all over much older modules), not because I think this is the only way to go long term. amitaibu has been hoping for some time to devote time to Ubercart -> Rules integration, and I invite you to join him. Just because we don't have time to specifically focus on it doesn't mean you (or others) can't make it happen. Eye-wink

andreiashu's picture
Offline
Joined: 05/18/2009
Juice: 21
Ryan wrote:For what it's
Ryan wrote:

For what it's worth, I included this because it represents incrementally improving what is there without a complete rewrite (since rewriting is already expected all over much older modules), not because I think this is the only way to go long term. amitaibu has been hoping for some time to devote time to Ubercart -> Rules integration, and I invite you to join him. Just because we don't have time to specifically focus on it doesn't mean you (or others) can't make it happen. Eye-wink

Great ! Thanks for the explanation. I'm starting to understand more about UC community these days. I'll do all my best to make this happen (UC + Rules).
Cheers!

quaoar's picture
Offline
Bug FinderEarly adopter... addicted to alphas.Getting busy with the Ubercode.Not Kulvik
Joined: 08/08/2007
Juice: 179
Re: Ubercart 3.x Battle Plans

I'm actually not sure if this is in UC2, been working (too much) on UC1 installations lately, but I would like to see a hook for when you change an order item. Or is there already an easy way to identify a changed/added/deleted order item and act on this?
Operations which I'm faced with now when user or store admins change order items (products) on submitted orders:
- credit part(s) of a credit card transaction
- increase / decrease stock on items
- submit changed/new data to ERP system

Other than that UC kicks so much a##, that I don't think anything needs to be changed... Ever! *cough* =)

I know that we have done a lot of small hacks in UberCart core on several of our projects.
From the top of my mind I can remember that we added a check box to every line on the admin/store/orders/view page. So that a store admin can change the order status of several orders at a time - been very useful on high volume sites.

Erlend Strømsvik
Ny Media AS
erlend@nymedia.no

zeezhao's picture
Offline
Joined: 04/23/2008
Juice: 956
Re: Ubercart 3.x Battle Plans

In addition to all the great suggestions above, I would like to add/second a few that spring to mind:

1. orders
- ability for customer to add comments to an order after checkout. Useful for adding info like e.g. manual payment details made to a bank offline, etc.

- ability for customer to pay for an order (or invoice) when created by admin

2. multi-currency in core?
- with ability to maintain historical purchases at the historical rates.

vincew's picture
Offline
Joined: 01/21/2009
Juice: 153
Re: Re: Ubercart 3.x Battle Plans

Hey all... good to have an opportunity here to give some thoughts about the Next Generation UC here....

I've a few items to add, based on my (relative young) experience with UC, and my other working life Smiling. They are not feature request .., but merely some basic and/or organisational questions/remarks...

  1. Keep Ubercart Core the Core of Ubercart. Meaning provide a core delivering the basic functions need to have ubercart running. Meaning prove provide a robust, solid API interface where other modules can communicatie with.
  2. Development of core-related modules. Meaning keep the core the core (see 1.) develop sub-core-modules, for instance: VAT-module, of Reporting module. That way sub-core functionality can be provided on a 'market based demand' while core development can concentrate on the core...
  3. Think global, Act local (don't remember who said that before, but it's appropriate now I believe). Some specific regions have specific needs, f.i. Different VAT laws, different TAX reporting obligations, different rules/regulations on invoice layout, etc... Ubercart core in my opinion should facilitate such needs, (global) but local provision should be considered a key issue here.
  4. Keep the code (and the implementation) in line with D6/D7. There was a discussion on wether or not having orders differ from Drupal nodes here.... http://www.ubercart.org/forum/selling_services/8601/selling_service_item... Perhaps this is the time to review this item again. More compatible with D6/D7 gives more developers an opportunity to 'hook' into uc coding

One example (willing to provide more): A semantic Ubercart is in my opinion a great idea, but.... not to work out in the Ubercart core. Provide in the core an API for it, and at the same time devellop a sub-core related symantic module....

Best,
VinceW

PS: Updated my post after some restless hours of thinking about it (again) Smiling

-=[ Your Information Matters ]=-

(You may use my personal contact form to discuss drupal/ubercart work.)

maboleth's picture
Offline
Joined: 05/11/2009
Juice: 18
My current wishlist: -

My current wishlist:

- Ubercart needs better internationalization capabilities (a shop with 2, 3 or more languages) that can be easily used and activated. The current ubercart localization project is not very good and not actively maintained.

- Develop "other" paying methods, so the webmaster can totally customize the way of collecting payment.

sime's picture
Offline
Joined: 08/14/2007
Juice: 19
really not just focussing on D7?

Hey Ryan et al. Congrats on Ubercart 2. It's been a breeze to implement, and scarcely lacking a feature I can think of.

Question -- With D6 is your "essential" focus, do you think you're preventing deep architectual goodness in the D7 branch, if you have to dumb some things down to work the same in D6?

To put it another way, my immediate reaction was shock that you don't just let UC2/D6 stabilize and focus exclusively on D7. Reading further I understand a bit better, but the feeling still persists.

Anyroads, I wish ye well Smiling

xibun's picture
Offline
Joined: 05/13/2009
Juice: 104
focus on Drupal 6 or Drupal 7?

as I'm fresh here my vote is small - but I would give it for the following scenario:
- implement some low hanging fruits into an Ubercart 2.1 for Drupal 6
- save all the rest for Ubercart 3.0, Drupal 7

why?
- some features reach the community earlier when released in a v2.1
- probably can avoid some redundant work having v3.0 only for D7, thus it would be ready for D7 earlier

adamo's picture
Offline
Getting busy with the Ubercode.
Joined: 02/17/2009
Juice: 229
I'm with xibun. There are a

I'm with xibun.

There are a lot of small things that can be done to improve Ubercart. I'd like to see a lot of these smaller things done in minor versions in D6/2.x. Save all the major paradigm shifts for UC3/D7.

thenorman's picture
Offline
Joined: 06/16/2009
Juice: 2
First and foremost, 1.

First and foremost,

1. The most important item to address should be the database normalization and standardization. This is a database driven application...
a. Uc_orders stores the address I think at least 3x.
b. weight/currencies are not stored in a base item format.
U3 should really be set on the minimalist element of the number system such
as grams or ounces or dollars and francs.
c. Products and pacakages and such should be referenced from the node, and not
node themselves. Thus, allowing a more traditional, more workable dataset to be used.
d. Users that wish to use other systems for stock management, accounting, etc..
should be able to interface with an abstract driver to their existing systems.
2. Product & Attribute Dynamics
This concurs with the aforementioned normalization of the db. Attributes and other product attached items should be able to dynamically be added to each product.
3. Core APIs for basic store functions.
4. Documentation, Documentation, Documentation
5. Code Standards, Code Standards, Code Standards. Comments, E_ALL, E_STRICT, Read some of the core code, and try to explain what happens.
6. I have a list, Sticking out tongue

Docc's picture
Offline
Getting busy with the Ubercode.
Joined: 07/03/2008
Juice: 168
Re: First and foremost, 1.

For the multilanguage aspect. A choice has to be made.
ATM multilanguage an UC is impossible because of the translation nodes drupal creates.

UC can go its own way on translation (field translation?) and circumvent drupal core translation nodes.

Though my opinion is to stick to the drupal core and go with the flow.
In that case im in favour of attaching products to nodes instead of the node being the product.

A lot of work in terms of rewriting sql queries but it seems the most solid solution to me for multilanguage.

Maybe we should create a proof of concept to see if this idea has any future?

asak@drupal.org's picture
Offline
Joined: 10/23/2008
Juice: 67
- Multilingual support must

- Multilingual support must be solved
- Attributes should get some serious attention
- Views catalog (and more views anywhere possible!)
- More control over checkout (for super-quick checkout)

freixas's picture
Offline
Getting busy with the Ubercode.
Joined: 05/06/2008
Juice: 119
uc_addresses

Even though I wrote uc_addresses (with help), I think it should be retired and its functionality moved to core.

Right now, core Ubercart stores addresses as part of orders. No order, no address. uc_addresses adds the ability for customers to create address books, but it stores its addresses completely separate from the order system. Having two address systems seems inefficient and can be confusing (common problem: you only get order addresses when trying to create an order as admin). I haven't really looked at what it would take to get uc_addresses to work in the admin area—and to be honest, I don't have the time to do more than minimal work on the module.

There are some places where uc_addresses has rough edges. For instance, the checkout system is designed to trigger certain events when a user selects an address. One really popular feature that uc_addresses includes is the ability to pre-fill the billing and shipping addresses with a "default" address. This doesn't trigger those events (such as calculating the shipping costs). I've also had trouble with the magic that gets performed when a user changes the country and the zone list needs to be updated. Placing uc_addresses into core might give these problems a little more attention—they might also just get fixed by avoiding having two systems trying to manage the same address.