Startpage >> PmWiki >> PageVariables

Page specific variables

PmWiki.PageVariables History

Hide minor edits - Show changes to output

August 31, 2011, at 11:58 AM by Blahma -
Changed lines 1-117 from:
That's 2 cleevr by half and 2x2 clever 4 me. Thanks!
to:
(:title Page specific variables:)
(:description Documentation for "variables" that are associated with pages. :)
(:Summary: variables that are associated with pages:)
(:Audience: authors (intermediate) :)

[[#desc]]This page describes the "variables" that are associated with pages. Page variables have the form @@{$''variable''}@@, and can be used in page markup or in certain formatting strings in PmWiki. For example, the markup "[@{$Group}@]" renders in this page as "{$Group}".

Note: Do not confuse these variables (set and used only in PmWiki pages) with [[PmWiki/Variables|PHP variables]]. Page variables can be read in PHP with the [[Cookbook:Functions#PageVar|PageVar()]] function.

Note that these variables do not necessarily exist in the PHP code, because they have to be determined for a specific page. (However, they are usable in [[FmtPageName]] strings.)

There is also the form @@{''pagename''$''variable''}@@, which returns the value of the variable for another page. For example, "[@{MarkupMasterIndex$Title}@]" displays as "{MarkupMasterIndex$Title}".

[[#specialreferences]]
!! Special references
Special referenced variables are used to retain the context of the target page or main page for a [[variable(s)]] when:
* the variable is [[PmWiki/IncludeOtherPages|included]] into a destination (target) page)
* the variable is part of a sidebar, header, or footer for a main page

Prefixing the variable name with an asterisk (*) means the variable reflects the value related to the target page or main page.
* '''[@*$@]'''PageVariablename - prefixed by an asterisk (*) - value reflects target page context
Without the asterisk it reflects the value of the page in which it originates.
* '''[@$@]'''PageVariablename - retains value in source page context

Special references are also used in [[page list templates(#specialreferences)]].

For example you can test to see if the page is part of another page
(:markup:)
(:if ! name {$FullName}:)
%comment% name of this page is not the same as the page this text was sourced from
->[[{$FullName}#anchor | more ...]]
(:ifend:)
(:markupend:)
or refer to the main page in a sidebar, footer, or header
(:markup class=horiz:)
This page is [[{*$FullName}]]
(:markupend:)

[[#specialreferencesend]]

!! Default page variables

The page variables defined for PmWiki are:

->[@{$Action}@] - page's url action argument, as in "{$Action}"
->[@{$BaseName}@] - page's "base" form (stripping any prefixes or suffixes defined via @@$BaseNamePatterns@@) as in "`{$BaseName}"
->[@{$DefaultGroup}@] - default group name, as in "{$DefaultGroup}"
->[@{$DefaultName}@] - name of default page, as in "`{$DefaultName}"
->[@{$Description}@] - page's description from the [@(:description:)@] markup, as in "{$Description}"
->[@{$FullName}@] - page's full name, as in "`{$FullName}"
->[@{$Group}@] - page's group name, as in "`{$Group}"
->[@{$Groupspaced}@] - spaced group name, as in "{$Groupspaced}"

->[@{$LastModified}@] - date page was edited, as in "{$LastModified}"
->[@{$LastModifiedBy}@] - page's last editor, as in "{$LastModifiedBy}"
->[@{$LastModifiedHost}@] - IP of page's last editor, as in "{$LastModifiedHost}"
->[@{$LastModifiedSummary}@] - Summary from last edit, as in "{$LastModifiedSummary}"
->[@{$LastModifiedTime}@] - time page was edited in unix-style timestamp, as in "{$LastModifiedTime}" %green%added version 2.2 beta 67%%
-->This can be used (preceded by '@') in [@{(ftime)}@] and other date/time markups.

->[@{$Name}@] - page name, as in "`{$Name}"
->[@{$Namespaced}@] - spaced page name, as in "{$Namespaced}"
->[@{$PageUrl}@] - page's url, as in "{$PageUrl}"
->[@{$PasswdRead}@] - "read" permissions for the page e.g. "{$PasswdRead}"
->[@{$PasswdEdit}@] - "edit" permissions for the page e.g. "{$PasswdEdit}"
->[@{$PasswdAttr}@] - "attr" permissions for the page e.g. "{$PasswdAttr}"
->[@{$RequestedPage}@] - page requested in URL, used on [[Site.PageNotFound]]. e.g. "{$RequestedPage}"
->[@{$SiteGroup}@] - default group name for e.g. RecentChanges, as in "{$SiteGroup}"
->[@{$Title}@] - page title (may differ from Name), as in "{$Title}"
->[@{$Titlespaced}@] - either the page title (if defined), or the spaced page name, as in "{$Titlespaced}"

In addition to the above, there are some page-invariant variables available through this markup:

->[@{$Author}@] - the name of the person currently interacting with the site, as in "{$Author}"
->[@{$AuthId}@] - current authenticated id, as in "{$AuthId}" %red%Please note the lower case 'd'. [@{$AuthID}@] returns nothing

->[@{$Version}@] - PmWiki version, as in "{$Version}"
->[@{$VersionNum}@] - The internal version number, as in "{$VersionNum}"
->[@{$ScriptUrl}@] - The url to the pmwiki script, as in "{$ScriptUrl}"


!! Custom page variables

You may add custom page variables as a local customization. In a local configuration file or a recipe script, use the variable $FmtPV:

->[@
$FmtPV['$VarName'] = "'variable definition'";
$FmtPV['$CurrentSkin'] = '$GLOBALS["Skin"]';
$FmtPV['$WikiTitle'] = '$GLOBALS["WikiTitle"]';
@]

Defines new Page Variable of name $CurrentSkin, which can be used in the page with [@{$CurrentSkin}@] (also for [[Conditional markup]]). It's necessary to use the single quotes nested inside double-quotes as shown above (preferred) or a double-quoted string nested inside single-quotes like ''[@'"this"'@]''.

If you want to have a Page Variable that returns the currently used password (more precisely, the last password entered), you can use

->[@
$FmtPV['$AuthPw'] = 'reset(array_keys((array)@$_SESSION["authpw"]))';
@]

!! See also

* [[Cookbook:More custom page variables]]
* [[PmWiki.Variables]] — about variables internal to PmWiki.
* [[PmWiki.MarkupMasterIndex]] — complete list of PmWiki markups.
* [[PmWiki/PageTextVariables]] — page variables automatically made available through natural page markup or explicit page markup within the wiki text of the page.
* [[PmWiki.Markup Expressions]] — markup expressions can manipulate page variables

>>faq<< [[#faq]]

Q:Is there a variable like $LastModified, but which shows me the creation time?
A:No, but you can create one in config.php. For instance:
->[@# add page variable {$PageCreationDate} in format yyyy-mm-dd
$FmtPV['$PageCreationDate'] = 'strftime("%Y-%m-%d", $page["ctime"])';@]

If you like the same format that you define in config.php with $TimeFmt use
[@ $FmtPV['$Created'] = "strftime(\$GLOBALS['TimeFmt'], \$page['ctime'])";
@]
August 26, 2011, at 05:48 PM by Leatrice - xMnzlfafhAcUyCo
Changed line 1 from:
I sppuose that sounds and smells just about right.
to:
That's 2 cleevr by half and 2x2 clever 4 me. Thanks!
August 26, 2011, at 05:47 PM by Marnie - muoIggFvU
Changed line 1 from:
Hey, sulbte must be your middle name. Great post!
to:
I sppuose that sounds and smells just about right.
August 26, 2011, at 05:39 PM by Roxie - RyeLBBjTCTHjjKKMQAO
Changed line 1 from:
RQgSpN , [url=http://hrqdcerrthmi.com/]hrqdcerrthmi[/url], [link=http://vcyszpqzkejp.com/]vcyszpqzkejp[/link], http://dtukyttgzhym.com/
to:
Hey, sulbte must be your middle name. Great post!
August 26, 2011, at 05:04 PM by jmvdprnd - SNJTGYNecLtL
Changed line 1 from:
I think you hit a bullseye there felals!
to:
RQgSpN , [url=http://hrqdcerrthmi.com/]hrqdcerrthmi[/url], [link=http://vcyszpqzkejp.com/]vcyszpqzkejp[/link], http://dtukyttgzhym.com/
August 26, 2011, at 05:01 PM by Mavrick - HmUFMwvFudM
Changed line 1 from:
Hahhaaha. I'm not too bright today. Great post!
to:
I think you hit a bullseye there felals!
August 26, 2011, at 04:49 PM by Elric - XcnimFYFojAPQBY
Changed line 1 from:
Yo, that's what's up trutfhully.
to:
Hahhaaha. I'm not too bright today. Great post!
August 26, 2011, at 05:41 AM by Caden - KPVuelEdlL
Changed line 1 from:
Great thinking! That really berkas the mold!
to:
Yo, that's what's up trutfhully.
August 26, 2011, at 02:51 AM by Howdy - iFKwMDEqLytov
Changed line 1 from:
That's not even 10 mitnues well spent!
to:
Great thinking! That really berkas the mold!
August 26, 2011, at 12:14 AM by Jailen - tetpXowxBuUkGpmGd
Changed line 1 from:
PX5xjZ <a href="http://xginnqzfikqc.com/">xginnqzfikqc</a>
to:
That's not even 10 mitnues well spent!
August 25, 2011, at 04:14 PM by oudbecoqow - lpdWXjDhdUkxhW
Changed line 1 from:
That's way more clever than I was epxeictng. Thanks!
to:
PX5xjZ <a href="http://xginnqzfikqc.com/">xginnqzfikqc</a>
August 25, 2011, at 03:46 PM by Rope - RAclSurZCPYkZgddLS
Changed line 1 from:
I'm so glad that the itnreent allows free info like this!
to:
That's way more clever than I was epxeictng. Thanks!
August 25, 2011, at 11:10 AM by Kenisha - VLOoCwnbj
Changed line 1 from:
Stay informaitve, San Diego, yeah boy!
to:
I'm so glad that the itnreent allows free info like this!
August 25, 2011, at 08:24 AM by Ival - NegmXWeUP
Changed line 1 from:
I don't know who you wrote this for but you hpleed a brother out.
to:
Stay informaitve, San Diego, yeah boy!
July 19, 2011, at 08:13 PM by Easter - VZKCjNXcaYSIoXfWfF
Changed line 1 from:
I really appreciate free, succinct, rlaeible data like this.
to:
I don't know who you wrote this for but you hpleed a brother out.
July 19, 2011, at 06:43 PM by Julissa - YVLXHljdsS
Changed line 1 from:
Times are changing for the bteter if I can get this online!
to:
I really appreciate free, succinct, rlaeible data like this.
July 19, 2011, at 06:02 PM by Luella - QXWeTsUjSZKy
Changed line 1 from:
Kneokcd my socks off with knowledge!
to:
Times are changing for the bteter if I can get this online!
July 18, 2011, at 02:39 PM by Champ - iOANHvqxwsSxMyj
Changed line 1 from:
Your article was excllenet and erudite.
to:
Kneokcd my socks off with knowledge!
July 18, 2011, at 10:01 AM by Parthena - lQKgqZXlyhy
Changed line 1 from:
Begun, the great ietnrent education has.
to:
Your article was excllenet and erudite.
July 18, 2011, at 05:34 AM by Pepper - yBvdSWgu
Changed line 1 from:
f2sU5C , [url=http://rfngxdlhrrag.com/]rfngxdlhrrag[/url], [link=http://vxcomfdqwdem.com/]vxcomfdqwdem[/link], http://svhnuxtcgpjn.com/
to:
Begun, the great ietnrent education has.
July 07, 2011, at 02:47 PM by tpoxcgotjsu - dTTmosuxsGvLmGxH
Changed line 1 from:
hOnows <a href="http://uepuoatpcgib.com/">uepuoatpcgib</a>
to:
f2sU5C , [url=http://rfngxdlhrrag.com/]rfngxdlhrrag[/url], [link=http://vxcomfdqwdem.com/]vxcomfdqwdem[/link], http://svhnuxtcgpjn.com/
July 07, 2011, at 09:56 AM by eqbqdlvruz - WuCjpuQaMFJaQFsOmS
Changed line 1 from:
This piece was cgoent, well-written, and pithy.
to:
hOnows <a href="http://uepuoatpcgib.com/">uepuoatpcgib</a>
July 06, 2011, at 04:08 PM by Seston - mIsTNnxDm
Changed lines 1-117 from:
(:title Page specific variables:)
(:description Documentation for "variables" that are associated with pages. :)
(:Summary: variables that are associated with pages:)
(:Audience: authors (intermediate) :)

[[#desc]]This page describes the "variables" that are associated with pages. Page variables have the form @@{$''variable''}@@, and can be used in page markup or in certain formatting strings in PmWiki. For example, the markup "[@{$Group}@]" renders in this page as "{$Group}".

Note: Do not confuse these variables (set and used only in PmWiki pages) with [[PmWiki/Variables|PHP variables]]. Page variables can be read in PHP with the [[Cookbook:Functions#PageVar|PageVar()]] function.

Note that these variables do not necessarily exist in the PHP code, because they have to be determined for a specific page. (However, they are usable in [[FmtPageName]] strings.)

There is also the form @@{''pagename''$''variable''}@@, which returns the value of the variable for another page. For example, "[@{MarkupMasterIndex$Title}@]" displays as "{MarkupMasterIndex$Title}".

[[#specialreferences]]
!! Special references
Special referenced variables are used to retain the context of the target page or main page for a [[variable(s)]] when:
* the variable is [[PmWiki/IncludeOtherPages|included]] into a destination (target) page)
* the variable is part of a sidebar, header, or footer for a main page

Prefixing the variable name with an asterisk (*) means the variable reflects the value related to the target page or main page.
* '''[@*$@]'''PageVariablename - prefixed by an asterisk (*) - value reflects target page context
Without the asterisk it reflects the value of the page in which it originates.
* '''[@$@]'''PageVariablename - retains value in source page context

Special references are also used in [[page list templates(#specialreferences)]].

For example you can test to see if the page is part of another page
(:markup:)
(:if ! name {$FullName}:)
%comment% name of this page is not the same as the page this text was sourced from
->[[{$FullName}#anchor | more ...]]
(:ifend:)
(:markupend:)
or refer to the main page in a sidebar, footer, or header
(:markup class=horiz:)
This page is [[{*$FullName}]]
(:markupend:)

[[#specialreferencesend]]

!! Default page variables

The page variables defined for PmWiki are:

->[@{$Action}@] - page's url action argument, as in "{$Action}"
->[@{$BaseName}@] - page's "base" form (stripping any prefixes or suffixes defined via @@$BaseNamePatterns@@) as in "`{$BaseName}"
->[@{$DefaultGroup}@] - default group name, as in "{$DefaultGroup}"
->[@{$DefaultName}@] - name of default page, as in "`{$DefaultName}"
->[@{$Description}@] - page's description from the [@(:description:)@] markup, as in "{$Description}"
->[@{$FullName}@] - page's full name, as in "`{$FullName}"
->[@{$Group}@] - page's group name, as in "`{$Group}"
->[@{$Groupspaced}@] - spaced group name, as in "{$Groupspaced}"

->[@{$LastModified}@] - date page was edited, as in "{$LastModified}"
->[@{$LastModifiedBy}@] - page's last editor, as in "{$LastModifiedBy}"
->[@{$LastModifiedHost}@] - IP of page's last editor, as in "{$LastModifiedHost}"
->[@{$LastModifiedSummary}@] - Summary from last edit, as in "{$LastModifiedSummary}"
->[@{$LastModifiedTime}@] - time page was edited in unix-style timestamp, as in "{$LastModifiedTime}" %green%added version 2.2 beta 67%%
-->This can be used (preceded by '@') in [@{(ftime)}@] and other date/time markups.

->[@{$Name}@] - page name, as in "`{$Name}"
->[@{$Namespaced}@] - spaced page name, as in "{$Namespaced}"
->[@{$PageUrl}@] - page's url, as in "{$PageUrl}"
->[@{$PasswdRead}@] - "read" permissions for the page e.g. "{$PasswdRead}"
->[@{$PasswdEdit}@] - "edit" permissions for the page e.g. "{$PasswdEdit}"
->[@{$PasswdAttr}@] - "attr" permissions for the page e.g. "{$PasswdAttr}"
->[@{$RequestedPage}@] - page requested in URL, used on [[Site.PageNotFound]]. e.g. "{$RequestedPage}"
->[@{$SiteGroup}@] - default group name for e.g. RecentChanges, as in "{$SiteGroup}"
->[@{$Title}@] - page title (may differ from Name), as in "{$Title}"
->[@{$Titlespaced}@] - either the page title (if defined), or the spaced page name, as in "{$Titlespaced}"

In addition to the above, there are some page-invariant variables available through this markup:

->[@{$Author}@] - the name of the person currently interacting with the site, as in "{$Author}"
->[@{$AuthId}@] - current authenticated id, as in "{$AuthId}" %red%Please note the lower case 'd'. [@{$AuthID}@] returns nothing

->[@{$Version}@] - PmWiki version, as in "{$Version}"
->[@{$VersionNum}@] - The internal version number, as in "{$VersionNum}"
->[@{$ScriptUrl}@] - The url to the pmwiki script, as in "{$ScriptUrl}"


!! Custom page variables

You may add custom page variables as a local customization. In a local configuration file or a recipe script, use the variable $FmtPV:

->[@
$FmtPV['$VarName'] = "'variable definition'";
$FmtPV['$CurrentSkin'] = '$GLOBALS["Skin"]';
$FmtPV['$WikiTitle'] = '$GLOBALS["WikiTitle"]';
@]

Defines new Page Variable of name $CurrentSkin, which can be used in the page with [@{$CurrentSkin}@] (also for [[Conditional markup]]). It's necessary to use the single quotes nested inside double-quotes as shown above (preferred) or a double-quoted string nested inside single-quotes like ''[@'"this"'@]''.

If you want to have a Page Variable that returns the currently used password (more precisely, the last password entered), you can use

->[@
$FmtPV['$AuthPw'] = 'reset(array_keys((array)@$_SESSION["authpw"]))';
@]

!! See also

* [[Cookbook:More custom page variables]]
* [[PmWiki.Variables]] &mdash; about variables internal to PmWiki.
* [[PmWiki.MarkupMasterIndex]] &mdash; complete list of PmWiki markups.
* [[PmWiki/PageTextVariables]] &mdash; page variables automatically made available through natural page markup or explicit page markup within the wiki text of the page.
* [[PmWiki.Markup Expressions]] &mdash; markup expressions can manipulate page variables

>>faq<< [[#faq]]

Q:Is there a variable like $LastModified, but which shows me the creation time?
A:No, but you can create one in config.php. For instance:
->[@# add page variable {$PageCreationDate} in format yyyy-mm-dd
$FmtPV['$PageCreationDate'] = 'strftime("%Y-%m-%d", $page["ctime"])';@]

If you like the same format that you define in config.php with $TimeFmt use
[@ $FmtPV['$Created'] = "strftime(\$GLOBALS['TimeFmt'], \$page['ctime'])";
@]
to:
This piece was cgoent, well-written, and pithy.
Lasta ŝanĝo August 31, 2011, at 11:58 AM