PTVLinkText
Questions answered by this recipe
- How do I use a page's Summary, instead of its title, as link text?
- How do I make a link that automatically includes a page's Summary or other page text variable following the link text?
Description
This recipe provides markup that will create a link whose link text is a page text variable on the target page. If the variable is not defined, the link text will default to the page's $Title. This allows you to easily use meaningful text, such as the page's Summary, for links to pages whose names are meaningless.
Installation
Put this in your configuration file:
function PTVLinkText ($pn) {
$ptv = PageTextVar($pn,'Summary');
if (strlen($ptv)) {
return $ptv;
} else {
return PageVar($pn, '$Title');
}
}
You will also need one of the following:
- For PmWiki versions 2.2.58 and later, add this:
Markup('[[|~', '<[[|',
"/(?>\\[\\[([^|\\]]+))\\|\\s*\\~\\s*]]/",
"mu_PTVLinkText");
function mu_PTVLinkText($m) {
extract($GLOBALS['MarkupToHTML']);
return Keep(
MakeLink( $pagename, $m[1], PTVLinkText(
MakePageName($pagename,$m[1]) )
),
'L');
}
- For PmWiki versions prior to 2.2.56, add this instead:
Markup('[[|~', '<[[|',
"/(?>\\[\\[([^|\\]]+))\\|\\s*\\~\\s*]]/e",
"Keep(MakeLink(\$pagename, PSS('$1'),
PTVLinkText(MakePageName(\$pagename,PSS('$1')))
),'L')");
Configuration
In the code shown above, "Summary" is the page text variable used for the link text. To use a different variable, change "Summary" in the PTVLinkText function to your preferred variable.
Usage
Use a tilde character as your link text in markup. For example:
[[Cookbook.PTVLinkText|~]]
would create the following link:
Use a page text variable for link text, when available
Notes
A variation of this is to modify a link so that it is automatically followed by a page text variable. Here's an example of appending the page's $:Summary in a smaller font (for versions 2.2.56 and later):
Markup_e('[[|$', '<[[|',
"/(?>\\[\\[([^|\\]]+))\\|\\s*\\$\\s*]]/",
"Keep(MakeLink(\$pagename, \$m[1],
PTVLinkTextSummaryAfterAndSmaller(MakePageName(\$pagename,\$m[1]))
),'L').PRR(' [-'.PageTextVar(\$m[1],'Summary').'-]')");
function PTVLinkTextSummaryAfterAndSmaller ($pn) {
$title = PageVar($pn, '$Title');
return $title;
}
The markup for the above variation would look like this:
[[Cookbook.PTVLinkText|$]]
and it would create the following link plus text:
PTVLinkText Use a page text variable for link text, when available
Change log / Release notes
See also
- Cookbook:PowerTools - for automatically creating page names with non-meaningful text
- PmWiki:Links
Contributors
Comments
See discussion at PTVLinkText-Talk
User notes : 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.