sync-pd2-wiki/.claude/skills/mediawiki-wikitext/references/templates.md

7.8 KiB

MediaWiki Templates and Parser Functions

Template Basics

Calling Templates

{{TemplateName}}
{{TemplateName|positional arg}}
{{TemplateName|param1=value1|param2=value2}}
{{TemplateName
| param1 = value1
| param2 = value2
}}

Template Parameters (Definition Side)

{{{1}}}                    First positional parameter
{{{paramName}}}            Named parameter
{{{1|default}}}            With default value
{{{paramName|}}}           Empty default (vs undefined)

Transclusion

{{:Page Name}}             Transclude article (with colon)
{{Template Name}}          Transclude template
{{subst:Template Name}}    Substitute (one-time expansion)
{{safesubst:Template}}     Safe substitution
{{msgnw:Template}}         Show raw wikitext

Parser Functions

Conditionals

#if (empty test)

{{#if: {{{param|}}} | not empty | empty or undefined }}
{{#if: {{{param|}}} | has value }}

#ifeq (equality test)

{{#ifeq: {{{type}}} | book | It's a book | Not a book }}
{{#ifeq: {{{1}}} | {{{2}}} | same | different }}

#iferror

{{#iferror: {{#expr: 1/0}} | Division error | OK }}

#ifexist (page exists)

{{#ifexist: Page Name | [[Page Name]] | Page doesn't exist }}

#ifexpr (expression test)

{{#ifexpr: {{{count}}} > 10 | Many | Few }}
{{#ifexpr: {{{year}}} mod 4 = 0 | Leap year candidate }}

#switch

{{#switch: {{{type}}}
| book = 📚 Book
| article = 📄 Article
| website = 🌐 Website
| #default = 📋 Other
}}

{{#switch: {{{1}}}
| A | B | C = First three letters
| #default = Something else
}}

String Functions

#len

{{#len: Hello }}           Returns: 5

#pos (find position)

{{#pos: Hello World | o }}      Returns: 4 (first 'o')
{{#pos: Hello World | o | 5 }}  Returns: 7 (after position 5)

#sub (substring)

{{#sub: Hello World | 0 | 5 }}   Returns: Hello
{{#sub: Hello World | 6 }}       Returns: World
{{#sub: Hello World | -5 }}      Returns: World (from end)

#replace

{{#replace: Hello World | World | Universe }}   Returns: Hello Universe

#explode (split)

{{#explode: a,b,c,d | , | 2 }}   Returns: c (third element)

#urlencode / #urldecode

{{#urlencode: Hello World }}     Returns: Hello%20World
{{#urldecode: Hello%20World }}   Returns: Hello World

Math Functions

#expr

{{#expr: 1 + 2 * 3 }}           Returns: 7
{{#expr: (1 + 2) * 3 }}         Returns: 9
{{#expr: 2 ^ 10 }}              Returns: 1024
{{#expr: 17 mod 5 }}            Returns: 2
{{#expr: floor(3.7) }}          Returns: 3
{{#expr: ceil(3.2) }}           Returns: 4
{{#expr: round(3.567, 2) }}     Returns: 3.57
{{#expr: abs(-5) }}             Returns: 5
{{#expr: sqrt(16) }}            Returns: 4
{{#expr: ln(e) }}               Returns: 1
{{#expr: sin(pi/2) }}           Returns: 1

Operators: +, -, *, /, ^ (power), mod, round, floor, ceil, abs, sqrt, ln, exp, sin, cos, tan, asin, acos, atan, pi, e

Comparison: =, <>, !=, <, >, <=, >=

Logical: and, or, not

Date/Time Functions

#time

{{#time: Y-m-d }}                     Current: 2024-01-15
{{#time: F j, Y | 2024-01-15 }}       January 15, 2024
{{#time: Y年n月j日 | 2024-01-15 }}     2024年1月15日
{{#time: l | 2024-01-15 }}            Monday

Format codes:

Code Output Description
Y 2024 4-digit year
y 24 2-digit year
n 1 Month (no leading zero)
m 01 Month (with leading zero)
F January Full month name
M Jan Abbreviated month
j 5 Day (no leading zero)
d 05 Day (with leading zero)
l Monday Full weekday
D Mon Abbreviated weekday
H 14 Hour (24h, leading zero)
i 05 Minutes (leading zero)
s 09 Seconds (leading zero)

#timel (local time)

{{#timel: H:i }}                      Local time

Formatting Functions

#formatnum

{{#formatnum: 1234567.89 }}          1,234,567.89
{{#formatnum: 1,234.56 | R }}        1234.56 (raw)

#padleft / #padright

{{#padleft: 7 | 3 | 0 }}             007
{{#padright: abc | 6 | . }}          abc...

#lc / #uc / #lcfirst / #ucfirst

{{#lc: HELLO }}                       hello
{{#uc: hello }}                       HELLO
{{#lcfirst: HELLO }}                  hELLO
{{#ucfirst: hello }}                  Hello
{{lc: HELLO }}                        hello (shortcut)

Other Functions

#tag

{{#tag: ref | Citation text | name=smith }}
Equivalent to: <ref name="smith">Citation text</ref>

#invoke (Lua modules)

{{#invoke: ModuleName | functionName | arg1 | arg2 }}

Magic Words

Behavior Switches

__NOTOC__              No table of contents
__FORCETOC__           Force TOC even with <4 headings
__TOC__                Place TOC here
__NOEDITSECTION__      No section edit links
__NEWSECTIONLINK__     Add new section link
__NONEWSECTIONLINK__   Remove new section link
__NOGALLERY__          No gallery in category
__HIDDENCAT__          Hidden category
__INDEX__              Index by search engines
__NOINDEX__            Don't index
__STATICREDIRECT__     Don't update redirect

Page Variables

{{PAGENAME}}           Page title without namespace
{{FULLPAGENAME}}       Full page title
{{BASEPAGENAME}}       Parent page name
{{SUBPAGENAME}}        Subpage name
{{ROOTPAGENAME}}       Root page name
{{TALKPAGENAME}}       Associated talk page
{{NAMESPACE}}          Current namespace
{{NAMESPACENUMBER}}    Namespace number
{{PAGEID}}             Page ID
{{REVISIONID}}         Revision ID

Site Variables

{{SITENAME}}           Wiki name
{{SERVER}}             Server URL
{{SERVERNAME}}         Server hostname
{{SCRIPTPATH}}         Script path

Date/Time Variables

{{CURRENTYEAR}}        4-digit year
{{CURRENTMONTH}}       Month (01-12)
{{CURRENTMONTHNAME}}   Month name
{{CURRENTDAY}}         Day (1-31)
{{CURRENTDAYNAME}}     Day name
{{CURRENTTIME}}        HH:MM
{{CURRENTTIMESTAMP}}   YYYYMMDDHHmmss

Statistics

{{NUMBEROFPAGES}}      Total pages
{{NUMBEROFARTICLES}}   Content pages
{{NUMBEROFFILES}}      Files
{{NUMBEROFUSERS}}      Registered users
{{NUMBEROFACTIVEUSERS}} Active users
{{NUMBEROFEDITS}}      Total edits
{{PAGESINCATEGORY:Name}} Pages in category

Template Examples

Simple Infobox

<noinclude>{{Documentation}}</noinclude><includeonly>
{| class="infobox" style="width:22em"
|-
! colspan="2" style="background:#ccc" | {{{title|{{PAGENAME}}}}}
{{#if:{{{image|}}}|
{{!}}-
{{!}} colspan="2" {{!}} [[File:{{{image}}}|200px|center]]
}}
|-
| '''Type''' || {{{type|Unknown}}}
|-
| '''Date''' || {{{date|—}}}
|}
</includeonly>

Navbox Template

<noinclude>{{Documentation}}</noinclude><includeonly>
{| class="navbox" style="width:100%"
|-
! style="background:#ccf" | {{{title|Navigation}}}
|-
| {{{content|}}}
|}
</includeonly>

Citation Template

<includeonly>{{#if:{{{author|}}}|{{{author}}}. }}{{#if:{{{title|}}}|''{{{title}}}''. }}{{#if:{{{publisher|}}}|{{{publisher}}}{{#if:{{{year|}}}|, }}}}{{{year|}}}.{{#if:{{{url|}}}| [{{{url}}} Link]}}</includeonly>

Tips

  1. Pipe trick: [[Help:Contents|]] displays as "Contents"
  2. Escape pipes in templates: Use {{!}} for literal |
  3. Trim whitespace: Parameters automatically trim whitespace
  4. Check emptiness correctly: {{{param|}}} vs {{{param}}} - the former has empty default, latter is undefined if not passed
  5. Subst for speed: Use {{subst:Template}} for templates that don't need dynamic updates