Tagger

Summary: Easy tagging into multiple category groups.
Version: 2017-06-21
Prerequisites: PmWiki version 2.2.56
Status: stable
Maintainer: Kathryn Andersen
Categories: Links, Markup, CMS, PHP55, PHP72
Download: tagger.phpΔ
Discussion: Tagger-Talk

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.

NameDescription
TagLinkedContains links to all the tag-pages, with their labels being the title of the page linked to.
TagLinkedNameContains links to all the tag-pages, with their labels being the name of the page linked to.
TagNameThe tags munged together into one word, as if it was a page-name

Configuration Variables

NameDescriptionDefault
$TaggerGroupstag => group-nameempty
$TaggerTagSeparatorsWhat 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

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.