Questions answered by this recipe
How can I tag a page with multiple tags, for multiple category groups? How can I tag pages without having to type in link markup?
Tag a page with multiple tags in multiple category groups.
The tagger script uses a subset of page-text-variable markup to "tag" pages; that is, to link the page to the corresponding page (that matches the value of the tag) in another group. This is done by associating a "tag name" page-text-variable with a "tag-group" to be linked to.
For example, suppose you're gathering information about fiction, with a page for each story, and you want to collate authors and genres.
With Tagger, you can associate "Author" with the "Authors" group, and "Genre" with the "Genres" group.
$TaggerGroups['Author'] = 'Authors'; $TaggerGroups['Genre'] = 'Genres';
Then when you type
Author:Fred Nurk Genre:Historical
it will be interpreted as links, as if you had typed
Author:[[Authors/Fred Nurk]] Genre:[[Genres/Historical]]
But wait, there's more!
What if Fred Nurk's epic work wasn't just historical, but a historical romance? And rather than making a separate genre for historical romance, you wanted it to be counted as Historical and Romance both? Tagger allows you to do this, by defining certain characters (such as a comma) as "separators".
Author:Fred Nurk Genre:Historical, Romance
This will give links as if you had typed this:
Author:[[Authors/Fred Nurk]] Genre:[[Genres/Historical]], [[Genres/Romance]]
Likewise, if Fred Nurk co-authored his epic with Barbara Cartland, then you could do this (since '&' is also a separator character by default):
Author:Fred Nurk & Barbara Cartland Genre:Historical, Romance
giving links as if you had typed this:
Author:[[Authors/Fred Nurk]] & [[Authors/Barbara Cartland]] Genre:[[Genres/Historical]], [[Genres/Romance]]
Tagger accepts two forms of markup: the Tag:Value markup and the
The "Value" can contain multiple "values", separated by a separator. The default separators are comma ',', slash '/' and ampersand '&'. However, you cannot mix different separators in the same Value.
(:Tag:Value:) markup will be hidden as a hidden page-text-variable. Note, however, that Tagger will ignore hidden PTVs which span multiple lines; it must all be on one line.
For each Tagger "tag", there are a few Page Variables. These can be useful in pagelist templates.
|TagLinked||Contains links to all the tag-pages, with their labels being the title of the page linked to.|
|TagLinkedName||Contains links to all the tag-pages, with their labels being the name of the page linked to.|
|TagName||The tags munged together into one word, as if it was a page-name|
|$TaggerGroups||tag => group-name||empty|
|$TaggerTagSeparators||What characters can be used to separate tags.|
To activate this script, copy it into the cookbook/ directory, then add the following lines, for example, to your local/config.php:
$TaggerGroups['MyTag'] = 'MyTagGroup'; $TaggerGroups['MyOtherTag'] = 'MyOtherTagGroup'; include_once("$FarmD/cookbook/tagger.php");
IWFM (it works for me). It works with Cluster.
- 2017-06-21: changed Markup_e() to Markup() for PHP 7.2 compatibility. Added htmlspecialchars_decode() to get & instead of
- (2014-05-15) Use the Markup_e() function which is compatible with PHP 5.5 (Petko)
- (2011-07-29) Minor bug correction in output
- (2008-01-27) Initial version
See Discussion at Tagger-Talk
- DaveG for suggesting the name "Tagger".
- AntonyTemplier Bug correction.
- Petko Markup_e() function PITS:01319.
User notes +1: If you use, used or reviewed this recipe, you can add your name. These statistics appear in the Cookbook listings and will help newcomers browsing through the wiki.