The __HasTagOfPlugin__ (or simply "HasTagOf" in use) provides a query on the list of pages having a given tag, tags expressed using the TagPlugin.
See also: TagPlugin, TagManager, TagCloudPlugin, [Burt Reynolds]
----
! Syntax
Creating a query for a single tag is pretty simple:
{{{
[{HasTagOf tagname }]
}}}
The tag can ''optionally'' be wrapped in square brackets (since tags are also required to be wiki pages).
There is an optional "{{output}}" parameter, see the next section.
! Simple Logic
You can query on more than one tag where __all__ are required by listing them with {{AND}} operators between:
{{{
[{HasTagOf tagname1 AND tagname2 }]
}}}
For example,
{{{
[{HasTagOf Actor AND Honcho }]
}}}
[{HasTagOf Actor AND Honcho }]
You can query on more than one tag where __any__ are required by listing them with {{OR}} operators between:
{{{
[{HasTagOf tagname1 OR tagname2 }]
}}}
For example,
{{{
[{HasTagOf Honcho OR Sidekick }]
}}}
[{HasTagOf Honcho OR Sidekick }]
You can query on pages that don't contain a tag using the {{NOT}} operator:
{{{
[{HasTagOf NOT tagname1 }]
}}}
For example (using the 'output' parameter, described below),
{{{
[{HasTagOf output='count' NOT Honcho }]
}}}
[{HasTagOf output='count' NOT Honcho }]
The {{AND}}, {{OR}}, and {{NOT}} logical operators can be combined (using parentheses as necessary) to create more complicated logical queries, e.g.,
{{{
[{HasTagOf (( tagname1 AND tagname2 ) OR ( tagname3 NOT tagname4 ) }]
}}}
! Regular Expression Matching
When a compile-time variable "permitRegex" is set true (the default), regular expression ("regex") matching is enabled.
To match on a regular expression, wrap the regex pattern in square brackets. For example, to match any tags beginning with "Per", the regular expression "{{Per.*}}" would be used:
{{{
[{HasTagOf [Per.*] }]
}}}
[{HasTagOf [Per.*] }]
Note that a match on any tag is "{{{[.*]}}}", not "{{{[*]}}}". This returns all tagged pages, not the list of all tags.
----
! Alternative Output Formats
The output without any 'output' parameter will be wrapped in an HTML {{<div class='hastag'>}} element that permits CSS styling. If an 'output' parameter is specified this {{<div>}} wrapper is not included in the generated output.
Options for the 'output' parameter value are: "none", "count", "list", "bullet", "number", "space", "comma", "colon" and "bar". The default (absent any parameter) is "list".
(NOTE: the below demonstrations will fail if the plugin is not installed.)
__None:__
{{{
[{HasTagOf output='none' Person }]
}}}
[{HasTagOf output='none' Person }]
__Count:__
{{{
[{HasTagOf output='count' Person }]
}}}
[{HasTagOf output='count' Person }]
__List:__
{{{
[{HasTagOf output='list' Person }]
}}}
[{HasTagOf output='list' Person }]
__Bullet:__
{{{
[{HasTagOf output='bullet' Person }]
}}}
[{HasTagOf output='bullet' Person }]
__Number:__
{{{
[{HasTagOf output='number' Person }]
}}}
[{HasTagOf output='number' Person }]
__Space:__
{{{
[{HasTagOf output='space' Person }]
}}}
[{HasTagOf output='space' Person }]
__Comma:__
{{{
[{HasTagOf output='comma' Person }]
}}}
[{HasTagOf output='comma' Person }]
__Colon:__
{{{
[{HasTagOf output='colon' Person }]
}}}
[{HasTagOf output='colon' Person }]
__Vertical Bar:__
{{{
[{HasTagOf output='bar' Person }]
}}}
[{HasTagOf output='bar' Person }]
! Case Testing
Not quite sure how to handle this since we need to match page names case insensitively but we don't want our tags to all be lowercased.
{{{
[{HasTagOf PERSON }]
}}}
[{HasTagOf output='comma' PERSON }]
{{{
[{HasTagOf person }]
}}}
[{HasTagOf output='comma' person }]
{{{
[{HasTagOf [P.*] }]
}}}
[{HasTagOf output='comma' [P.*] }]
The presence of regex characters will force this as a regex match but {{{[p.*]}}} will only match wiki pages beginning with lowercase 'p', not uppercase.
{{{
[{HasTagOf [p.*] }]
}}}
[{HasTagOf output='comma' [p.*] }]
Doing an explicit regex match using the 'regex' parameter:
{{{
[{HasTagOf regex='(A|P).*' }]
}}}
[{HasTagOf output='comma' regex='(A|P).*' }]
----
%%small
This is a page related to the TagManager.
%%
[{Tag WikiPlugin NeocortextPlugin}]