Beyond The Data Source
The Treelist and TreelistEx fields types in Sitecore present the content author with many options. They can choose anything they like from a given point in the Sitecore tree. While this freedom is great, too much freedom creates headaches for developer and compromises the health of the CMS.
While a fields Source property in Sitecore can be set by GUID, Path, XPath Query. Treelist and TreelistEx controls have a fourth very powerful option, the query string.
The Query String
Using all available options, this is what a Source using a Query String would look like:
datasource=/sitecore/content/fishtank/list&allowmultipleselection=no&databasename=otherdb&excludeitemsfordisplay=item1&excludetemplatesfordisplay=template2&excludetemplatesforselection=template3&includeitemsfordisplay=item2&includetemplatesfordisplay=template4&includetemplatesforselection=template5
All The Parameters
A little overwhelming. Let's break it down by parameter: (Case-insensitive, Sitecore forces values to lowercase internally)
DataSource
The root item the the field points to. Must be a path. This is short coming I believe to be addressed in Sitecore 7.
datasource=/sitecore/content/fishtank/repo
AllowMultipleSelection
Allows the same item to be added twice by the content author. Defaults to "no".
allowmultipleselection=yes
ExcludeTemplatesForSelection
A comma separated list of template names (no ids). Items are visible in the tree, but can’t be added/selected. My favorite.
excludetemplatesforselection=Item Name,Item Name 2
ExcludeItemsForDisplay
A comma separated list of item names or ids to be hidden from the author. Useful to hide unwanted folders, for example.
excludeitemsfordisplay=Item Name,{93FBD42C-458A-4C9C-A999-1EE2B651C6E1}
ExcludeTemplatesForDisplay
A comma separated list of templates names (no ids). Items based on these templates will hidden from the author.
excludetemplatesfordisplay=Item Name
IncludeItemsForDisplay
A comma separated list of item names or ids to be shown to author.
includeitemsfordisplay=Item Name,{93FBD42C-458A-4C9C-A999-1EE2B651C6E1}
IncludeTemplatesForDisplay
A comma separated list of templates names (no ids). Items based on these templates will shown to the author.
includetemplatesfordisplay=Item Name
IncludeTemplatesForSelection
A comma separated list of template names (no ids). Items are visible in the tree and can be selected.
includetemplatesforselection=Item Name
DatabaseName
Changes the database name being referenced. Useful if using an external data provider.
databasename=otherdb
This is the look of a Source field I'd typically set.
datasource=/sitecore/content/fishtank/repo&excludetemplatesforselection=Some Folder
I haven’t come across a real-world scenario to use the Include*** options but I know they're out there.
Although not perfect (i.e. names and paths instead of ids), the Query String field source adds functionality to the Treelist and TreelistEx that can lead to less code and a simpler authoring experience. And in the bigger picture, leveraging the Query String field source approach opens up many possibilities when creating your own custom fields.
Thanks for reading.