There are lots of ways to do this, but here's a quick way that jumps to mind:
- If you have very general categories (like mens/womens/boots/etc.) separate these by folder
- Use an autotag tv to add specific features to your products (color, brand, etc.)
- Setup your display page to populate with a getResources or pdoResources call and use something like getUrlParam (http://rtfm.modx.com/extras/revo/geturlparam) inside the call to populate the parents/resources, tvFilters, and where parameters.
- Setup your filter links to refer back to your display page with an appended URL parameter that matches a corresponding keyword you've used for your products
For example:
Let's say you have a filter for color that includes filter links for red, green, and pinkalicious. The filter link href for red could be something like
href="[[~[[*id]]? &color=`red`]]"
This appends the &color=red URL parameter. Your getResources/pdoResources call would include
&tvFilters=`color==[[!getUrlParam? &name=`color`]]`
This will return only items that have "red" as a keyword in your tv.
If you want to pull only contents from a specific folder (i.e. boots, which has resource ID 10) your link to "Boots" would include an href like
href="[[~[[*id]]? &category=`10`]]"
and your getResources/pdoResources call would include
&parents=`[[!getUrlParam? &name=`category`]]`
Price ranges could be done using the &where parameter and links with URL parameters set for minimum/maximum range. NOTE: This doesn't work with TV values that I know of so you would have to place the price in a standard resource field, like [[*description]]. Something like
&where=`{"description:>=":[[!getUrlParam? &name=`min`]], "AND:description:<=":[[!getUrlParam? &name=`max`]]}`
You may want to place this inside a conditional call so it's only triggered if the url parameters exist. This isn't ideal, but if you don't want to write a snippet to accomplish some of this it might bet you by.
Hope that helps get you started.