Blog Sections Open

Filtering Ditto Results by Multi-Select TV Values

Multi-select TVs are useful until the listing layer has to interpret them in a predictable way.

This donor dealt with a familiar old-Evo problem: a TV stored several category-like values, and Ditto needed to filter resources by that multi-select field.

Example TV source

@EVAL return ' ||' . $modx->runSnippet("Quill", array('parent'=>'50', 'title'=>'pagetitle'));

Example Ditto call

[[Ditto?
  &parents=`2`
  &tpl=`collection.tpl`
  &depth=`3`
  &paginate=`1`
  &display=`16`
  &filter=`tvnew,,2`
  &extenders=`request`
  &sortDir=`ASC`
  &sortBy=`pagetitle`
]]

Where the confusion comes from

Multi-select TVs often store a value format that looks simple in the manager but behaves differently once filtering starts. The listing engine may need exact tokens, rendered values, or delimiter-aware logic, depending on how the field was configured.

Practical advice

If a TV is meant to drive filtering, decide early whether it is a human-facing field or a query-facing field. One field can do both, but the more categories and combinations it carries, the more careful the filter logic needs to be.

Newer post

Updating Shopkeeper Prices Dynamically with JavaScript and changePrice

How to extend Shopkeeper price updates on the frontend when option changes should also recalculate comparison prices or savings labels.

Older post

Displaying Shopkeeper Product TVs Through catalogFill Data Sources

How to connect Shopkeeper-style product output with catalogFill data sources when product attributes live in a separate content structure.