Multi-store roadmap. Let's discuss (UPDATE: done)

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.
11 years ago
I have another suggestion to this problem which may simplify things alot.

Regarding multi-store the problem is in most cases defined as below:
A company has an collection of products,they are targeting different markets/channels:

- regional markets
- different channels (B2C, B2B)
- vertical markets

Each market/channel ideally may require its own marketing, content, domain, payment options, shipment options.

Consider an outlet store for consumers, it may require that the store has no references to the company's name but is just called [productname]-outlet.com. The outlet store may require different discount eventhough when products is sold in another webshop of the company (for an higher price!).

Another example would be for B2B store, more specifically a store for the company's brand resellers.
Not every physically store can buy the company's products at reseller prices, so registrations must be approved.
The checkout proces most likely must be far quiker, in most cases the payment option could be skipped because all customer pay per invoice or the credit is checked manually afterward.

Last example let's say the company is form the EU and want's to open a store outside the EU. A lot of things will be different: template, topics (content!), payments, regulation (tax, eu cookie law,..), hosting will preferably also be outside EU. The company might conclude that its better to hire capacity at a local warehouse, meaning different stock values per store.

To make a long story short, in long term an "enterprise" company will require almost all aspects of the store to be configurable per store. My concern is that this will greatly make the nopcommerce more complex, heavier than it already is.

Also do all plugins have to consider to support multi store or not, how does this effect the availablity of plugins?
We are even considering moving to Magento because of the large amount of plugins available (integration, B2B, ect)

The most important thing for us is to share product and iventory information.
Why not make the product information centraly manageble by an external service (asp.net Web API?) which can be easily connected to several nopcommerce stores (by plugin). Store owner must have the option to override the default values.
Even better, make this service easy to connect to back-end systems (ERP, inventory, Amamzon Fullfillment, ect).

This way nopcommerce, all plugins and themes doesn't have to be adjusted to multi-store. Only the companies who really need multi-store can simply install a centralized service for a example on Azure and can connect each store with a plugin.

I understand this is not a solution where you want to share carts or customers, also multi-vendor is another subject but can be mainly done by ACL?

Like to hear what you think...
11 years ago
Andrei wrote:
Advice needed...

Good news. I've finished the most of the work for multi-store support. Mapping, host detection, etc. Almost everything is already done and works fine.

The only complex thing still not implemented is per-store settings. Currently we have ISettings interface and setting classes inherited from it (e.g. StoreInformationSettings). Developer who worked with nopCommerce before should know how it is implemented. These setting classes are injected into services (etc). Now some settings will be always global, some settings could be configured per store. But how should it be implemented now? I really cannot find a good approach for. I want to keep it simply (IoC/DI, etc). Maybe, extend ISetting interface with some extension methods such as GetForStore(x = x.PropertyName, int storeId) - implementation similar to GetLocalized extension method of ILocalizedEntity

Does anybody have any suggestion regarding the implementation of global and per-store settings without much core changes?

Bump
11 years ago
Milo2 wrote:

The most important thing for us is to share product and iventory information.
Why not make the product information centraly manageble by an external service (asp.net Web API?) which can be easily connected to several nopcommerce stores (by plugin). Store owner must have the option to override the default values.
Even better, make this service easy to connect to back-end systems (ERP, inventory, Amamzon Fullfillment, ect).


I understand, from Andrei's comments,  it will be possible to have a general catalog that can be shared by all stores and using a kind of "ACL" on products/categories/manufacturers (by stores, similar to the ACL by customer roles available in 2.8) it will be defined whether a store can have or not to certain products/categories/manufacturers. If we extend this "ACL" to product variants we can have the same product at different pricing/warehousing/taxing/etc. conditions.
11 years ago
I understand, from Andrei's comments,  it will be possible to have a general catalog that can be shared by all stores and using a kind of "ACL" on products/categories/manufacturers (by stores, similar to the ACL by customer roles available in 2.8) it will be defined whether a store can have or not to certain products/categories/manufacturers. If we extend this "ACL" to product variants we can have the same product at different pricing/warehousing/taxing/etc. conditions.


so it means that only 1 category list will be for all stores and store owners , but if customer click on any store name to see products from this store , and if customer start to move from category to category to see products , what will be listed products ?  products will be listed only from that stores ? or will be all products from all stores ?

and what about the admin side multivendors manage page ? still not any idea and nothing ready ? because i still didnt understand how to see which products ordered from which store or multivendor and how we will understand howmuch we must pay to which store owner or multivendor account to collect products and after send to customer ????
11 years ago
Very anxious and excited to see this coming!  Eagerly awaited, as it will make central management of our stores much easier!

