We have several stores setup under a single install of Magento Enterprise. We now share accounts globally so there is a single cart and login across all stores. We have a separate root category setup for each store. Recently I noticed that to hide products outside a store's root category all products outside that root category are set to "display=not visible individually" for store views under the given store. To my knowledge products outside the root category just shouldn't show up on the frontend to begin with and that setting should only be used to hide simple products when they are only to show up under a configurable or grouped product. Am I correct? And if I am why are products outside the root category of a given store being displayed to customers?
It sounds to me like it's functioning as intended. When not in any category on a site, products are still navigable where the URL is known. And if they are visible in search as well as the catalog, they will also show up in search results regardless of their presence in a category belonging to the given store. I'm not certain, but I think they will also show up in the site map under these circumstances.
Since you are now sharing logins, and the products are technically available for being displayed on the store view, the URLs will be generated or them in places such as the cart, where they might have been added from a different store view.
To my knowledge products outside the root category just shouldn't show up on the frontend to begin with and that setting should only be used to hide simple products when they are only to show up under a configurable or grouped product.
Incorrect. The setting can be used to show or hide products of any type from any given store or store view. For instance, if I sell maps, I may want to suppress display of English-language maps to my Spanish-language store.
[So] why are products outside the root category of a given store being displayed to customers?
Products in the database can belong to any number of categories, root or otherwise, at any time. For a product to be navigable (in other words, you can input the URL and go directly to the product at any time) it does not need to be in a category, as @davidalger points out. However, a product that is not explicitly hidden in all store views, save for one, will effectively be displayed in all store views depending on which store the customer's session cookie is tied to.
To demonstrate this, you can force the store view with the following url (provided you know its' store code):
Now, go to this URL, and replace
mobilespanish with another store view code:
The product now displays with whichever theme has been associated to that store view. In fact, you should now be able to cruise through the site as if you went to it directly, whether or not the base url is correct.
So, what's the point?
You need to hide some products. Do that with
Visibility flag, and set it to
Not Visible Individually for the store views you wish to hide it from. Merely disassociating them or excluding from the root category is not enough.