Tagger
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?
Description
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.
Example
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]]
Markup
Tagger accepts two forms of markup: the Tag:Value markup and the (:Tag:Value:)
markup.
Tag:Value (:Tag:Value:)
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.
The (: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.
Page Variables
For each Tagger "tag", there are a few Page Variables. These can be useful in pagelist templates.
Name | Description |
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 |
Configuration Variables
Name | Description | Default |
$TaggerGroups | tag => group-name | empty |
$TaggerTagSeparators | What characters can be used to separate tags. | $TaggerTagSeparators = array(',','/','&')); |
Activation
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");
Notes
IWFM (it works for me). It works with Cluster.
Release Notes
- 2017-06-21: changed Markup_e() to Markup() for PHP 7.2 compatibility. Added htmlspecialchars_decode() to get & instead of
&
(HansB) - (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
Comments
See Discussion at Tagger-Talk
See Also
Contributors
- 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.