I think that it would be very advantageous to "share" or have one global setting for things like tax settings, countries, some shipping, and other local mundane settings that we otherwise have to redo on every site.

In our case, we have several sites that we're slowly "nopping".  With each site, we wind up having to re-enter country, provinces, tax settings etc.

In my opinion a "single signon" would be an issue.  One issue is privacy legislation.  In the United States and here in Canada if a customer joins one website, "auto-joining" them to another could be a very serious legal issue.

In addition, thinking of security, with so many spammers creating fake logins on our sites, it would just make it easier for them to cover our entire enterprise quickly and more efficiently.  I'm all for making spammer's business more difficult : )

If a customer gets hacked, it would be better - again in my opinion - to not "share" shopping histories over all stores.  Bad enough they get hacked, but worse if the badguy can see everything conveniently in one place.

The migration of existing stores TO the multi-store will be (in my opinion) the big issue.  We have yet to move past 1.9 to the mvc solution.  For example

Of course, this discussion is the start of the "20,000 foot view" of the multi-store, so we're immediately looking at the big picture of what basic things this should have.

I look forward to hearing more great suggestions!

David
11 years ago
a.m. wrote:
Good news. I've finished the most of the work for multi-store support. Mapping, host detection, etc. Almost everything is already done and works fine.

The only complex thing still not implemented is per-store settings...

UPDATE: A very good solution has been found and implemented. I'll commit the entire multi-store solution in several days
11 years ago
And here we go. Download the latest version here and give it a try. Almost everything is ready. Here are some things still to be done:
1. Product tags per store. We should display product tags only for the current store. UPDATE: DONE
2. Blog posts per store. UPDATE: DONE
3. Polls per store (maybe)
4. Reward points history per store (maybe)
5. Limit plugin per store (maybe)

How to set up multi-store. For example, we have two stores: www.store1.com and www.store2.com
Step 1. Upload and install the site on www.store1.com. This is only place where nopCommerce files and DLLs will be stored.
Step 2. Go to the control panel of "www.store2.com" (your hosting control panel, and not nopCommerce admin area) and ensure that all requests to "www.store2.com" are forwarded (not redirected) to "store1.com". Do it using CNAME records. This step is very important.
Step 3. Go to the control panel of "www.store1.com" and configure a domain alias for "store2.com". This step could be complex for some users. Just ask your administrator to do it if you experience any issues. Once it is done, when you open "www.store2.com" in your browser, you should see the content of "www.store1.com".

Find how this step 3 could be done in Plesk control panel below:
When "www.store2.com" is redirected to "www.store1.com", the web server for Plesk does not know how to display "www.store2.com" because it uses what's called Name-Based Virtual Hosting. The solution is simple, you just have to create a domain alias for "www.store2.com". For future reference, here is how you would do this:
3a. Log in to the domain panel for "www.store1.com", either directly or via the "Open in Control Panel" link in the server admin panel
3b. Go to the Websites & Domains tab and select the "Add New Domain Alias" link near the bottom
3c. Enter the full alias (in this case "store2.com")
3d. Make sure "Web service" is checked. "Mail service" is optional, this is if you want mail the @store2.com to redirect in a similar way. Leave "Synchronize DNS zone with the primary domain" unchecked.

Step 4. Go to admin area > configuration > stores and configure all your store(s). Enter a store name and URL for each store you have. And there is a new very important field "HOST values". The comma separated list of possible HTTP_POST values (for example, "store1.com,www.store1.com" for the first store and "store2.com,www.store2.com" for the second store). This property is required only when you have a multi-store solution to determine the current store. This field will allow us to distinguish requests to distinct URLs and determine the current store. You can also see the current HTTP_POST value on the "System information" page in admin area.

That's all. Now you have two stores "www.store1.com" and "www.store2.com" using a single nopCommerce installation.

Looking forward for your feedback

P.S. Multi-store solution (distinction of stores by HTTP HOST) won't work for sites in virtual categories on the same domain. For example, if you have one store on http://www.site.com/store1 and the second store on http://www.site.com/store2. It's impossible because HTTP HOST values for both of these sites is the same (www.site.com)
11 years ago
hey Andrei - well done, you've been busy - looking forward to roadtesting.
11 years ago
Looking forward to checking this out.  How can it be set up on localhost?
11 years ago
New York wrote:
How can it be set up on localhost?

It can be set up with Windows hosts file.

1. Add the following line to hosts file:
127.0.0.1       testhost1
127.0.0.1       testhost2

2. Run the site from Visual Studio and configure two stores in nopCommerce admin area. Set the HOST values of the first store to "testhost1:15536" and set it to "testhost2:15536" for the second store. Just replace port number with your one

3. Now open the following URLs in your browser: http://testhost1:15536/ and  http://testhost2:15536/
This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.