Taxonomy child terms list and product list view
A relatively easy way to do this, would be using Views. You would need two of them:
A) First you will need to have a view display products. This view has a contextual filter (taxonomy term) that filters based on the "Products Categories" field set on the products.
B) Secondly you would set up a view that displays taxonomy terms. You need a contextual filter (taxonomy parent term). This means that you expect a term as an argument to your view, and your view will display all children of the argument.
C) You need to configure View A to display View B when there are no results. That means that if View A does not deliver any products for a given taxonomy term, View B should display all children of the given term.
I tried this locally and it works as you described in the OP.
Hope this helps
Here's my tutorial video (I've published this step by step in many places): https://www.youtube.com/watch?v=y1jqu8JnLbU
STEP BY STEP
Create a Taxonomy Vocabulary here: admin/structure/taxonomy (And create a few terms)
Create a Taxonomy View here: admin/structure/views/add
You want to make sure that you choose "taxonomy" entities.
- Add a contextual filter for "Taxonomy term: Parent term"
Make sure to select "Default Filter" and choose "Taxonomy term from url." Also, specify a "Default validation criteria" for "Taxonomy term" and choose "Convert taxonomy name to ID" and select "Transform dashes in url..."
Add a new page to this view, remove the contextual filter from this view and add a filter for "Taxonomy term: Parent term" and set it to "equal to" and leave the field there blank.
Save that view and create a new view here: admin/structure/views/add
Make sure this view is a for "Content" of type "Product Display" (or whatever entity bundle has the field for your taxonomy terms).
- Add a contextual filter for your taxonomy term, mine was called "Product Categories"
Make sure this contextual filter displays "Contents of No Results." Also, specify a "Default validation criteria" for "Taxonomy term" and choose "Convert taxonomy name to ID" and select "Transform dashes in url..."
Add a "No results" item called a "View Area" and select "Page_1" from your first view (this is the second page we created)
Save this view and go back to the first view.
Add a "No results" item called a "View Area" and select the second view that we just made.
Make sure your title field in the Taxonomy View doesn't link to the taxonomy term, but it outputs the field as a link to "catalog/[name]" that way your catalog names are clickable :)