Template:When on basepage/doc: Difference between revisions
meta>Frietjes No edit summary |
m 37 revisions imported |
||
(5 intermediate revisions by 5 users not shown) | |||
Line 4: | Line 4: | ||
This is the {{tl|When on basepage}} meta-template. It helps other templates detect if they are on a '''basepage''' (i.e. a page whose name matches the pattern "''x'':''x''") '''subpage''' ("''x'':''x''/''x''") or '''subsubpage''' ("''x'':''x''/''x''/''x''"). | This is the {{tl|When on basepage}} meta-template. It helps other templates detect if they are on a '''basepage''' (i.e. a page whose name matches the pattern "''x'':''x''") '''subpage''' ("''x'':''x''/''x''") or '''subsubpage''' ("''x'':''x''/''x''/''x''"). | ||
An alternative way to detect whether a page is a subpage is to combine the parser functions | An alternative way to detect whether a page is a subpage is to combine the parser functions <code>#ifeq:</code> and <code>#titleparts</code>. See [[#Alternatives for simpler text|Alternatives for simpler text]] below. | ||
== Usage == | == Usage == | ||
Line 10: | Line 10: | ||
: {{tlx|When on basepage |''result if on a basepage'' (|''result if on a subpage'') (|''result if on a subsubpage'') (|page{{=}}''pagename'')}} | : {{tlx|When on basepage |''result if on a basepage'' (|''result if on a subpage'') (|''result if on a subsubpage'') (|page{{=}}''pagename'')}} | ||
For example, {{tlf|When on basepage |Basepage |Subpage}} on the page "User:Example" would return: {{When on basepage|Basepage|Subpage|page=User:Example}}<br/>whilst on "User:Example/page" (or "User:Example/page/page", "User:Example/page/page/page", etc) it would return: {{When on basepage|Basepage|Subpage|page=User:Example/page}} | For example, {{tlf|When on basepage |Basepage |Subpage}} on the page "User:Example" would return: {{When on basepage|Basepage|Subpage|page=User:Example}}<br/>whilst on "User:Example/page" (or "User:Example/page/page", "User:Example/page/page/page", etc.) it would return: {{When on basepage|Basepage|Subpage|page=User:Example/page}} | ||
On a subsubpage such as "User:Example/page/page" (or "User:Example/page/page/page", etc), {{nowrap|{{tlf|When on basepage |Basepage |Subpage |Subsubpage}}}} would return: {{When on basepage |Basepage |Subpage |Subsubpage |page=User:Example/page/page}} | On a subsubpage such as "User:Example/page/page" (or "User:Example/page/page/page", etc.), {{nowrap|{{tlf|When on basepage |Basepage |Subpage |Subsubpage}}}} would return: {{When on basepage |Basepage |Subpage |Subsubpage |page=User:Example/page/page}} | ||
Use an empty parameter to specify no action for a particular type of page. {{nowrap|{{tlf|When on basepage |Basepage | |Subsubpage}}}} on "User:Example/page", for example, would return nothing, but would return "Subsubpage" if on "User:Example/page/page", "User:Example/page/page/page", etc (and "Basepage" if on "User:Example"). | Use an empty parameter to specify no action for a particular type of page. {{nowrap|{{tlf|When on basepage |Basepage | |Subsubpage}}}} on "User:Example/page", for example, would return nothing, but would return "Subsubpage" if on "User:Example/page/page", "User:Example/page/page/page", etc. (and "Basepage" if on "User:Example"). | ||
===Handling equals-signs ("=")=== | ===Handling equals-signs ("=")=== | ||
Line 25: | Line 25: | ||
Regardless of where the above is placed, it will return: {{When on basepage|(basepage result)|(subpage result)|page=User:Example/test}}<br/>(because "User:Example/test" is a subpage). The page doesn't have to exist. | Regardless of where the above is placed, it will return: {{When on basepage|(basepage result)|(subpage result)|page=User:Example/test}}<br/>(because "User:Example/test" is a subpage). The page doesn't have to exist. | ||
If ''page'' is left empty ({{para|page}}) or undefined, the page where the template is transcluded (i.e. {{ | If ''page'' is left empty ({{para|page}}) or undefined, the page where the template is transcluded (i.e. {{tld|PAGENAME}}) is used. | ||
''page'' also accepts variables, e.g. {{nowrap|{{tlf|When on basepage |(basepage result) |(subpage result) |page<nowiki>={{{page|}}}</nowiki> }}}} | ''page'' also accepts variables, e.g. {{nowrap|{{tlf|When on basepage |(basepage result) |(subpage result) |page<nowiki>={{{page|}}}</nowiki> }}}} | ||
Line 35: | Line 35: | ||
== Alternatives for simpler text == | == Alternatives for simpler text == | ||
A subpage can be detected without using another template, by instead using the title-splitting parser function | A subpage can be detected without using another template, by instead using the title-splitting parser function <code>#titleparts</code> with <code>#ifeq</code>: | ||
<pre> | <pre> | ||
{{#ifeq:{{#titleparts:{{PAGENAME}}|1|1}}|{{PAGENAME}} | {{#ifeq:{{#titleparts:{{PAGENAME}}|1|1}}|{{PAGENAME}} | ||
Line 47: | Line 47: | ||
:: <nowiki> | {{template sandbox notice}}</nowiki> | :: <nowiki> | {{template sandbox notice}}</nowiki> | ||
: <nowiki>}}</nowiki> | : <nowiki>}}</nowiki> | ||
That simple logic works because [[Template: | That simple logic works because [[Template:Template sandbox notice]] also checks the page name for "/sandbox" before displaying the sandbox notice; otherwise, any other subpage would show no extra text. By avoiding a template, and using a single <code>#ifeq</code>, then the processing uses only +2 expansion depth levels, rather than +7 levels, and avoids "[[wp:exceeded template limits]]" inside a complex /doc page. | ||
== See also == | == See also == | ||
{{Namespace and pagename-detecting templates}} | {{Namespace and pagename-detecting templates}} | ||
<includeonly>{{ | <includeonly>{{Sandbox other|| | ||
<!--Categories below this line, please; interwikis at Wikidata--> | |||
[[Category: | [[Category:Pagename manipulation templates]] | ||
[[Category:Wikipedia metatemplates]] | [[Category:Wikipedia metatemplates]] | ||
}}</includeonly> | }}</includeonly> |
Latest revision as of 14:11, 3 September 2020
This is a documentation subpage for Template:When on basepage. It may contain usage information, categories and other content that is not part of the original template page. |
This is the {{When on basepage}} meta-template. It helps other templates detect if they are on a basepage (i.e. a page whose name matches the pattern "x:x") subpage ("x:x/x") or subsubpage ("x:x/x/x").
An alternative way to detect whether a page is a subpage is to combine the parser functions #ifeq:
and #titleparts
. See Alternatives for simpler text below.
Usage
{{When on basepage |result if on a basepage (|result if on a subpage) (|result if on a subsubpage) (|page=pagename)}}
For example, {{When on basepage|Basepage|Subpage}} on the page "User:Example" would return: Basepage
whilst on "User:Example/page" (or "User:Example/page/page", "User:Example/page/page/page", etc.) it would return: Subpage
On a subsubpage such as "User:Example/page/page" (or "User:Example/page/page/page", etc.), {{When on basepage|Basepage|Subpage|Subsubpage}} would return: Subsubpage
Use an empty parameter to specify no action for a particular type of page. {{When on basepage|Basepage|Subsubpage}} on "User:Example/page", for example, would return nothing, but would return "Subsubpage" if on "User:Example/page/page", "User:Example/page/page/page", etc. (and "Basepage" if on "User:Example").
Handling equals-signs ("=")
Use numbered parameters if their values include equals-signs ("="), i.e.
- {{When on basepage |1=basepage result (|2=subpage result) (|3=subsubpage result)}}
page parameter
The page parameter is included for testing/demonstration. For example:
- {{When on basepage |(basepage result)|(subpage result)|page=User:Example/test}}
Regardless of where the above is placed, it will return: (subpage result)
(because "User:Example/test" is a subpage). The page doesn't have to exist.
If page is left empty (|page=
) or undefined, the page where the template is transcluded (i.e. {{PAGENAME}}
) is used.
page also accepts variables, e.g. {{When on basepage|(basepage result)|(subpage result)|page={{{page|}}} }}
Technical note
This template detects subpages in all namespaces, including those without the MediaWiki subpage feature enabled.
Alternatives for simpler text
A subpage can be detected without using another template, by instead using the title-splitting parser function #titleparts
with #ifeq
:
{{#ifeq:{{#titleparts:{{PAGENAME}}|1|1}}|{{PAGENAME}} | [...code if on a basepage...] | [...code if on a subpage...] }}
For example, many templates can check if the page is a /sandbox version, by the similar markup with #ifeq
and #titleparts
:
- {{#ifeq: {{#titleparts:{{PAGENAME}}|1|1}} | {{PAGENAME}}
- | {{documentation}}
- | {{template sandbox notice}}
- }}
That simple logic works because Template:Template sandbox notice also checks the page name for "/sandbox" before displaying the sandbox notice; otherwise, any other subpage would show no extra text. By avoiding a template, and using a single #ifeq
, then the processing uses only +2 expansion depth levels, rather than +7 levels, and avoids "wp:exceeded template limits" inside a complex /doc page.
See also