Blueprinting is very useful and powerful, but it is too powerful sometimes. It is actually hard to not inherit (or blueprint) something. For example, we are selling different products for different countries. We really don't want certain products to show up in certain countries. It seems there is no simple way to achieve this. Our solution is to use some metadata to control whether the product is needed for the country. If it is not, the publising will fail. It is more like a workaround then a nice solution. I would like to know how this situation is handled in other companies.
For a product management use case where you only have Tridion I'd definitely start with metadata to manage which countries/channels/customer segments get which products.
However, I wouldn't recommend publishing failures to control what gets published where. Consider three possibly better fits for the use case:
- Publish mostly through Bundles--each bundle contains only the items you want for each country
- Control what gets published (or not) via custom resolving -- you won't have failures since you'd only publish what's "allowed" for a given Publication or country.
- Resolve what appears in delivery -- publish everything, but use the CD API to control what displays. This would be a good fit when displaying products dynamically.
Beyond this I'd also consider SmartTarget and other "personalization" tools to handle variations in sets of product and their order.
@charles - Tridion is content management tool, I would highly discourage the use of Content management tool for product management because that is not what it is meant for.
The way you handle the situation is, have a separate product management tool where you can handle all the attributes for product and in your content management when you create component you can add attributes and based on which at run-time you can retrieve the product information product management tool and display.
You can make pages in a structuregroup non-publishable. In a child publication where you do not want to have certain products you can localize the SG and set it's unpublishable flag.
I would prefer this solution over throwing errors on publish as this could have unintentional consequences (you don't want publishing to fail; you just want certain pages to not be published).
If you want to use Tridion to manage shared-but-not-always-used items I would suggest creating a custom page which gives you an overview of which product SGs are enabled/disabled in which child publications (as I would expect this overview will be very frequently requested by product managers).
A limitation of this approach is obviously that you'll have to group products into SGs as you cannot disable a single page from being publishable (only a feature on SGs) so if you want to control it per product you need to create a separate SG for each.