[pmwiki-users] Page Variables recipe
Martin Fick
fick at fgm.com
Wed Nov 23 14:43:21 CST 2005
I created a recipe which allows access to any page's
variables using the following simple notation:
{pagename$variable}
I know that we discussed a series of shorterhand notations
as well, but I think we wanted to at least have this
notation, so here is my quick implementation.
I have a test page setup here:
http://www.theficks.name/test/PV/pmwiki.php?n=Test.PageVars
Feel free to mess with any page on this wiki.
Potential issue: this will put every page referenced into
the PCache.
Should I put this in the Cookbook as a recipe or do you
think this is something that might actually go in the core
before I get my recipe up?
-Martin
<?php if (!defined('PmWiki')) exit();
/*
Version 1.0 11/23/05 Author: Martin Fick
To install this recipe, simply put this in your cookbook directory
and add include_once("cookbook/pagevars.php"); to your config.php.
Page Variables:
{$Group} - page's group name, as in "PmWiki"
{$Groupspaced} - spaced group name, as in "Pm Wiki"
{$Name} - page name, as in "MarkupVariables"
{$Namespaced} - spaced page name, as in "Markup Variables"
{$FullName} - page's full name, as in "PmWiki.MarkupVariables"
{$Title} - page title (may differ from Name), as in "MarkupVariables"
{$Titlespaced} - title/spaced page name, as in "Markup Variables"
{$LastModified} - date page was edited, as in "August 31, 2005, at 10:18 PM"
{$LastModifiedBy} - page's last editor, as in "Pm"
{$LastModifiedHost} - IP of page's last editor, as in "24.1.26.255"
*/
SDV($PageNameChars,'-[:alnum:]');
# {pagename$var} substitutions
Markup('$[pagename$fmt]','>$[fmt]', "/{([$PageNameChars\.\/]+?)" .
'\\$((Group|Name|Title)(spaced)?|LastModified(By|Host)?|FullName)}/e',
"pagevars('$$2','$1')");
function pagevars($var, $pagename)
{
global $PCache, $EnablePageListProtect;
if ($var == '$Title' || $var == '$Titlesapced') $pvar='title';
if ($var == '$LastModified') $pvar='time';
if ($var == '$LastModifiedBy') $pvar='author';
if ($var == '$LastModifiedHost') $pvar='host';
if ($pvar && ! isset($PCache[$pagename][$pvar]))
{
$page = IsEnabled($EnablePageListProtect, 0) ?
RetrieveAuthPage($pagename, 'read', false, READPAGE_CURRENT)
: ReadPage($pagename, READPAGE_CURRENT);
$PCache[$pagename]= $page;
}
//Non-existing pages should return blank time, not the current time.
if ($var == '$LastModified' && !PageExists($pagename)) return "";
return FmtPageName($var,$pagename);
}
More information about the pmwiki-users
mailing list