3 <html lang=
"en" class=
"no-js">
7 <meta name=
"viewport" content=
"width=device-width,initial-scale=1">
11 <link rel=
"canonical" href=
"https://docs.woltlab.com/6.0/view/template-plugins/">
14 <link rel=
"prev" href=
"../templates/">
17 <link rel=
"next" href=
"../css/">
19 <link rel=
"icon" href=
"../../assets/default.favicon.ico">
20 <meta name=
"generator" content=
"mkdocs-1.4.2, mkdocs-material-9.0.15">
24 <title>Template Plugins - WoltLab Suite Documentation
</title>
28 <link rel=
"stylesheet" href=
"../../assets/stylesheets/main.113286f1.min.css">
31 <link rel=
"stylesheet" href=
"../../assets/stylesheets/palette.a0c5b2b5.min.css">
41 <link rel=
"stylesheet" href=
"../../stylesheets/extra.css">
43 <script>__md_scope=new URL(
"../..",location),__md_hash=e=
>[...e].reduce((e,_)=
>(e<
<5)-e+_.charCodeAt(
0),
0),__md_get=(e,_=localStorage,t=__md_scope)=
>JSON.parse(_.getItem(t.pathname+
"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=
>{try{t.setItem(a.pathname+
"."+e,JSON.stringify(_))}catch(e){}}
</script>
58 <body dir=
"ltr" data-md-color-scheme=
"default" data-md-color-primary=
"teal" data-md-color-accent=
"">
62 <input class=
"md-toggle" data-md-toggle=
"drawer" type=
"checkbox" id=
"__drawer" autocomplete=
"off">
63 <input class=
"md-toggle" data-md-toggle=
"search" type=
"checkbox" id=
"__search" autocomplete=
"off">
64 <label class=
"md-overlay" for=
"__drawer"></label>
65 <div data-md-component=
"skip">
68 <a href=
"#template-plugins" class=
"md-skip">
73 <div data-md-component=
"announce">
75 <aside class=
"md-banner">
76 <div class=
"md-banner__inner md-grid md-typeset">
79 <a href=
"https://www.woltlab.com">Back to
<strong>woltlab.com
</strong></a>
87 <div data-md-color-scheme=
"default" data-md-component=
"outdated" hidden
>
94 <header class=
"md-header" data-md-component=
"header">
95 <nav class=
"md-header__inner md-grid" aria-label=
"Header">
96 <a href=
"../.." title=
"WoltLab Suite Documentation" class=
"md-header__button md-logo" aria-label=
"WoltLab Suite Documentation" data-md-component=
"logo">
98 <img src=
"../../assets/logo.png" alt=
"logo">
101 <label class=
"md-header__button md-icon" for=
"__drawer">
102 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
104 <div class=
"md-header__title" data-md-component=
"header-title">
105 <div class=
"md-header__ellipsis">
106 <div class=
"md-header__topic">
107 <span class=
"md-ellipsis">
108 WoltLab Suite Documentation
111 <div class=
"md-header__topic" data-md-component=
"header-topic">
112 <span class=
"md-ellipsis">
123 <label class=
"md-header__button md-icon" for=
"__search">
124 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
126 <div class=
"md-search" data-md-component=
"search" role=
"dialog">
127 <label class=
"md-search__overlay" for=
"__search"></label>
128 <div class=
"md-search__inner" role=
"search">
129 <form class=
"md-search__form" name=
"search">
130 <input type=
"text" class=
"md-search__input" name=
"query" aria-label=
"Search" placeholder=
"Search" autocapitalize=
"off" autocorrect=
"off" autocomplete=
"off" spellcheck=
"false" data-md-component=
"search-query" required
>
131 <label class=
"md-search__icon md-icon" for=
"__search">
132 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
133 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
135 <nav class=
"md-search__options" aria-label=
"Search">
137 <button type=
"reset" class=
"md-search__icon md-icon" title=
"Clear" aria-label=
"Clear" tabindex=
"-1">
138 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 24 24"><path d=
"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
143 <div class=
"md-search__output">
144 <div class=
"md-search__scrollwrap" data-md-scrollfix
>
145 <div class=
"md-search-result" data-md-component=
"search-result">
146 <div class=
"md-search-result__meta">
149 <ol class=
"md-search-result__list" role=
"presentation"></ol>
157 <div class=
"md-header__source">
158 <a href=
"https://github.com/WoltLab/docs.woltlab.com/" title=
"Go to repository" class=
"md-source" data-md-component=
"source">
159 <div class=
"md-source__icon md-icon">
161 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d=
"M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
163 <div class=
"md-source__repository">
173 <div class=
"md-container" data-md-component=
"container">
180 <main class=
"md-main" data-md-component=
"main">
181 <div class=
"md-main__inner md-grid">
185 <div class=
"md-sidebar md-sidebar--primary" data-md-component=
"sidebar" data-md-type=
"navigation" >
186 <div class=
"md-sidebar__scrollwrap">
187 <div class=
"md-sidebar__inner">
191 <nav class=
"md-nav md-nav--primary" aria-label=
"Navigation" data-md-level=
"0">
192 <label class=
"md-nav__title" for=
"__drawer">
193 <a href=
"../.." title=
"WoltLab Suite Documentation" class=
"md-nav__button md-logo" aria-label=
"WoltLab Suite Documentation" data-md-component=
"logo">
195 <img src=
"../../assets/logo.png" alt=
"logo">
198 WoltLab Suite Documentation
201 <div class=
"md-nav__source">
202 <a href=
"https://github.com/WoltLab/docs.woltlab.com/" title=
"Go to repository" class=
"md-source" data-md-component=
"source">
203 <div class=
"md-source__icon md-icon">
205 <svg xmlns=
"http://www.w3.org/2000/svg" viewBox=
"0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d=
"M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
207 <div class=
"md-source__repository">
213 <ul class=
"md-nav__list" data-md-scrollfix
>
222 <li class=
"md-nav__item">
223 <a href=
"../../getting-started/" class=
"md-nav__link">
238 <li class=
"md-nav__item md-nav__item--nested">
243 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2" >
247 <label class=
"md-nav__link" for=
"__nav_2" id=
"__nav_2_label" tabindex=
"0">
249 <span class=
"md-nav__icon md-icon"></span>
252 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_2_label" aria-expanded=
"false">
253 <label class=
"md-nav__title" for=
"__nav_2">
254 <span class=
"md-nav__icon md-icon"></span>
257 <ul class=
"md-nav__list" data-md-scrollfix
>
264 <li class=
"md-nav__item">
265 <a href=
"../../php/pages/" class=
"md-nav__link">
278 <li class=
"md-nav__item">
279 <a href=
"../../php/database-objects/" class=
"md-nav__link">
292 <li class=
"md-nav__item">
293 <a href=
"../../php/database-access/" class=
"md-nav__link">
306 <li class=
"md-nav__item">
307 <a href=
"../../php/exceptions/" class=
"md-nav__link">
321 <li class=
"md-nav__item md-nav__item--nested">
326 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2_5" >
330 <label class=
"md-nav__link" for=
"__nav_2_5" id=
"__nav_2_5_label" tabindex=
"0">
332 <span class=
"md-nav__icon md-icon"></span>
335 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_2_5_label" aria-expanded=
"false">
336 <label class=
"md-nav__title" for=
"__nav_2_5">
337 <span class=
"md-nav__icon md-icon"></span>
340 <ul class=
"md-nav__list" data-md-scrollfix
>
348 <li class=
"md-nav__item md-nav__item--nested">
353 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2_5_1" >
357 <label class=
"md-nav__link" for=
"__nav_2_5_1" id=
"__nav_2_5_1_label" tabindex=
"0">
359 <span class=
"md-nav__icon md-icon"></span>
362 <nav class=
"md-nav" data-md-level=
"3" aria-labelledby=
"__nav_2_5_1_label" aria-expanded=
"false">
363 <label class=
"md-nav__title" for=
"__nav_2_5_1">
364 <span class=
"md-nav__icon md-icon"></span>
367 <ul class=
"md-nav__list" data-md-scrollfix
>
374 <li class=
"md-nav__item">
375 <a href=
"../../php/api/caches/" class=
"md-nav__link">
388 <li class=
"md-nav__item">
389 <a href=
"../../php/api/caches_persistent-caches/" class=
"md-nav__link">
402 <li class=
"md-nav__item">
403 <a href=
"../../php/api/caches_runtime-caches/" class=
"md-nav__link">
423 <li class=
"md-nav__item">
424 <a href=
"../../php/api/comments/" class=
"md-nav__link">
437 <li class=
"md-nav__item">
438 <a href=
"../../php/api/cronjobs/" class=
"md-nav__link">
451 <li class=
"md-nav__item">
452 <a href=
"../../php/api/events/" class=
"md-nav__link">
466 <li class=
"md-nav__item md-nav__item--nested">
471 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_2_5_5" >
475 <label class=
"md-nav__link" for=
"__nav_2_5_5" id=
"__nav_2_5_5_label" tabindex=
"0">
477 <span class=
"md-nav__icon md-icon"></span>
480 <nav class=
"md-nav" data-md-level=
"3" aria-labelledby=
"__nav_2_5_5_label" aria-expanded=
"false">
481 <label class=
"md-nav__title" for=
"__nav_2_5_5">
482 <span class=
"md-nav__icon md-icon"></span>
485 <ul class=
"md-nav__list" data-md-scrollfix
>
492 <li class=
"md-nav__item">
493 <a href=
"../../php/api/form_builder/overview/" class=
"md-nav__link">
506 <li class=
"md-nav__item">
507 <a href=
"../../php/api/form_builder/structure/" class=
"md-nav__link">
520 <li class=
"md-nav__item">
521 <a href=
"../../php/api/form_builder/form_fields/" class=
"md-nav__link">
534 <li class=
"md-nav__item">
535 <a href=
"../../php/api/form_builder/validation_data/" class=
"md-nav__link">
548 <li class=
"md-nav__item">
549 <a href=
"../../php/api/form_builder/dependencies/" class=
"md-nav__link">
569 <li class=
"md-nav__item">
570 <a href=
"../../php/api/package_installation_plugins/" class=
"md-nav__link">
571 Package Installation Plugins
583 <li class=
"md-nav__item">
584 <a href=
"../../php/api/user_activity_points/" class=
"md-nav__link">
597 <li class=
"md-nav__item">
598 <a href=
"../../php/api/user_notifications/" class=
"md-nav__link">
611 <li class=
"md-nav__item">
612 <a href=
"../../php/api/sitemaps/" class=
"md-nav__link">
632 <li class=
"md-nav__item">
633 <a href=
"../../php/code-style/" class=
"md-nav__link">
646 <li class=
"md-nav__item">
647 <a href=
"../../php/apps/" class=
"md-nav__link">
660 <li class=
"md-nav__item">
661 <a href=
"../../php/gdpr/" class=
"md-nav__link">
685 <li class=
"md-nav__item md-nav__item--active md-nav__item--nested">
690 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_3" checked
>
694 <label class=
"md-nav__link" for=
"__nav_3" id=
"__nav_3_label" tabindex=
"0">
695 Languages, Templates & CSS
696 <span class=
"md-nav__icon md-icon"></span>
699 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_3_label" aria-expanded=
"true">
700 <label class=
"md-nav__title" for=
"__nav_3">
701 <span class=
"md-nav__icon md-icon"></span>
702 Languages, Templates & CSS
704 <ul class=
"md-nav__list" data-md-scrollfix
>
711 <li class=
"md-nav__item">
712 <a href=
"../languages/" class=
"md-nav__link">
725 <li class=
"md-nav__item">
726 <a href=
"../templates/" class=
"md-nav__link">
741 <li class=
"md-nav__item md-nav__item--active">
743 <input class=
"md-nav__toggle md-toggle" type=
"checkbox" id=
"__toc">
749 <label class=
"md-nav__link md-nav__link--active" for=
"__toc">
751 <span class=
"md-nav__icon md-icon"></span>
754 <a href=
"./" class=
"md-nav__link md-nav__link--active">
760 <nav class=
"md-nav md-nav--secondary" aria-label=
"Table of contents">
767 <label class=
"md-nav__title" for=
"__toc">
768 <span class=
"md-nav__icon md-icon"></span>
771 <ul class=
"md-nav__list" data-md-component=
"toc" data-md-scrollfix
>
773 <li class=
"md-nav__item">
774 <a href=
"#anchor" class=
"md-nav__link">
780 <li class=
"md-nav__item">
781 <a href=
"#anchorattributes" class=
"md-nav__link">
787 <li class=
"md-nav__item">
788 <a href=
"#append" class=
"md-nav__link">
794 <li class=
"md-nav__item">
795 <a href=
"#assign" class=
"md-nav__link">
801 <li class=
"md-nav__item">
802 <a href=
"#capture" class=
"md-nav__link">
808 <li class=
"md-nav__item">
809 <a href=
"#concat" class=
"md-nav__link">
815 <li class=
"md-nav__item">
816 <a href=
"#counter" class=
"md-nav__link">
822 <li class=
"md-nav__item">
823 <a href=
"#54-csrftoken" class=
"md-nav__link">
829 <li class=
"md-nav__item">
830 <a href=
"#currency" class=
"md-nav__link">
836 <li class=
"md-nav__item">
837 <a href=
"#cycle" class=
"md-nav__link">
843 <li class=
"md-nav__item">
844 <a href=
"#date" class=
"md-nav__link">
850 <li class=
"md-nav__item">
851 <a href=
"#dateinterval" class=
"md-nav__link">
857 <li class=
"md-nav__item">
858 <a href=
"#encodejs" class=
"md-nav__link">
864 <li class=
"md-nav__item">
865 <a href=
"#escapecdata" class=
"md-nav__link">
871 <li class=
"md-nav__item">
872 <a href=
"#event" class=
"md-nav__link">
878 <li class=
"md-nav__item">
879 <a href=
"#filesizebinary" class=
"md-nav__link">
885 <li class=
"md-nav__item">
886 <a href=
"#filesize" class=
"md-nav__link">
892 <li class=
"md-nav__item">
893 <a href=
"#hascontent" class=
"md-nav__link">
899 <li class=
"md-nav__item">
900 <a href=
"#htmlcheckboxes" class=
"md-nav__link">
906 <li class=
"md-nav__item">
907 <a href=
"#htmloptions" class=
"md-nav__link">
913 <li class=
"md-nav__item">
914 <a href=
"#implode" class=
"md-nav__link">
920 <li class=
"md-nav__item">
921 <a href=
"#ipsearch" class=
"md-nav__link">
927 <li class=
"md-nav__item">
928 <a href=
"#js" class=
"md-nav__link">
934 <li class=
"md-nav__item">
935 <a href=
"#jslang" class=
"md-nav__link">
941 <li class=
"md-nav__item">
942 <a href=
"#55-json" class=
"md-nav__link">
948 <li class=
"md-nav__item">
949 <a href=
"#60-jsphrase" class=
"md-nav__link">
955 <li class=
"md-nav__item">
956 <a href=
"#lang" class=
"md-nav__link">
962 <li class=
"md-nav__item">
963 <a href=
"#language" class=
"md-nav__link">
969 <li class=
"md-nav__item">
970 <a href=
"#link" class=
"md-nav__link">
976 <li class=
"md-nav__item">
977 <a href=
"#newlinetobreak" class=
"md-nav__link">
983 <li class=
"md-nav__item">
984 <a href=
"#54-objectaction" class=
"md-nav__link">
990 <li class=
"md-nav__item">
991 <a href=
"#page" class=
"md-nav__link">
997 <li class=
"md-nav__item">
998 <a href=
"#pages" class=
"md-nav__link">
1004 <li class=
"md-nav__item">
1005 <a href=
"#55-phrase" class=
"md-nav__link">
1011 <li class=
"md-nav__item">
1012 <a href=
"#plaintime" class=
"md-nav__link">
1018 <li class=
"md-nav__item">
1019 <a href=
"#plural" class=
"md-nav__link">
1025 <li class=
"md-nav__item">
1026 <a href=
"#prepend" class=
"md-nav__link">
1032 <li class=
"md-nav__item">
1033 <a href=
"#shortunit" class=
"md-nav__link">
1039 <li class=
"md-nav__item">
1040 <a href=
"#tablewordwrap" class=
"md-nav__link">
1046 <li class=
"md-nav__item">
1047 <a href=
"#time" class=
"md-nav__link">
1053 <li class=
"md-nav__item">
1054 <a href=
"#truncate" class=
"md-nav__link">
1060 <li class=
"md-nav__item">
1061 <a href=
"#user" class=
"md-nav__link">
1081 <li class=
"md-nav__item">
1082 <a href=
"../css/" class=
"md-nav__link">
1104 <li class=
"md-nav__item md-nav__item--nested">
1109 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_4" >
1113 <label class=
"md-nav__link" for=
"__nav_4" id=
"__nav_4_label" tabindex=
"0">
1114 TypeScript and JavaScript API
1115 <span class=
"md-nav__icon md-icon"></span>
1118 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_4_label" aria-expanded=
"false">
1119 <label class=
"md-nav__title" for=
"__nav_4">
1120 <span class=
"md-nav__icon md-icon"></span>
1121 TypeScript and JavaScript API
1123 <ul class=
"md-nav__list" data-md-scrollfix
>
1130 <li class=
"md-nav__item">
1131 <a href=
"../../javascript/general-usage/" class=
"md-nav__link">
1144 <li class=
"md-nav__item">
1145 <a href=
"../../javascript/typescript/" class=
"md-nav__link">
1159 <li class=
"md-nav__item md-nav__item--nested">
1164 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_4_3" >
1168 <label class=
"md-nav__link" for=
"__nav_4_3" id=
"__nav_4_3_label" tabindex=
"0">
1170 <span class=
"md-nav__icon md-icon"></span>
1173 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_4_3_label" aria-expanded=
"false">
1174 <label class=
"md-nav__title" for=
"__nav_4_3">
1175 <span class=
"md-nav__icon md-icon"></span>
1178 <ul class=
"md-nav__list" data-md-scrollfix
>
1185 <li class=
"md-nav__item">
1186 <a href=
"../../javascript/components_confirmation/" class=
"md-nav__link">
1199 <li class=
"md-nav__item">
1200 <a href=
"../../javascript/components_dialog/" class=
"md-nav__link">
1213 <li class=
"md-nav__item">
1214 <a href=
"../../javascript/components_google_maps/" class=
"md-nav__link">
1227 <li class=
"md-nav__item">
1228 <a href=
"../../javascript/components_pagination/" class=
"md-nav__link">
1249 <li class=
"md-nav__item md-nav__item--nested">
1254 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_4_4" >
1258 <label class=
"md-nav__link" for=
"__nav_4_4" id=
"__nav_4_4_label" tabindex=
"0">
1260 <span class=
"md-nav__icon md-icon"></span>
1263 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_4_4_label" aria-expanded=
"false">
1264 <label class=
"md-nav__title" for=
"__nav_4_4">
1265 <span class=
"md-nav__icon md-icon"></span>
1268 <ul class=
"md-nav__list" data-md-scrollfix
>
1275 <li class=
"md-nav__item">
1276 <a href=
"../../javascript/new-api_writing-a-module/" class=
"md-nav__link">
1289 <li class=
"md-nav__item">
1290 <a href=
"../../javascript/new-api_core/" class=
"md-nav__link">
1303 <li class=
"md-nav__item">
1304 <a href=
"../../javascript/new-api_dom/" class=
"md-nav__link">
1317 <li class=
"md-nav__item">
1318 <a href=
"../../javascript/new-api_events/" class=
"md-nav__link">
1331 <li class=
"md-nav__item">
1332 <a href=
"../../javascript/new-api_ajax/" class=
"md-nav__link">
1345 <li class=
"md-nav__item">
1346 <a href=
"../../javascript/new-api_dialogs/" class=
"md-nav__link">
1359 <li class=
"md-nav__item">
1360 <a href=
"../../javascript/new-api_browser/" class=
"md-nav__link">
1361 Browser and Screen Sizes
1373 <li class=
"md-nav__item">
1374 <a href=
"../../javascript/new-api_ui/" class=
"md-nav__link">
1394 <li class=
"md-nav__item">
1395 <a href=
"../../javascript/legacy-api/" class=
"md-nav__link">
1408 <li class=
"md-nav__item">
1409 <a href=
"../../javascript/code-snippets/" class=
"md-nav__link">
1431 <li class=
"md-nav__item md-nav__item--nested">
1436 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_5" >
1440 <label class=
"md-nav__link" for=
"__nav_5" id=
"__nav_5_label" tabindex=
"0">
1442 <span class=
"md-nav__icon md-icon"></span>
1445 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_5_label" aria-expanded=
"false">
1446 <label class=
"md-nav__title" for=
"__nav_5">
1447 <span class=
"md-nav__icon md-icon"></span>
1450 <ul class=
"md-nav__list" data-md-scrollfix
>
1457 <li class=
"md-nav__item">
1458 <a href=
"../../package/package-xml/" class=
"md-nav__link">
1472 <li class=
"md-nav__item md-nav__item--nested">
1477 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_5_2" >
1481 <label class=
"md-nav__link" for=
"__nav_5_2" id=
"__nav_5_2_label" tabindex=
"0">
1483 <span class=
"md-nav__icon md-icon"></span>
1486 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_5_2_label" aria-expanded=
"false">
1487 <label class=
"md-nav__title" for=
"__nav_5_2">
1488 <span class=
"md-nav__icon md-icon"></span>
1491 <ul class=
"md-nav__list" data-md-scrollfix
>
1498 <li class=
"md-nav__item">
1499 <a href=
"../../package/pip/" class=
"md-nav__link">
1512 <li class=
"md-nav__item">
1513 <a href=
"../../package/pip/acl-option/" class=
"md-nav__link">
1526 <li class=
"md-nav__item">
1527 <a href=
"../../package/pip/acp-menu/" class=
"md-nav__link">
1540 <li class=
"md-nav__item">
1541 <a href=
"../../package/pip/acp-search-provider/" class=
"md-nav__link">
1554 <li class=
"md-nav__item">
1555 <a href=
"../../package/pip/acp-template/" class=
"md-nav__link">
1568 <li class=
"md-nav__item">
1569 <a href=
"../../package/pip/acp-template-delete/" class=
"md-nav__link">
1582 <li class=
"md-nav__item">
1583 <a href=
"../../package/pip/bbcode/" class=
"md-nav__link">
1596 <li class=
"md-nav__item">
1597 <a href=
"../../package/pip/box/" class=
"md-nav__link">
1610 <li class=
"md-nav__item">
1611 <a href=
"../../package/pip/clipboard-action/" class=
"md-nav__link">
1624 <li class=
"md-nav__item">
1625 <a href=
"../../package/pip/core-object/" class=
"md-nav__link">
1638 <li class=
"md-nav__item">
1639 <a href=
"../../package/pip/cronjob/" class=
"md-nav__link">
1652 <li class=
"md-nav__item">
1653 <a href=
"../../package/pip/database/" class=
"md-nav__link">
1666 <li class=
"md-nav__item">
1667 <a href=
"../../package/pip/event-listener/" class=
"md-nav__link">
1680 <li class=
"md-nav__item">
1681 <a href=
"../../package/pip/file/" class=
"md-nav__link">
1694 <li class=
"md-nav__item">
1695 <a href=
"../../package/pip/file-delete/" class=
"md-nav__link">
1708 <li class=
"md-nav__item">
1709 <a href=
"../../package/pip/language/" class=
"md-nav__link">
1722 <li class=
"md-nav__item">
1723 <a href=
"../../package/pip/media-provider/" class=
"md-nav__link">
1736 <li class=
"md-nav__item">
1737 <a href=
"../../package/pip/menu/" class=
"md-nav__link">
1750 <li class=
"md-nav__item">
1751 <a href=
"../../package/pip/menu-item/" class=
"md-nav__link">
1764 <li class=
"md-nav__item">
1765 <a href=
"../../package/pip/object-type/" class=
"md-nav__link">
1778 <li class=
"md-nav__item">
1779 <a href=
"../../package/pip/object-type-definition/" class=
"md-nav__link">
1780 objectTypeDefinition
1792 <li class=
"md-nav__item">
1793 <a href=
"../../package/pip/option/" class=
"md-nav__link">
1806 <li class=
"md-nav__item">
1807 <a href=
"../../package/pip/page/" class=
"md-nav__link">
1820 <li class=
"md-nav__item">
1821 <a href=
"../../package/pip/pip/" class=
"md-nav__link">
1834 <li class=
"md-nav__item">
1835 <a href=
"../../package/pip/script/" class=
"md-nav__link">
1848 <li class=
"md-nav__item">
1849 <a href=
"../../package/pip/smiley/" class=
"md-nav__link">
1862 <li class=
"md-nav__item">
1863 <a href=
"../../package/pip/sql/" class=
"md-nav__link">
1876 <li class=
"md-nav__item">
1877 <a href=
"../../package/pip/style/" class=
"md-nav__link">
1890 <li class=
"md-nav__item">
1891 <a href=
"../../package/pip/template/" class=
"md-nav__link">
1904 <li class=
"md-nav__item">
1905 <a href=
"../../package/pip/template-delete/" class=
"md-nav__link">
1918 <li class=
"md-nav__item">
1919 <a href=
"../../package/pip/template-listener/" class=
"md-nav__link">
1932 <li class=
"md-nav__item">
1933 <a href=
"../../package/pip/user-group-option/" class=
"md-nav__link">
1946 <li class=
"md-nav__item">
1947 <a href=
"../../package/pip/user-menu/" class=
"md-nav__link">
1960 <li class=
"md-nav__item">
1961 <a href=
"../../package/pip/user-notification-event/" class=
"md-nav__link">
1962 userNotificationEvent
1974 <li class=
"md-nav__item">
1975 <a href=
"../../package/pip/user-option/" class=
"md-nav__link">
1988 <li class=
"md-nav__item">
1989 <a href=
"../../package/pip/user-profile-menu/" class=
"md-nav__link">
2009 <li class=
"md-nav__item">
2010 <a href=
"../../package/database-php-api/" class=
"md-nav__link">
2032 <li class=
"md-nav__item md-nav__item--nested">
2037 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6" >
2041 <label class=
"md-nav__link" for=
"__nav_6" id=
"__nav_6_label" tabindex=
"0">
2043 <span class=
"md-nav__icon md-icon"></span>
2046 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_6_label" aria-expanded=
"false">
2047 <label class=
"md-nav__title" for=
"__nav_6">
2048 <span class=
"md-nav__icon md-icon"></span>
2051 <ul class=
"md-nav__list" data-md-scrollfix
>
2059 <li class=
"md-nav__item md-nav__item--nested">
2064 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_1" >
2068 <label class=
"md-nav__link" for=
"__nav_6_1" id=
"__nav_6_1_label" tabindex=
"0">
2069 From WoltLab Suite
5.5
2070 <span class=
"md-nav__icon md-icon"></span>
2073 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_1_label" aria-expanded=
"false">
2074 <label class=
"md-nav__title" for=
"__nav_6_1">
2075 <span class=
"md-nav__icon md-icon"></span>
2076 From WoltLab Suite
5.5
2078 <ul class=
"md-nav__list" data-md-scrollfix
>
2085 <li class=
"md-nav__item">
2086 <a href=
"../../migration/wsc55/php/" class=
"md-nav__link">
2099 <li class=
"md-nav__item">
2100 <a href=
"../../migration/wsc55/javascript/" class=
"md-nav__link">
2101 TypeScript and JavaScript
2113 <li class=
"md-nav__item">
2114 <a href=
"../../migration/wsc55/templates/" class=
"md-nav__link">
2127 <li class=
"md-nav__item">
2128 <a href=
"../../migration/wsc55/icons/" class=
"md-nav__link">
2141 <li class=
"md-nav__item">
2142 <a href=
"../../migration/wsc55/dialogs/" class=
"md-nav__link">
2155 <li class=
"md-nav__item">
2156 <a href=
"../../migration/wsc55/libraries/" class=
"md-nav__link">
2157 Third Party Libraries
2169 <li class=
"md-nav__item">
2170 <a href=
"../../migration/wsc55/deprecations_removals/" class=
"md-nav__link">
2171 Deprecations and Removals
2191 <li class=
"md-nav__item md-nav__item--nested">
2196 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_2" >
2200 <label class=
"md-nav__link" for=
"__nav_6_2" id=
"__nav_6_2_label" tabindex=
"0">
2201 From WoltLab Suite
5.4
2202 <span class=
"md-nav__icon md-icon"></span>
2205 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_2_label" aria-expanded=
"false">
2206 <label class=
"md-nav__title" for=
"__nav_6_2">
2207 <span class=
"md-nav__icon md-icon"></span>
2208 From WoltLab Suite
5.4
2210 <ul class=
"md-nav__list" data-md-scrollfix
>
2217 <li class=
"md-nav__item">
2218 <a href=
"../../migration/wsc54/php/" class=
"md-nav__link">
2231 <li class=
"md-nav__item">
2232 <a href=
"../../migration/wsc54/javascript/" class=
"md-nav__link">
2233 TypeScript and JavaScript
2245 <li class=
"md-nav__item">
2246 <a href=
"../../migration/wsc54/templates/" class=
"md-nav__link">
2259 <li class=
"md-nav__item">
2260 <a href=
"../../migration/wsc54/libraries/" class=
"md-nav__link">
2261 Third Party Libraries
2273 <li class=
"md-nav__item">
2274 <a href=
"../../migration/wsc54/deprecations_removals/" class=
"md-nav__link">
2275 Deprecations and Removals
2295 <li class=
"md-nav__item md-nav__item--nested">
2300 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_3" >
2304 <label class=
"md-nav__link" for=
"__nav_6_3" id=
"__nav_6_3_label" tabindex=
"0">
2305 From WoltLab Suite
5.3
2306 <span class=
"md-nav__icon md-icon"></span>
2309 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_3_label" aria-expanded=
"false">
2310 <label class=
"md-nav__title" for=
"__nav_6_3">
2311 <span class=
"md-nav__icon md-icon"></span>
2312 From WoltLab Suite
5.3
2314 <ul class=
"md-nav__list" data-md-scrollfix
>
2321 <li class=
"md-nav__item">
2322 <a href=
"../../migration/wsc53/php/" class=
"md-nav__link">
2335 <li class=
"md-nav__item">
2336 <a href=
"../../migration/wsc53/session/" class=
"md-nav__link">
2337 Session Handling and Authentication
2349 <li class=
"md-nav__item">
2350 <a href=
"../../migration/wsc53/javascript/" class=
"md-nav__link">
2351 TypeScript and JavaScript
2363 <li class=
"md-nav__item">
2364 <a href=
"../../migration/wsc53/templates/" class=
"md-nav__link">
2377 <li class=
"md-nav__item">
2378 <a href=
"../../migration/wsc53/libraries/" class=
"md-nav__link">
2379 Third Party Libraries
2399 <li class=
"md-nav__item md-nav__item--nested">
2404 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_4" >
2408 <label class=
"md-nav__link" for=
"__nav_6_4" id=
"__nav_6_4_label" tabindex=
"0">
2409 From WoltLab Suite
5.2
2410 <span class=
"md-nav__icon md-icon"></span>
2413 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_4_label" aria-expanded=
"false">
2414 <label class=
"md-nav__title" for=
"__nav_6_4">
2415 <span class=
"md-nav__icon md-icon"></span>
2416 From WoltLab Suite
5.2
2418 <ul class=
"md-nav__list" data-md-scrollfix
>
2425 <li class=
"md-nav__item">
2426 <a href=
"../../migration/wsc52/php/" class=
"md-nav__link">
2439 <li class=
"md-nav__item">
2440 <a href=
"../../migration/wsc52/templates/" class=
"md-nav__link">
2441 Templates and Languages
2453 <li class=
"md-nav__item">
2454 <a href=
"../../migration/wsc52/libraries/" class=
"md-nav__link">
2455 Third Party Libraries
2475 <li class=
"md-nav__item md-nav__item--nested">
2480 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_5" >
2484 <label class=
"md-nav__link" for=
"__nav_6_5" id=
"__nav_6_5_label" tabindex=
"0">
2485 From WoltLab Suite
3.1
2486 <span class=
"md-nav__icon md-icon"></span>
2489 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_5_label" aria-expanded=
"false">
2490 <label class=
"md-nav__title" for=
"__nav_6_5">
2491 <span class=
"md-nav__icon md-icon"></span>
2492 From WoltLab Suite
3.1
2494 <ul class=
"md-nav__list" data-md-scrollfix
>
2501 <li class=
"md-nav__item">
2502 <a href=
"../../migration/wsc31/php/" class=
"md-nav__link">
2523 <li class=
"md-nav__item md-nav__item--nested">
2528 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_6" >
2532 <label class=
"md-nav__link" for=
"__nav_6_6" id=
"__nav_6_6_label" tabindex=
"0">
2533 From WoltLab Suite
3.0
2534 <span class=
"md-nav__icon md-icon"></span>
2537 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_6_label" aria-expanded=
"false">
2538 <label class=
"md-nav__title" for=
"__nav_6_6">
2539 <span class=
"md-nav__icon md-icon"></span>
2540 From WoltLab Suite
3.0
2542 <ul class=
"md-nav__list" data-md-scrollfix
>
2549 <li class=
"md-nav__item">
2550 <a href=
"../../migration/wsc30/php/" class=
"md-nav__link">
2563 <li class=
"md-nav__item">
2564 <a href=
"../../migration/wsc30/javascript/" class=
"md-nav__link">
2577 <li class=
"md-nav__item">
2578 <a href=
"../../migration/wsc30/templates/" class=
"md-nav__link">
2591 <li class=
"md-nav__item">
2592 <a href=
"../../migration/wsc30/css/" class=
"md-nav__link">
2605 <li class=
"md-nav__item">
2606 <a href=
"../../migration/wsc30/package/" class=
"md-nav__link">
2627 <li class=
"md-nav__item md-nav__item--nested">
2632 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_6_7" >
2636 <label class=
"md-nav__link" for=
"__nav_6_7" id=
"__nav_6_7_label" tabindex=
"0">
2638 <span class=
"md-nav__icon md-icon"></span>
2641 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_6_7_label" aria-expanded=
"false">
2642 <label class=
"md-nav__title" for=
"__nav_6_7">
2643 <span class=
"md-nav__icon md-icon"></span>
2646 <ul class=
"md-nav__list" data-md-scrollfix
>
2653 <li class=
"md-nav__item">
2654 <a href=
"../../migration/wcf21/php/" class=
"md-nav__link">
2667 <li class=
"md-nav__item">
2668 <a href=
"../../migration/wcf21/templates/" class=
"md-nav__link">
2681 <li class=
"md-nav__item">
2682 <a href=
"../../migration/wcf21/css/" class=
"md-nav__link">
2695 <li class=
"md-nav__item">
2696 <a href=
"../../migration/wcf21/package/" class=
"md-nav__link">
2725 <li class=
"md-nav__item md-nav__item--nested">
2730 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_7" >
2734 <label class=
"md-nav__link" for=
"__nav_7" id=
"__nav_7_label" tabindex=
"0">
2736 <span class=
"md-nav__icon md-icon"></span>
2739 <nav class=
"md-nav" data-md-level=
"1" aria-labelledby=
"__nav_7_label" aria-expanded=
"false">
2740 <label class=
"md-nav__title" for=
"__nav_7">
2741 <span class=
"md-nav__icon md-icon"></span>
2744 <ul class=
"md-nav__list" data-md-scrollfix
>
2752 <li class=
"md-nav__item md-nav__item--nested">
2757 <input class=
"md-nav__toggle md-toggle " type=
"checkbox" id=
"__nav_7_1" >
2761 <label class=
"md-nav__link" for=
"__nav_7_1" id=
"__nav_7_1_label" tabindex=
"0">
2763 <span class=
"md-nav__icon md-icon"></span>
2766 <nav class=
"md-nav" data-md-level=
"2" aria-labelledby=
"__nav_7_1_label" aria-expanded=
"false">
2767 <label class=
"md-nav__title" for=
"__nav_7_1">
2768 <span class=
"md-nav__icon md-icon"></span>
2771 <ul class=
"md-nav__list" data-md-scrollfix
>
2778 <li class=
"md-nav__item">
2779 <a href=
"../../tutorial/series/overview/" class=
"md-nav__link">
2792 <li class=
"md-nav__item">
2793 <a href=
"../../tutorial/series/part_1/" class=
"md-nav__link">
2806 <li class=
"md-nav__item">
2807 <a href=
"../../tutorial/series/part_2/" class=
"md-nav__link">
2820 <li class=
"md-nav__item">
2821 <a href=
"../../tutorial/series/part_3/" class=
"md-nav__link">
2834 <li class=
"md-nav__item">
2835 <a href=
"../../tutorial/series/part_4/" class=
"md-nav__link">
2848 <li class=
"md-nav__item">
2849 <a href=
"../../tutorial/series/part_5/" class=
"md-nav__link">
2862 <li class=
"md-nav__item">
2863 <a href=
"../../tutorial/series/part_6/" class=
"md-nav__link">
2892 <div class=
"md-sidebar md-sidebar--secondary" data-md-component=
"sidebar" data-md-type=
"toc" >
2893 <div class=
"md-sidebar__scrollwrap">
2894 <div class=
"md-sidebar__inner">
2897 <nav class=
"md-nav md-nav--secondary" aria-label=
"Table of contents">
2904 <label class=
"md-nav__title" for=
"__toc">
2905 <span class=
"md-nav__icon md-icon"></span>
2908 <ul class=
"md-nav__list" data-md-component=
"toc" data-md-scrollfix
>
2910 <li class=
"md-nav__item">
2911 <a href=
"#anchor" class=
"md-nav__link">
2917 <li class=
"md-nav__item">
2918 <a href=
"#anchorattributes" class=
"md-nav__link">
2924 <li class=
"md-nav__item">
2925 <a href=
"#append" class=
"md-nav__link">
2931 <li class=
"md-nav__item">
2932 <a href=
"#assign" class=
"md-nav__link">
2938 <li class=
"md-nav__item">
2939 <a href=
"#capture" class=
"md-nav__link">
2945 <li class=
"md-nav__item">
2946 <a href=
"#concat" class=
"md-nav__link">
2952 <li class=
"md-nav__item">
2953 <a href=
"#counter" class=
"md-nav__link">
2959 <li class=
"md-nav__item">
2960 <a href=
"#54-csrftoken" class=
"md-nav__link">
2966 <li class=
"md-nav__item">
2967 <a href=
"#currency" class=
"md-nav__link">
2973 <li class=
"md-nav__item">
2974 <a href=
"#cycle" class=
"md-nav__link">
2980 <li class=
"md-nav__item">
2981 <a href=
"#date" class=
"md-nav__link">
2987 <li class=
"md-nav__item">
2988 <a href=
"#dateinterval" class=
"md-nav__link">
2994 <li class=
"md-nav__item">
2995 <a href=
"#encodejs" class=
"md-nav__link">
3001 <li class=
"md-nav__item">
3002 <a href=
"#escapecdata" class=
"md-nav__link">
3008 <li class=
"md-nav__item">
3009 <a href=
"#event" class=
"md-nav__link">
3015 <li class=
"md-nav__item">
3016 <a href=
"#filesizebinary" class=
"md-nav__link">
3022 <li class=
"md-nav__item">
3023 <a href=
"#filesize" class=
"md-nav__link">
3029 <li class=
"md-nav__item">
3030 <a href=
"#hascontent" class=
"md-nav__link">
3036 <li class=
"md-nav__item">
3037 <a href=
"#htmlcheckboxes" class=
"md-nav__link">
3043 <li class=
"md-nav__item">
3044 <a href=
"#htmloptions" class=
"md-nav__link">
3050 <li class=
"md-nav__item">
3051 <a href=
"#implode" class=
"md-nav__link">
3057 <li class=
"md-nav__item">
3058 <a href=
"#ipsearch" class=
"md-nav__link">
3064 <li class=
"md-nav__item">
3065 <a href=
"#js" class=
"md-nav__link">
3071 <li class=
"md-nav__item">
3072 <a href=
"#jslang" class=
"md-nav__link">
3078 <li class=
"md-nav__item">
3079 <a href=
"#55-json" class=
"md-nav__link">
3085 <li class=
"md-nav__item">
3086 <a href=
"#60-jsphrase" class=
"md-nav__link">
3092 <li class=
"md-nav__item">
3093 <a href=
"#lang" class=
"md-nav__link">
3099 <li class=
"md-nav__item">
3100 <a href=
"#language" class=
"md-nav__link">
3106 <li class=
"md-nav__item">
3107 <a href=
"#link" class=
"md-nav__link">
3113 <li class=
"md-nav__item">
3114 <a href=
"#newlinetobreak" class=
"md-nav__link">
3120 <li class=
"md-nav__item">
3121 <a href=
"#54-objectaction" class=
"md-nav__link">
3127 <li class=
"md-nav__item">
3128 <a href=
"#page" class=
"md-nav__link">
3134 <li class=
"md-nav__item">
3135 <a href=
"#pages" class=
"md-nav__link">
3141 <li class=
"md-nav__item">
3142 <a href=
"#55-phrase" class=
"md-nav__link">
3148 <li class=
"md-nav__item">
3149 <a href=
"#plaintime" class=
"md-nav__link">
3155 <li class=
"md-nav__item">
3156 <a href=
"#plural" class=
"md-nav__link">
3162 <li class=
"md-nav__item">
3163 <a href=
"#prepend" class=
"md-nav__link">
3169 <li class=
"md-nav__item">
3170 <a href=
"#shortunit" class=
"md-nav__link">
3176 <li class=
"md-nav__item">
3177 <a href=
"#tablewordwrap" class=
"md-nav__link">
3183 <li class=
"md-nav__item">
3184 <a href=
"#time" class=
"md-nav__link">
3190 <li class=
"md-nav__item">
3191 <a href=
"#truncate" class=
"md-nav__link">
3197 <li class=
"md-nav__item">
3198 <a href=
"#user" class=
"md-nav__link">
3213 <div class=
"md-content" data-md-component=
"content">
3214 <article class=
"md-content__inner md-typeset">
3222 <h1 id=
"template-plugins">Template Plugins
<a class=
"headerlink" href=
"#template-plugins" title=
"Permanent link">#
</a></h1>
3223 <h2 id=
"anchor"><code>{anchor}
</code><a class=
"headerlink" href=
"#anchor" title=
"Permanent link">#
</a></h2>
3224 <p>The
<code>anchor
</code> template plugin creates
<code>a
</code> HTML elements.
3225 The easiest way to use the template plugin is to pass it an instance of
<code>ITitledLinkObject
</code>:
</p>
3226 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">anchor
</span> <span class=
"na">object
</span><span class=
"o">=
</span><span class=
"nv">$object
</span><span class=
"cp">}
</span>
3227 </code></pre></div></td></tr></table></div>
3228 <p>generates the same output as
</p>
3229 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><a href=
"</span><span class=
"cp">{
</span><span class=
"nv">$object
</span><span class=
"o">-
></span><span class=
"na">getLink
</span><span class=
"o">()
</span><span class=
"cp">}
</span><span class=
"x">"></span><span class=
"cp">{
</span><span class=
"nv">$object
</span><span class=
"o">-
></span><span class=
"na">getTitle
</span><span class=
"o">()
</span><span class=
"cp">}
</span><span class=
"x"></a
></span>
3230 </code></pre></div></td></tr></table></div>
3231 <p>Instead of an
<code>object
</code> parameter, a
<code>link
</code> and
<code>content
</code> parameter can be used:
</p>
3232 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">anchor
</span> <span class=
"na">link
</span><span class=
"o">=
</span><span class=
"nv">$linkObject
</span> <span class=
"na">content
</span><span class=
"o">=
</span><span class=
"nv">$content
</span><span class=
"cp">}
</span>
3233 </code></pre></div></td></tr></table></div>
3234 <p>where
<code>$linkObject
</code> implements
<code>ILinkableObject
</code> and
<code>$content
</code> is either an object implementing
<code>ITitledObject
</code> or having a
<code>__toString()
</code> method or
<code>$content
</code> is a string or a number.
</p>
3235 <p>The last special attribute is
<code>append
</code> whose contents are appended to the
<code>href
</code> attribute of the generated anchor element.
</p>
3236 <p>All of the other attributes matching
<code>~^[a-z]+([A-z]+)+$~
</code>, expect for
<code>href
</code> which is disallowed, are added as attributes to the anchor element.
</p>
3237 <p>If an
<code>object
</code> attribute is present, the object also implements
<code>IPopoverObject
</code> and if the return value of
<code>IPopoverObject::getPopoverLinkClass()
</code> is included in the
<code>class
</code> attribute of the
<code>anchor
</code> tag,
<code>data-object-id
</code> is automatically added.
3238 This functionality makes it easy to generate links with popover support.
3240 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><a href=
"</span><span class=
"cp">{
</span><span class=
"nv">$entry
</span><span class=
"o">-
></span><span class=
"na">getLink
</span><span class=
"o">()
</span><span class=
"cp">}
</span><span class=
"x">" class=
"blogEntryLink
" data-object-id=
"</span><span class=
"cp">{
</span><span class=
"nv">$entry
</span><span class=
"o">-
></span><span class=
"na">entryID
</span><span class=
"cp">}
</span><span class=
"x">"></span><span class=
"cp">{
</span><span class=
"nv">$entry
</span><span class=
"o">-
></span><span class=
"na">subject
</span><span class=
"cp">}
</span><span class=
"x"></a
></span>
3241 </code></pre></div></td></tr></table></div>
3243 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">anchor
</span> <span class=
"na">object
</span><span class=
"o">=
</span><span class=
"nv">$entry
</span> <span class=
"na">class
</span><span class=
"o">=
</span><span class=
"s1">'blogEntryLink
'</span><span class=
"cp">}
</span>
3244 </code></pre></div></td></tr></table></div>
3245 <p>is sufficient if
<code>Entry::getPopoverLinkClass()
</code> returns
<code>blogEntryLink
</code>.
</p>
3246 <h2 id=
"anchorattributes"><code>{anchorAttributes}
</code><a class=
"headerlink" href=
"#anchorattributes" title=
"Permanent link">#
</a></h2>
3247 <p><code>anchorAttributes
</code> compliments the
<code>StringUtil::getAnchorTagAttributes(string, bool): string
</code> method.
3248 It allows to easily generate the necessary attributes for an anchor tag based off the destination URL.
</p>
3249 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><a href=
"https://www.example.com
" </span><span class=
"cp">{
</span><span class=
"nf">anchorAttributes
</span> <span class=
"na">url
</span><span class=
"o">=
</span><span class=
"s1">'https://www.example.com
'</span> <span class=
"na">appendHref
</span><span class=
"o">=
</span><span class=
"kc">false
</span> <span class=
"na">appendClassname
</span><span class=
"o">=
</span><span class=
"kc">true
</span> <span class=
"na">isUgc
</span><span class=
"o">=
</span><span class=
"kc">true
</span><span class=
"cp">}
</span><span class=
"x">></span>
3250 </code></pre></div></td></tr></table></div>
3255 <th>Description
</th>
3260 <td><code>url
</code></td>
3261 <td>destination URL
</td>
3264 <td><code>appendHref
</code></td>
3265 <td>whether the
<code>href
</code> attribute should be generated;
<code>true
</code> by default
</td>
3268 <td><code>isUgc
</code></td>
3269 <td>whether the
<code>rel=
"ugc"</code> attribute should be generated;
<code>false
</code> by default
</td>
3272 <td><code>appendClassname
</code></td>
3273 <td>whether the
<code>class=
"externalURL"</code> attribute should be generated;
<code>true
</code> by default
</td>
3277 <h2 id=
"append"><code>{append}
</code><a class=
"headerlink" href=
"#append" title=
"Permanent link">#
</a></h2>
3278 <p>If a string should be appended to the value of a variable,
<code>append
</code> can be used:
</p>
3279 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3280 <span class=
"normal">2</span>
3281 <span class=
"normal">3</span>
3282 <span class=
"normal">4</span>
3283 <span class=
"normal">5</span>
3284 <span class=
"normal">6</span>
3285 <span class=
"normal">7</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">templateVariable
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"s1">'newValue
'</span><span class=
"cp">}
</span>
3287 <span class=
"cp">{
</span><span class=
"nv">$templateVariable
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'newValue *
</span><span class=
"cp">}
</span>
3289 <span class=
"cp">{
</span><span class=
"nf">append
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">templateVariable
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"s1">'2'</span><span class=
"cp">}
</span>
3291 <span class=
"cp">{
</span><span class=
"nv">$templateVariable
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* now prints
'newValue2 *
</span><span class=
"cp">}
</span>
3292 </code></pre></div></td></tr></table></div>
3293 <p>If the variables does not exist yet,
<code>append
</code> creates a new one with the given value.
3294 If
<code>append
</code> is used on an array as the variable, the value is appended to all elements of the array.
</p>
3295 <h2 id=
"assign"><code>{assign}
</code><a class=
"headerlink" href=
"#assign" title=
"Permanent link">#
</a></h2>
3296 <p>New template variables can be declared and new values can be assigned to existing template variables using
<code>assign
</code>:
</p>
3297 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3298 <span class=
"normal">2</span>
3299 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">templateVariable
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"s1">'newValue
'</span><span class=
"cp">}
</span>
3301 <span class=
"cp">{
</span><span class=
"nv">$templateVariable
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'newValue *
</span><span class=
"cp">}
</span>
3302 </code></pre></div></td></tr></table></div>
3303 <h2 id=
"capture"><code>{capture}
</code><a class=
"headerlink" href=
"#capture" title=
"Permanent link">#
</a></h2>
3304 <p>In some situations,
<code>assign
</code> is not sufficient to assign values to variables in templates if the value is complex.
3305 Instead,
<code>capture
</code> can be used:
</p>
3306 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3307 <span class=
"normal">2</span>
3308 <span class=
"normal">3</span>
3309 <span class=
"normal">4</span>
3310 <span class=
"normal">5</span>
3311 <span class=
"normal">6</span>
3312 <span class=
"normal">7</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">capture
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">templateVariable
</span><span class=
"cp">}
</span>
3313 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">if
</span> <span class=
"nv">$foo
</span><span class=
"cp">}
</span>
3314 <span class=
"x"> <p
></span><span class=
"cp">{
</span><span class=
"nv">$bar
</span><span class=
"cp">}
</span><span class=
"x"></p
></span>
3315 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">else
</span><span class=
"cp">}
</span>
3316 <span class=
"x"> <small
></span><span class=
"cp">{
</span><span class=
"nv">$baz
</span><span class=
"cp">}
</span><span class=
"x"></small
></span>
3317 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">/if
</span><span class=
"cp">}
</span>
3318 <span class=
"cp">{
</span><span class=
"nf">/capture
</span><span class=
"cp">}
</span>
3319 </code></pre></div></td></tr></table></div>
3320 <h2 id=
"concat"><code>|concat
</code><a class=
"headerlink" href=
"#concat" title=
"Permanent link">#
</a></h2>
3321 <p><code>concat
</code> is a modifier used to concatenate multiple strings:
</p>
3322 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3323 <span class=
"normal">2</span>
3324 <span class=
"normal">3</span>
3325 <span class=
"normal">4</span>
3326 <span class=
"normal">5</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">foo
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"s1">'foo
'</span><span class=
"cp">}
</span>
3328 <span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">templateVariable
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"s1">'bar
'</span><span class=
"o">|
</span><span class=
"na">concat
</span><span class=
"o">:
</span><span class=
"nv">$foo
</span><span class=
"cp">}
</span>
3330 <span class=
"cp">{
</span><span class=
"nv">$templateVariable
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'foobar *
</span><span class=
"cp">}
</span>
3331 </code></pre></div></td></tr></table></div>
3332 <h2 id=
"counter"><code>{counter}
</code><a class=
"headerlink" href=
"#counter" title=
"Permanent link">#
</a></h2>
3333 <p><code>counter
</code> can be used to generate and optionally print a counter:
</p>
3334 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3335 <span class=
"normal">2</span>
3336 <span class=
"normal">3</span>
3337 <span class=
"normal">4</span>
3338 <span class=
"normal">5</span>
3339 <span class=
"normal">6</span>
3340 <span class=
"normal">7</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">counter
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">fooCounter
</span> <span class=
"na">print
</span><span class=
"o">=
</span><span class=
"kc">true
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'1' *
</span><span class=
"cp">}
</span>
3342 <span class=
"cp">{
</span><span class=
"nf">counter
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">fooCounter
</span> <span class=
"na">print
</span><span class=
"o">=
</span><span class=
"kc">true
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'2' now *
</span><span class=
"cp">}
</span>
3344 <span class=
"cp">{
</span><span class=
"nf">counter
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">fooCounter
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints nothing, but counter value is
'3' now internally *
</span><span class=
"cp">}
</span>
3346 <span class=
"cp">{
</span><span class=
"nf">counter
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">fooCounter
</span> <span class=
"na">print
</span><span class=
"o">=
</span><span class=
"kc">true
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'4' *
</span><span class=
"cp">}
</span>
3347 </code></pre></div></td></tr></table></div>
3348 <p>Counter supports the following attributes:
</p>
3353 <th>Description
</th>
3358 <td><code>assign
</code></td>
3359 <td>optional name of the template variable the current counter value is assigned to
</td>
3362 <td><code>direction
</code></td>
3363 <td>counting direction, either
<code>up
</code> or
<code>down
</code>;
<code>up
</code> by default
</td>
3366 <td><code>name
</code></td>
3367 <td>name of the counter, relevant if multiple counters are used simultaneously
</td>
3370 <td><code>print
</code></td>
3371 <td>if
<code>true
</code>, the current counter value is printed;
<code>false
</code> by default
</td>
3374 <td><code>skip
</code></td>
3375 <td>positive counting increment;
<code>1</code> by default
</td>
3378 <td><code>start
</code></td>
3379 <td>start counter value;
<code>1</code> by default
</td>
3383 <h2 id=
"54-csrftoken"><span class=
"label label-info">5.4+
</span> <code>csrfToken
</code><a class=
"headerlink" href=
"#54-csrftoken" title=
"Permanent link">#
</a></h2>
3384 <p><code>{csrfToken}
</code> prints out the session's CSRF token (“Security Token”).
</p>
3385 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3386 <span class=
"normal">2</span>
3387 <span class=
"normal">3</span>
3388 <span class=
"normal">4</span>
3389 <span class=
"normal">5</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><form action=
"</span><span class=
"cp">{
</span><span class=
"nf">link
</span> <span class=
"na">controller
</span><span class=
"o">=
</span><span class=
"s2">"Foo
"</span><span class=
"cp">}{
</span><span class=
"nf">/link
</span><span class=
"cp">}
</span><span class=
"x">" method=
"post
"></span>
3390 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* snip *
</span><span class=
"cp">}
</span>
3392 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">csrfToken
</span><span class=
"cp">}
</span>
3393 <span class=
"x"></form
></span>
3394 </code></pre></div></td></tr></table></div>
3395 <p>The
<code>{csrfToken}
</code> template plugin supports a
<code>type
</code> parameter.
3396 Specifying this parameter might be required in rare situations.
3397 Please
<a href=
"https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/template/plugin/CsrfTokenFunctionTemplatePlugin.class.php">check the implementation
</a> for details.
</p>
3398 <h2 id=
"currency"><code>|currency
</code><a class=
"headerlink" href=
"#currency" title=
"Permanent link">#
</a></h2>
3399 <p><code>currency
</code> is a modifier used to format currency values with two decimals using language dependent thousands separators and decimal point:
</p>
3400 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3401 <span class=
"normal">2</span>
3402 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">currencyValue
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"m">12.345</span><span class=
"cp">}
</span>
3404 <span class=
"cp">{
</span><span class=
"nv">$currencyValue
</span><span class=
"o">|
</span><span class=
"na">currency
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'12.34' *
</span><span class=
"cp">}
</span>
3405 </code></pre></div></td></tr></table></div>
3406 <h2 id=
"cycle"><code>{cycle}
</code><a class=
"headerlink" href=
"#cycle" title=
"Permanent link">#
</a></h2>
3407 <p><code>cycle
</code> can be used to cycle between different values:
</p>
3408 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3409 <span class=
"normal">2</span>
3410 <span class=
"normal">3</span>
3411 <span class=
"normal">4</span>
3412 <span class=
"normal">5</span>
3413 <span class=
"normal">6</span>
3414 <span class=
"normal">7</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">cycle
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">fooCycle
</span> <span class=
"na">values
</span><span class=
"o">=
</span><span class=
"s1">'bar,baz
'</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'bar
' *
</span><span class=
"cp">}
</span>
3416 <span class=
"cp">{
</span><span class=
"nf">cycle
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">fooCycle
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'baz
' *
</span><span class=
"cp">}
</span>
3418 <span class=
"cp">{
</span><span class=
"nf">cycle
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">fooCycle
</span> <span class=
"na">advance
</span><span class=
"o">=
</span><span class=
"kc">false
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'baz
' again *
</span><span class=
"cp">}
</span>
3420 <span class=
"cp">{
</span><span class=
"nf">cycle
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">fooCycle
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'bar
' *
</span><span class=
"cp">}
</span>
3421 </code></pre></div></td></tr></table></div>
3422 <div class=
"admonition info">
3423 <p class=
"admonition-title">The values attribute only has to be present for the first call. If
<code>cycle
</code> is used in a loop, the presence of the same values in consecutive calls has no effect. Only once the values change, the cycle is reset.
</p>
3429 <th>Description
</th>
3434 <td><code>advance
</code></td>
3435 <td>if
<code>true
</code>, the current cycle value is advanced to the next value;
<code>true
</code> by default
</td>
3438 <td><code>assign
</code></td>
3439 <td>optional name of the template variable the current cycle value is assigned to; if used,
<code>print
</code> is set to
<code>false
</code></td>
3442 <td><code>delimiter
</code></td>
3443 <td>delimiter between the different cycle values;
<code>,
</code> by default
</td>
3446 <td><code>name
</code></td>
3447 <td>name of the cycle, relevant if multiple cycles are used simultaneously
</td>
3450 <td><code>print
</code></td>
3451 <td>if
<code>true
</code>, the current cycle value is printed,
<code>false
</code> by default
</td>
3454 <td><code>reset
</code></td>
3455 <td>if
<code>true
</code>, the current cycle value is set to the first value,
<code>false
</code> by default
</td>
3458 <td><code>values
</code></td>
3459 <td>string containing the different cycles values, also see
<code>delimiter
</code></td>
3463 <h2 id=
"date"><code>|date
</code><a class=
"headerlink" href=
"#date" title=
"Permanent link">#
</a></h2>
3464 <p><code>date
</code> generated a formatted date using
<code>wcf\util\DateUtil::format()
</code> with
<code>DateUtil::DATE_FORMAT
</code> internally.
</p>
3465 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$timestamp
</span><span class=
"o">|
</span><span class=
"na">date
</span><span class=
"cp">}
</span>
3466 </code></pre></div></td></tr></table></div>
3467 <h2 id=
"dateinterval"><code>{dateInterval}
</code><a class=
"headerlink" href=
"#dateinterval" title=
"Permanent link">#
</a></h2>
3468 <p><code>dateInterval
</code> calculates the difference between two unix timestamps and generated a textual date interval.
</p>
3469 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">dateInterval
</span> <span class=
"na">start
</span><span class=
"o">=
</span><span class=
"nv">$startTimestamp
</span> <span class=
"na">end
</span><span class=
"o">=
</span><span class=
"nv">$endTimestamp
</span> <span class=
"na">full
</span><span class=
"o">=
</span><span class=
"kc">true
</span> <span class=
"na">format
</span><span class=
"o">=
</span><span class=
"s1">'sentence
'</span><span class=
"cp">}
</span>
3470 </code></pre></div></td></tr></table></div>
3475 <th>Description
</th>
3480 <td><code>end
</code></td>
3481 <td>end of the time interval; current timestamp by default (though either
<code>start
</code> or
<code>end
</code> has to be set)
</td>
3484 <td><code>format
</code></td>
3485 <td>output format, either
<code>default
</code>,
<code>sentence
</code>, or
<code>plain
</code>; defaults to
<code>default
</code>, see
<code>wcf\util\DateUtil::FORMAT_*
</code> constants
</td>
3488 <td><code>full
</code></td>
3489 <td>if
<code>true
</code>, full difference in minutes is shown; if
<code>false
</code>, only the longest time interval is shown;
<code>false
</code> by default
</td>
3492 <td><code>start
</code></td>
3493 <td>start of the time interval; current timestamp by default (though either
<code>start
</code> or
<code>end
</code> has to be set)
</td>
3497 <h2 id=
"encodejs"><code>|encodeJS
</code><a class=
"headerlink" href=
"#encodejs" title=
"Permanent link">#
</a></h2>
3498 <p><code>encodeJS
</code> encodes a string to be used as a single-quoted string in JavaScript by replacing
<code>\\
</code> with
<code>\\\\
</code>,
<code>'
</code> with
<code>\'
</code>, linebreaks with
<code>\n
</code>, and
<code>/
</code> with
<code>\/
</code>.
</p>
3499 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3500 <span class=
"normal">2</span>
3501 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><script
></span>
3502 <span class=
"x"> var foo =
'</span><span class=
"cp">{
</span><span class=
"o">@
</span><span class=
"nv">$foo
</span><span class=
"o">|
</span><span class=
"na">encodeJS
</span><span class=
"cp">}
</span><span class=
"x">';
</span>
3503 <span class=
"x"></script
></span>
3504 </code></pre></div></td></tr></table></div>
3505 <h2 id=
"escapecdata"><code>|escapeCDATA
</code><a class=
"headerlink" href=
"#escapecdata" title=
"Permanent link">#
</a></h2>
3506 <p><code>escapeCDATA
</code> encodes a string to be used in a
<code>CDATA
</code> element by replacing
<code>]]
></code> with
<code>]]]]
><![CDATA[
></code>.
</p>
3507 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><![CDATA[
</span><span class=
"cp">{
</span><span class=
"o">@
</span><span class=
"nv">$foo
</span><span class=
"o">|
</span><span class=
"na">encodeCDATA
</span><span class=
"cp">}
</span><span class=
"x">]]
></span>
3508 </code></pre></div></td></tr></table></div>
3509 <h2 id=
"event"><code>{event}
</code><a class=
"headerlink" href=
"#event" title=
"Permanent link">#
</a></h2>
3510 <p><code>event
</code> provides extension points in templates that
<a href=
"../../package/pip/template-listener/">template listeners
</a> can use.
</p>
3511 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">event
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"s1">'foo
'</span><span class=
"cp">}
</span>
3512 </code></pre></div></td></tr></table></div>
3513 <h2 id=
"filesizebinary"><code>|filesizeBinary
</code><a class=
"headerlink" href=
"#filesizebinary" title=
"Permanent link">#
</a></h2>
3514 <p><code>filesizeBinary
</code> formats the filesize using binary filesize (in bytes).
</p>
3515 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$filesize
</span><span class=
"o">|
</span><span class=
"na">filesizeBinary
</span><span class=
"cp">}
</span>
3516 </code></pre></div></td></tr></table></div>
3517 <h2 id=
"filesize"><code>|filesize
</code><a class=
"headerlink" href=
"#filesize" title=
"Permanent link">#
</a></h2>
3518 <p><code>filesize
</code> formats the filesize using filesize (in bytes).
</p>
3519 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$filesize
</span><span class=
"o">|
</span><span class=
"na">filesize
</span><span class=
"cp">}
</span>
3520 </code></pre></div></td></tr></table></div>
3521 <h2 id=
"hascontent"><code>{hascontent}
</code><a class=
"headerlink" href=
"#hascontent" title=
"Permanent link">#
</a></h2>
3522 <p>In many cases, conditional statements can be used to determine if a certain section of a template is shown:
</p>
3523 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3524 <span class=
"normal">2</span>
3525 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">if
</span> <span class=
"nv">$foo
</span> <span class=
"o">===
</span> <span class=
"s1">'bar
'</span><span class=
"cp">}
</span>
3526 <span class=
"x"> only shown if $foo is bar
</span>
3527 <span class=
"cp">{
</span><span class=
"nf">/if
</span><span class=
"cp">}
</span>
3528 </code></pre></div></td></tr></table></div>
3529 <p>In some situations, however, such conditional statements are not sufficient.
3530 One prominent example is a template event:
</p>
3531 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3532 <span class=
"normal">2</span>
3533 <span class=
"normal">3</span>
3534 <span class=
"normal">4</span>
3535 <span class=
"normal">5</span>
3536 <span class=
"normal">6</span>
3537 <span class=
"normal">7</span>
3538 <span class=
"normal">8</span>
3539 <span class=
"normal">9</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">if
</span> <span class=
"nv">$foo
</span> <span class=
"o">===
</span> <span class=
"s1">'bar
'</span><span class=
"cp">}
</span>
3540 <span class=
"x"> <ul
></span>
3541 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">if
</span> <span class=
"nv">$foo
</span> <span class=
"o">===
</span> <span class=
"s1">'bar
'</span><span class=
"cp">}
</span>
3542 <span class=
"x"> <li
>Bar
</li
></span>
3543 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">/if
</span><span class=
"cp">}
</span>
3545 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">event
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"s1">'listItems
'</span><span class=
"cp">}
</span>
3546 <span class=
"x"> </li
></span>
3547 <span class=
"cp">{
</span><span class=
"nf">/if
</span><span class=
"cp">}
</span>
3548 </code></pre></div></td></tr></table></div>
3549 <p>In this example, if
<code>$foo !== 'bar'
</code>, the list will not be shown, regardless of the additional template code provided by template listeners.
3550 In such a situation,
<code>hascontent
</code> has to be used:
</p>
3551 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal"> 1</span>
3552 <span class=
"normal"> 2</span>
3553 <span class=
"normal"> 3</span>
3554 <span class=
"normal"> 4</span>
3555 <span class=
"normal"> 5</span>
3556 <span class=
"normal"> 6</span>
3557 <span class=
"normal"> 7</span>
3558 <span class=
"normal"> 8</span>
3559 <span class=
"normal"> 9</span>
3560 <span class=
"normal">10</span>
3561 <span class=
"normal">11</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">hascontent
</span><span class=
"cp">}
</span>
3562 <span class=
"x"> <ul
></span>
3563 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">content
</span><span class=
"cp">}
</span>
3564 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">if
</span> <span class=
"nv">$foo
</span> <span class=
"o">===
</span> <span class=
"s1">'bar
'</span><span class=
"cp">}
</span>
3565 <span class=
"x"> <li
>Bar
</li
></span>
3566 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">/if
</span><span class=
"cp">}
</span>
3568 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">event
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"s1">'listItems
'</span><span class=
"cp">}
</span>
3569 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">/content
</span><span class=
"cp">}
</span>
3570 <span class=
"x"> </ul
></span>
3571 <span class=
"cp">{
</span><span class=
"nf">/hascontent
</span><span class=
"cp">}
</span>
3572 </code></pre></div></td></tr></table></div>
3573 <p>If the part of the template wrapped in the
<code>content
</code> tags has any (trimmed) content, the part of the template wrapped by
<code>hascontent
</code> tags is shown (including the part wrapped by the
<code>content
</code> tags), otherwise nothing is shown.
3574 Thus, this construct avoids an empty list compared to the
<code>if
</code> solution above.
</p>
3575 <p>Like
<code>foreach
</code>,
<code>hascontent
</code> also supports an
<code>else
</code> part:
</p>
3576 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3577 <span class=
"normal">2</span>
3578 <span class=
"normal">3</span>
3579 <span class=
"normal">4</span>
3580 <span class=
"normal">5</span>
3581 <span class=
"normal">6</span>
3582 <span class=
"normal">7</span>
3583 <span class=
"normal">8</span>
3584 <span class=
"normal">9</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">hascontent
</span><span class=
"cp">}
</span>
3585 <span class=
"x"> <ul
></span>
3586 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">content
</span><span class=
"cp">}
</span>
3587 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* … *
</span><span class=
"cp">}
</span>
3588 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">/content
</span><span class=
"cp">}
</span>
3589 <span class=
"x"> </ul
></span>
3590 <span class=
"cp">{
</span><span class=
"nf">hascontentelse
</span><span class=
"cp">}
</span>
3591 <span class=
"x"> no list
</span>
3592 <span class=
"cp">{
</span><span class=
"nf">/hascontent
</span><span class=
"cp">}
</span>
3593 </code></pre></div></td></tr></table></div>
3594 <h2 id=
"htmlcheckboxes"><code>{htmlCheckboxes}
</code><a class=
"headerlink" href=
"#htmlcheckboxes" title=
"Permanent link">#
</a></h2>
3595 <p><code>htmlCheckboxes
</code> generates a list of HTML checkboxes.
</p>
3596 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3597 <span class=
"normal">2</span>
3598 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">htmlCheckboxes
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">foo
</span> <span class=
"na">options
</span><span class=
"o">=
</span><span class=
"nv">$fooOptions
</span> <span class=
"na">selected
</span><span class=
"o">=
</span><span class=
"nv">$currentFoo
</span><span class=
"cp">}
</span>
3600 <span class=
"cp">{
</span><span class=
"nf">htmlCheckboxes
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"na">bar
</span> <span class=
"na">output
</span><span class=
"o">=
</span><span class=
"nv">$barLabels
</span> <span class=
"na">values
</span><span class=
"o">=
</span><span class=
"nv">$barValues
</span> <span class=
"na">selected
</span><span class=
"o">=
</span><span class=
"nv">$currentBar
</span><span class=
"cp">}
</span>
3601 </code></pre></div></td></tr></table></div>
3606 <th>Description
</th>
3611 <td><code>disabled
</code></td>
3612 <td>if
<code>true
</code>, all checkboxes are disabled
</td>
3615 <td><code>disableEncoding
</code></td>
3616 <td>if
<code>true
</code>, the values are not passed through
<code>wcf\util\StringUtil::encodeHTML()
</code>;
<code>false
</code> by default
</td>
3619 <td><code>name
</code></td>
3620 <td><code>name
</code> attribute of the
<code>input
</code> checkbox element
</td>
3623 <td><code>output
</code></td>
3624 <td>array used as keys and values for
<code>options
</code> if present; not present by default
</td>
3627 <td><code>options
</code></td>
3628 <td>array selectable options with the key used as
<code>value
</code> attribute and the value as the checkbox label
</td>
3631 <td><code>selected
</code></td>
3632 <td>current selected value(s)
</td>
3635 <td><code>separator
</code></td>
3636 <td>separator between the different checkboxes in the generated output; empty string by default
</td>
3639 <td><code>values
</code></td>
3640 <td>array with values used in combination with
<code>output
</code>, where
<code>output
</code> is only used as keys for
<code>options
</code></td>
3644 <h2 id=
"htmloptions"><code>{htmlOptions}
</code><a class=
"headerlink" href=
"#htmloptions" title=
"Permanent link">#
</a></h2>
3645 <p><code>htmlOptions
</code> generates an
<code>select
</code> HTML element.
</p>
3646 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3647 <span class=
"normal">2</span>
3648 <span class=
"normal">3</span>
3649 <span class=
"normal">4</span>
3650 <span class=
"normal">5</span>
3651 <span class=
"normal">6</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">htmlOptions
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"s1">'foo
'</span> <span class=
"na">options
</span><span class=
"o">=
</span><span class=
"nv">$options
</span> <span class=
"na">selected
</span><span class=
"o">=
</span><span class=
"nv">$selected
</span><span class=
"cp">}
</span>
3653 <span class=
"x"><select name=
"bar
"></span>
3654 <span class=
"x"> <option value=
""</span><span class=
"cp">{
</span><span class=
"nf">if
</span> <span class=
"o">!
</span><span class=
"nv">$selected
</span><span class=
"cp">}
</span><span class=
"x"> selected
</span><span class=
"cp">{
</span><span class=
"nf">/if
</span><span class=
"cp">}
</span><span class=
"x">></span><span class=
"cp">{
</span><span class=
"nf">lang
</span><span class=
"cp">}
</span><span class=
"x">foo.bar.default
</span><span class=
"cp">{
</span><span class=
"nf">/lang
</span><span class=
"cp">}
</span><span class=
"x"></option
></span>
3655 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"nf">htmlOptions
</span> <span class=
"na">options
</span><span class=
"o">=
</span><span class=
"nv">$options
</span> <span class=
"na">selected
</span><span class=
"o">=
</span><span class=
"nv">$selected
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* no `name` attribute *
</span><span class=
"cp">}
</span>
3656 <span class=
"x"></select
></span>
3657 </code></pre></div></td></tr></table></div>
3662 <th>Description
</th>
3667 <td><code>disableEncoding
</code></td>
3668 <td>if
<code>true
</code>, the values are not passed through
<code>wcf\util\StringUtil::encodeHTML()
</code>;
<code>false
</code> by default
</td>
3671 <td><code>object
</code></td>
3672 <td>optional instance of
<code>wcf\data\DatabaseObjectList
</code> that provides the selectable options (overwrites
<code>options
</code> attribute internally)
</td>
3675 <td><code>name
</code></td>
3676 <td><code>name
</code> attribute of the
<code>select
</code> element; if not present, only the
<strong>contents
</strong> of the
<code>select
</code> element are printed
</td>
3679 <td><code>output
</code></td>
3680 <td>array used as keys and values for
<code>options
</code> if present; not present by default
</td>
3683 <td><code>values
</code></td>
3684 <td>array with values used in combination with
<code>output
</code>, where
<code>output
</code> is only used as keys for
<code>options
</code></td>
3687 <td><code>options
</code></td>
3688 <td>array selectable options with the key used as
<code>value
</code> attribute and the value as the option label; if a value is an array, an
<code>optgroup
</code> is generated with the array key as the
<code>optgroup
</code> label
</td>
3691 <td><code>selected
</code></td>
3692 <td>current selected value(s)
</td>
3696 <p>All additional attributes are added as attributes of the
<code>select
</code> HTML element.
</p>
3697 <h2 id=
"implode"><code>{implode}
</code><a class=
"headerlink" href=
"#implode" title=
"Permanent link">#
</a></h2>
3698 <p><code>implodes
</code> transforms an array into a string and prints it.
</p>
3699 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">implode
</span> <span class=
"na">from
</span><span class=
"o">=
</span><span class=
"nv">$array
</span> <span class=
"na">key
</span><span class=
"o">=
</span><span class=
"na">key
</span> <span class=
"na">item
</span><span class=
"o">=
</span><span class=
"na">item
</span> <span class=
"na">glue
</span><span class=
"o">=
</span><span class=
"s2">";
"</span><span class=
"cp">}{
</span><span class=
"nv">$key
</span><span class=
"cp">}
</span><span class=
"x">:
</span><span class=
"cp">{
</span><span class=
"nv">$value
</span><span class=
"cp">}{
</span><span class=
"nf">/implode
</span><span class=
"cp">}
</span>
3700 </code></pre></div></td></tr></table></div>
3705 <th>Description
</th>
3710 <td><code>from
</code></td>
3711 <td>array with the imploded values
</td>
3714 <td><code>glue
</code></td>
3715 <td>separator between the different array values;
<code>', '
</code> by default
</td>
3718 <td><code>item
</code></td>
3719 <td>template variable name where the current array value is stored during the iteration
</td>
3722 <td><code>key
</code></td>
3723 <td>optional template variable name where the current array key is stored during the iteration
</td>
3727 <h2 id=
"ipsearch"><code>|ipSearch
</code><a class=
"headerlink" href=
"#ipsearch" title=
"Permanent link">#
</a></h2>
3728 <p><code>ipSearch
</code> generates a link to search for an IP address.
</p>
3729 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"s2">"127.0.0.1"</span><span class=
"o">|
</span><span class=
"na">ipSearch
</span><span class=
"cp">}
</span>
3730 </code></pre></div></td></tr></table></div>
3731 <h2 id=
"js"><code>{js}
</code><a class=
"headerlink" href=
"#js" title=
"Permanent link">#
</a></h2>
3732 <p><code>js
</code> generates script tags based on whether
<code>ENABLE_DEBUG_MODE
</code> and
<code>VISITOR_USE_TINY_BUILD
</code> are enabled.
</p>
3733 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal"> 1</span>
3734 <span class=
"normal"> 2</span>
3735 <span class=
"normal"> 3</span>
3736 <span class=
"normal"> 4</span>
3737 <span class=
"normal"> 5</span>
3738 <span class=
"normal"> 6</span>
3739 <span class=
"normal"> 7</span>
3740 <span class=
"normal"> 8</span>
3741 <span class=
"normal"> 9</span>
3742 <span class=
"normal">10</span>
3743 <span class=
"normal">11</span>
3744 <span class=
"normal">12</span>
3745 <span class=
"normal">13</span>
3746 <span class=
"normal">14</span>
3747 <span class=
"normal">15</span>
3748 <span class=
"normal">16</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">js
</span> <span class=
"na">application
</span><span class=
"o">=
</span><span class=
"s1">'wbb
'</span> <span class=
"na">file
</span><span class=
"o">=
</span><span class=
"s1">'WBB
'</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* generates
'http://example.com/js/WBB.js
' *
</span><span class=
"cp">}
</span>
3750 <span class=
"cp">{
</span><span class=
"nf">js
</span> <span class=
"na">application
</span><span class=
"o">=
</span><span class=
"s1">'wcf
'</span> <span class=
"na">file
</span><span class=
"o">=
</span><span class=
"s1">'WCF.User
'</span> <span class=
"na">bundle
</span><span class=
"o">=
</span><span class=
"s1">'WCF.Combined
'</span><span class=
"cp">}
</span>
3751 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* generates
'http://example.com/wcf/js/WCF.User.js
' if ENABLE_DEBUG_MODE=
1 *
</span><span class=
"cp">}
</span>
3752 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* generates
'http://example.com/wcf/js/WCF.Combined.min.js
' if ENABLE_DEBUG_MODE=
0 *
</span><span class=
"cp">}
</span>
3754 <span class=
"cp">{
</span><span class=
"nf">js
</span> <span class=
"na">application
</span><span class=
"o">=
</span><span class=
"s1">'wcf
'</span> <span class=
"na">lib
</span><span class=
"o">=
</span><span class=
"s1">'jquery
'</span><span class=
"cp">}
</span>
3755 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* generates
'http://example.com/wcf/js/
3rdParty/jquery.js
' *
</span><span class=
"cp">}
</span>
3757 <span class=
"cp">{
</span><span class=
"nf">js
</span> <span class=
"na">application
</span><span class=
"o">=
</span><span class=
"s1">'wcf
'</span> <span class=
"na">lib
</span><span class=
"o">=
</span><span class=
"s1">'jquery-ui
'</span> <span class=
"na">file
</span><span class=
"o">=
</span><span class=
"s1">'awesomeWidget
'</span><span class=
"cp">}
</span>
3758 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* generates
'http://example.com/wcf/js/
3rdParty/jquery-ui/awesomeWidget.js
' *
</span><span class=
"cp">}
</span>
3760 <span class=
"cp">{
</span><span class=
"nf">js
</span> <span class=
"na">application
</span><span class=
"o">=
</span><span class=
"s1">'wcf
'</span> <span class=
"na">file
</span><span class=
"o">=
</span><span class=
"s1">'WCF.User
'</span> <span class=
"na">bundle
</span><span class=
"o">=
</span><span class=
"s1">'WCF.Combined
'</span> <span class=
"na">hasTiny
</span><span class=
"o">=
</span><span class=
"kc">true
</span><span class=
"cp">}
</span>
3761 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* generates
'http://example.com/wcf/js/WCF.User.js
' if ENABLE_DEBUG_MODE=
1 *
</span><span class=
"cp">}
</span>
3762 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* generates
'http://example.com/wcf/js/WCF.Combined.min.js
' (ENABLE_DEBUG_MODE=
0 *
</span><span class=
"cp">}
</span>
3763 <span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* generates
'http://example.com/wcf/js/WCF.Combined.tiny.min.js
' if ENABLE_DEBUG_MODE=
0 and VISITOR_USE_TINY_BUILD=
1 *
</span><span class=
"cp">}
</span>
3764 </code></pre></div></td></tr></table></div>
3765 <h2 id=
"jslang"><code>{jslang}
</code><a class=
"headerlink" href=
"#jslang" title=
"Permanent link">#
</a></h2>
3766 <p><code>jslang
</code> works like
<a href=
"#lang"><code>lang
</code></a> with the difference that the resulting string is automatically passed through
<a href=
"#encodejs"><code>encodeJS
</code></a>.
</p>
3767 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3768 <span class=
"normal">2</span>
3769 <span class=
"normal">3</span>
3770 <span class=
"normal">4</span>
3771 <span class=
"normal">5</span>
3772 <span class=
"normal">6</span>
3773 <span class=
"normal">7</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x">require([
'Language
', /* … */], function(Language, /* … */)
</span><span class=
"cp">{
</span>
3774 <span class=
"na">Language
</span><span class=
"o">.
</span><span class=
"na">addObject
</span><span class=
"o">(
</span><span class=
"cp">{
</span>
3775 <span class=
"s1">'app.foo.bar
'</span><span class=
"o">:
</span> <span class=
"s1">'{jslang}app.foo.bar{/jslang}
'</span><span class=
"o">,
</span>
3776 <span class=
"cp">}
</span><span class=
"o">);
</span>
3778 <span class=
"o">//
</span> <span class=
"err">…
</span>
3779 <span class=
"cp">}
</span><span class=
"x">);
</span>
3780 </code></pre></div></td></tr></table></div>
3781 <h2 id=
"55-json"><span class=
"label label-info">5.5+
</span> <code>|json
</code><a class=
"headerlink" href=
"#55-json" title=
"Permanent link">#
</a></h2>
3782 <p><code>json
</code> JSON-encodes the given value.
</p>
3783 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3784 <span class=
"normal">2</span>
3785 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><script
></span>
3786 <span class=
"x">let data =
</span><span class=
"cp">{
</span> <span class=
"s2">"title
"</span><span class=
"o">:
</span> <span class=
"cp">{
</span><span class=
"o">@
</span><span class=
"nv">$foo
</span><span class=
"o">-
></span><span class=
"na">getTitle
</span><span class=
"o">()|
</span><span class=
"na">json
</span><span class=
"cp">}
</span> <span class=
"cp">}
</span><span class=
"x">;
</span>
3787 <span class=
"x"></script
></span>
3788 </code></pre></div></td></tr></table></div>
3789 <h2 id=
"60-jsphrase"><span class=
"label label-info">6.0+
</span> <code>{jsphrase}
</code><a class=
"headerlink" href=
"#60-jsphrase" title=
"Permanent link">#
</a></h2>
3790 <p><code>jsphrase
</code> generates the necessary JavaScript code to register a phrase in the JavaScript language store.
3791 This plugin only supports static phrase names.
3792 If a dynamic phrase should be registered, the
<a href=
"#jslang"><code>jslang
</code></a> plugin needs to be used.
</p>
3793 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3794 <span class=
"normal">2</span>
3795 <span class=
"normal">3</span>
3796 <span class=
"normal">4</span>
3797 <span class=
"normal">5</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><script data-relocate=
"true
"></span>
3798 <span class=
"cp">{
</span><span class=
"nf">jsphrase
</span> <span class=
"na">name
</span><span class=
"o">=
</span><span class=
"s1">'app.foo.bar
'</span><span class=
"cp">}
</span>
3800 <span class=
"x">// …
</span>
3801 <span class=
"x"></script
></span>
3802 </code></pre></div></td></tr></table></div>
3803 <h2 id=
"lang"><code>{lang}
</code><a class=
"headerlink" href=
"#lang" title=
"Permanent link">#
</a></h2>
3804 <p><code>lang
</code> replaces a language items with its value.
</p>
3805 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3806 <span class=
"normal">2</span>
3807 <span class=
"normal">3</span>
3808 <span class=
"normal">4</span>
3809 <span class=
"normal">5</span>
3810 <span class=
"normal">6</span>
3811 <span class=
"normal">7</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">lang
</span><span class=
"cp">}
</span><span class=
"x">foo.bar.baz
</span><span class=
"cp">{
</span><span class=
"nf">/lang
</span><span class=
"cp">}
</span>
3813 <span class=
"cp">{
</span><span class=
"nf">lang
</span> <span class=
"na">__literal
</span><span class=
"o">=
</span><span class=
"kc">true
</span><span class=
"cp">}
</span><span class=
"x">foo.bar.baz
</span><span class=
"cp">{
</span><span class=
"nf">/lang
</span><span class=
"cp">}
</span>
3815 <span class=
"cp">{
</span><span class=
"nf">lang
</span> <span class=
"na">foo
</span><span class=
"o">=
</span><span class=
"s1">'baz
'</span><span class=
"cp">}
</span><span class=
"x">foo.bar.baz
</span><span class=
"cp">{
</span><span class=
"nf">/lang
</span><span class=
"cp">}
</span>
3817 <span class=
"cp">{
</span><span class=
"nf">lang
</span><span class=
"cp">}
</span><span class=
"x">foo.bar.baz.
</span><span class=
"cp">{
</span><span class=
"nv">$action
</span><span class=
"cp">}{
</span><span class=
"nf">/lang
</span><span class=
"cp">}
</span>
3818 </code></pre></div></td></tr></table></div>
3823 <th>Description
</th>
3828 <td><code>__encode
</code></td>
3829 <td>if
<code>true
</code>, the output will be passed through
<code>StringUtil::encodeHTML()
</code></td>
3832 <td><code>__literal
</code></td>
3833 <td>if
<code>true
</code>, template variables will not resolved but printed as they are in the language item;
<code>false
</code> by default
</td>
3836 <td><code>__optional
</code></td>
3837 <td>if
<code>true
</code> and the language item does not exist, an empty string is printed;
<code>false
</code> by default
</td>
3841 <p>All additional attributes are available when parsing the language item.
</p>
3842 <h2 id=
"language"><code>|language
</code><a class=
"headerlink" href=
"#language" title=
"Permanent link">#
</a></h2>
3843 <p><code>language
</code> replaces a language items with its value.
3844 If the template variable
<code>__language
</code> exists, this language object will be used instead of
<code>WCF::getLanguage()
</code>.
3845 This modifier is useful when assigning the value directly to a variable.
</p>
3846 <p>Note that template scripting is applied to the output of the variable, which can lead to unwanted side effects. Use
<code>phrase
</code> instead if you don't want to use template scripting.
</p>
3847 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3848 <span class=
"normal">2</span>
3849 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$languageItem
</span><span class=
"o">|
</span><span class=
"na">language
</span><span class=
"cp">}
</span>
3851 <span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">foo
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$languageItem
</span><span class=
"o">|
</span><span class=
"na">language
</span><span class=
"cp">}
</span>
3852 </code></pre></div></td></tr></table></div>
3853 <h2 id=
"link"><code>{link}
</code><a class=
"headerlink" href=
"#link" title=
"Permanent link">#
</a></h2>
3854 <p><code>link
</code> generates internal links using
<code>LinkHandler
</code>.
</p>
3855 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><a href=
"</span><span class=
"cp">{
</span><span class=
"nf">link
</span> <span class=
"na">controller
</span><span class=
"o">=
</span><span class=
"s1">'FooList
'</span> <span class=
"na">application
</span><span class=
"o">=
</span><span class=
"s1">'bar
'</span><span class=
"cp">}
</span><span class=
"x">param1=
2&param2=A
</span><span class=
"cp">{
</span><span class=
"nf">/link
</span><span class=
"cp">}
</span><span class=
"x">">Foo
</a
></span>
3856 </code></pre></div></td></tr></table></div>
3861 <th>Description
</th>
3866 <td><code>application
</code></td>
3867 <td>abbreviation of the application the controller belongs to;
<code>wcf
</code> by default
</td>
3870 <td><code>controller
</code></td>
3871 <td>name of the controller; if not present, the landing page is linked in the frontend and the index page in the ACP
</td>
3874 <td><code>encode
</code></td>
3875 <td>if
<code>true
</code>, the generated link is passed through
<code>wcf\util\StringUtil::encodeHTML()
</code>;
<code>true
</code> by default
</td>
3878 <td><code>isEmail
</code></td>
3879 <td>sets
<code>encode=false
</code> and forces links to link to the frontend
</td>
3883 <p>Additional attributes are passed to
<code>LinkHandler::getLink()
</code>.
</p>
3884 <h2 id=
"newlinetobreak"><code>|newlineToBreak
</code><a class=
"headerlink" href=
"#newlinetobreak" title=
"Permanent link">#
</a></h2>
3885 <p><code>newlineToBreak
</code> transforms newlines into HTML
<code><br
></code> elements after encoding the content via
<code>wcf\util\StringUtil::encodeHTML()
</code>.
</p>
3886 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$foo
</span><span class=
"o">|
</span><span class=
"na">newlineToBreak
</span><span class=
"cp">}
</span>
3887 </code></pre></div></td></tr></table></div>
3888 <h2 id=
"54-objectaction"><span class=
"label label-info">5.4+
</span> <code>objectAction
</code><a class=
"headerlink" href=
"#54-objectaction" title=
"Permanent link">#
</a></h2>
3889 <p><code>objectAction
</code> generates action buttons to be used in combination with the
<a href=
"../../migration/wsc53/javascript/#wcfactiondelete-and-wcfactiontoggle"><code>WoltLabSuite/Core/Ui/Object/Action
</code> API
</a>.
3890 For detailed information on its usage, we refer to the extensive documentation in the
<a href=
"https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/template/plugin/ObjectActionFunctionTemplatePlugin.class.php"><code>ObjectActionFunctionTemplatePlugin
</code> class
</a> itself.
</p>
3891 <h2 id=
"page"><code>{page}
</code><a class=
"headerlink" href=
"#page" title=
"Permanent link">#
</a></h2>
3892 <p><code>page
</code> generates an internal link to a CMS page.
</p>
3893 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3894 <span class=
"normal">2</span>
3895 <span class=
"normal">3</span>
3896 <span class=
"normal">4</span>
3897 <span class=
"normal">5</span>
3898 <span class=
"normal">6</span>
3899 <span class=
"normal">7</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">page
</span><span class=
"cp">}
</span><span class=
"x">com.woltlab.wcf.CookiePolicy
</span><span class=
"cp">{
</span><span class=
"nf">/page
</span><span class=
"cp">}
</span>
3901 <span class=
"cp">{
</span><span class=
"nf">page
</span> <span class=
"na">pageID
</span><span class=
"o">=
</span><span class=
"m">1</span><span class=
"cp">}{
</span><span class=
"nf">/page
</span><span class=
"cp">}
</span>
3903 <span class=
"cp">{
</span><span class=
"nf">page
</span> <span class=
"na">language
</span><span class=
"o">=
</span><span class=
"s1">'de
'</span><span class=
"cp">}
</span><span class=
"x">com.woltlab.wcf.CookiePolicy
</span><span class=
"cp">{
</span><span class=
"nf">/page
</span><span class=
"cp">}
</span>
3905 <span class=
"cp">{
</span><span class=
"nf">page
</span> <span class=
"na">languageID
</span><span class=
"o">=
</span><span class=
"m">2</span><span class=
"cp">}
</span><span class=
"x">com.woltlab.wcf.CookiePolicy
</span><span class=
"cp">{
</span><span class=
"nf">/page
</span><span class=
"cp">}
</span>
3906 </code></pre></div></td></tr></table></div>
3911 <th>Description
</th>
3916 <td><code>pageID
</code></td>
3917 <td>unique id of the page (cannot be used together with a page identifier as value)
</td>
3920 <td><code>languageID
</code></td>
3921 <td>id of the page language (cannot be used together with
<code>language
</code>)
</td>
3924 <td><code>language
</code></td>
3925 <td>language code of the page language (cannot be used together with
<code>languageID
</code>)
</td>
3929 <h2 id=
"pages"><code>{pages}
</code><a class=
"headerlink" href=
"#pages" title=
"Permanent link">#
</a></h2>
3930 <div class=
"admonition info">
3931 <p class=
"admonition-title">This template plugin has been deprecated in WoltLab Suite
6.0.
</p>
3933 <p><code>pages
</code> generates a pagination.
</p>
3934 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3935 <span class=
"normal">2</span>
3936 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">pages
</span> <span class=
"na">controller
</span><span class=
"o">=
</span><span class=
"s1">'FooList
'</span> <span class=
"na">link
</span><span class=
"o">=
</span><span class=
"s2">"pageNo=%d
"</span> <span class=
"na">print
</span><span class=
"o">=
</span><span class=
"kc">true
</span> <span class=
"na">assign
</span><span class=
"o">=
</span><span class=
"na">pagesLinks
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints pagination *
</span><span class=
"cp">}
</span>
3938 <span class=
"cp">{
</span><span class=
"o">@
</span><span class=
"nv">$pagesLinks
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints same pagination again *
</span><span class=
"cp">}
</span>
3939 </code></pre></div></td></tr></table></div>
3944 <th>Description
</th>
3949 <td><code>assign
</code></td>
3950 <td>optional name of the template variable the pagination is assigned to
</td>
3953 <td><code>controller
</code></td>
3954 <td>controller name of the generated links
</td>
3957 <td><code>link
</code></td>
3958 <td>additional link parameter where
<code>%d
</code> will be replaced with the relevant page number
</td>
3961 <td><code>pages
</code></td>
3962 <td>maximum number of of pages; by default, the template variable
<code>$pages
</code> is used
</td>
3965 <td><code>print
</code></td>
3966 <td>if
<code>false
</code> and
<code>assign=true
</code>, the pagination is not printed
</td>
3969 <td><code>application
</code>,
<code>id
</code>,
<code>object
</code>,
<code>title
</code></td>
3970 <td>additional parameters passed to
<code>LinkHandler::getLink()
</code> to generate page links
</td>
3974 <h2 id=
"55-phrase"><span class=
"label label-info">5.5+
</span> <code>|phrase
</code><a class=
"headerlink" href=
"#55-phrase" title=
"Permanent link">#
</a></h2>
3975 <p><code>phrase
</code> replaces a language items with its value.
3976 If the template variable
<code>__language
</code> exists, this language object will be used instead of
<code>WCF::getLanguage()
</code>.
3977 This modifier is useful when assigning the value directly to a variable.
</p>
3978 <p><code>phrase
</code> should be used instead of
<code>language
</code> unless you want to explicitly allow template scripting on a variable's output.
</p>
3979 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3980 <span class=
"normal">2</span>
3981 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$languageItem
</span><span class=
"o">|
</span><span class=
"na">phrase
</span><span class=
"cp">}
</span>
3983 <span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">foo
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$languageItem
</span><span class=
"o">|
</span><span class=
"na">phrase
</span><span class=
"cp">}
</span>
3984 </code></pre></div></td></tr></table></div>
3985 <h2 id=
"plaintime"><code>|plainTime
</code><a class=
"headerlink" href=
"#plaintime" title=
"Permanent link">#
</a></h2>
3986 <p><code>plainTime
</code> formats a timestamp to include year, month, day, hour, and minutes.
3987 The exact formatting depends on the current language (via the language items
<code>wcf.date.dateTimeFormat
</code>,
<code>wcf.date.dateFormat
</code>, and
<code>wcf.date.timeFormat
</code>).
</p>
3988 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$timestamp
</span><span class=
"o">|
</span><span class=
"na">plainTime
</span><span class=
"cp">}
</span>
3989 </code></pre></div></td></tr></table></div>
3990 <h2 id=
"plural"><code>{plural}
</code><a class=
"headerlink" href=
"#plural" title=
"Permanent link">#
</a></h2>
3991 <p><code>plural
</code> allows to easily select the correct plural form of a phrase based on a given
<code>value
</code>.
3992 The pluralization logic follows the
<a href=
"https://unicode-org.github.io/cldr-staging/charts/37/supplemental/language_plural_rules.md">Unicode Language Plural Rules
</a> for cardinal numbers.
</p>
3993 <p>The
<code>#
</code> placeholder within the resulting phrase is replaced by the
<code>value
</code>.
3994 It is automatically formatted using
<code>StringUtil::formatNumeric
</code>.
</p>
3996 <p>Note the use of
<code>1</code> if the number (
<code>#
</code>) is not used within the phrase and the use of
<code>one
</code> otherwise.
3997 They are equivalent for English, but following this rule generalizes better to other languages, helping the translator.
3998 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
3999 <span class=
"normal">2</span>
4000 <span class=
"normal">3</span>
4001 <span class=
"normal">4</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">numberOfWorlds
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"m">2</span><span class=
"cp">}
</span>
4002 <span class=
"x"><h1
>Hello
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"m">1</span><span class=
"o">=
</span><span class=
"s1">'World
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'Worlds
'</span><span class=
"cp">}
</span><span class=
"x">!
</h1
></span>
4003 <span class=
"x"><p
>There
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"m">1</span><span class=
"o">=
</span><span class=
"s1">'is one world
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'are # worlds
'</span><span class=
"cp">}
</span><span class=
"x">!
</p
></span>
4004 <span class=
"x"><p
>There
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"na">one
</span><span class=
"o">=
</span><span class=
"s1">'is # world
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'are # worlds
'</span><span class=
"cp">}
</span><span class=
"x">!
</p
></span>
4005 </code></pre></div></td></tr></table></div></p>
4007 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
4008 <span class=
"normal">2</span>
4009 <span class=
"normal">3</span>
4010 <span class=
"normal">4</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">numberOfWorlds
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"m">2</span><span class=
"cp">}
</span>
4011 <span class=
"x"><h1
>Hallo
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"m">1</span><span class=
"o">=
</span><span class=
"s1">'Welt
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'Welten
'</span><span class=
"cp">}
</span><span class=
"x">!
</h1
></span>
4012 <span class=
"x"><p
>Es gibt
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"m">1</span><span class=
"o">=
</span><span class=
"s1">'eine Welt
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'# Welten
'</span><span class=
"cp">}
</span><span class=
"x">!
</p
></span>
4013 <span class=
"x"><p
>Es gibt
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"na">one
</span><span class=
"o">=
</span><span class=
"s1">'# Welt
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'# Welten
'</span><span class=
"cp">}
</span><span class=
"x">!
</p
></span>
4014 </code></pre></div></td></tr></table></div></p>
4016 <p>Note the additional use of
<code>few
</code> which is not required in English or German.
4017 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
4018 <span class=
"normal">2</span>
4019 <span class=
"normal">3</span>
4020 <span class=
"normal">4</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">numberOfWorlds
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"m">2</span><span class=
"cp">}
</span>
4021 <span class=
"x"><h1
>Salut
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"m">1</span><span class=
"o">=
</span><span class=
"s1">'lume
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'lumi
'</span><span class=
"cp">}
</span><span class=
"x">!
</h1
></span>
4022 <span class=
"x"><p
>Există
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"m">1</span><span class=
"o">=
</span><span class=
"s1">'o lume
'</span> <span class=
"na">few
</span><span class=
"o">=
</span><span class=
"s1">'# lumi
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'# de lumi
'</span><span class=
"cp">}
</span><span class=
"x">!
</p
></span>
4023 <span class=
"x"><p
>Există
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"na">one
</span><span class=
"o">=
</span><span class=
"s1">'# lume
'</span> <span class=
"na">few
</span><span class=
"o">=
</span><span class=
"s1">'# lumi
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'# de lumi
'</span><span class=
"cp">}
</span><span class=
"x">!
</p
></span>
4024 </code></pre></div></td></tr></table></div></p>
4026 <p>Note the difference between
<code>1</code> (exactly
<code>1</code>) and
<code>one
</code> (ending in
<code>1</code>, except ending in
<code>11</code>).
4027 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
4028 <span class=
"normal">2</span>
4029 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">numberOfWorlds
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"m">2</span><span class=
"cp">}
</span>
4030 <span class=
"x"><h1
>Привет
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorld
</span> <span class=
"m">1</span><span class=
"o">=
</span><span class=
"s1">'мир
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'миры
'</span><span class=
"cp">}
</span><span class=
"x">!
</h1
></span>
4031 <span class=
"x"><p
>Есть
</span><span class=
"cp">{
</span><span class=
"nf">plural
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"nv">$numberOfWorlds
</span> <span class=
"m">1</span><span class=
"o">=
</span><span class=
"s1">'мир
'</span> <span class=
"na">one
</span><span class=
"o">=
</span><span class=
"s1">'# мир
'</span> <span class=
"na">few
</span><span class=
"o">=
</span><span class=
"s1">'# мира
'</span> <span class=
"na">many
</span><span class=
"o">=
</span><span class=
"s1">'# миров
'</span> <span class=
"na">other
</span><span class=
"o">=
</span><span class=
"s1">'# миров
'</span><span class=
"cp">}
</span><span class=
"x">!
</p
></span>
4032 </code></pre></div></td></tr></table></div></p>
4037 <th>Description
</th>
4043 <td>The value that is used to select the proper phrase.
</td>
4047 <td>The phrase that is used when no other selector matches.
</td>
4050 <td>Any Category Name
</td>
4051 <td>The phrase that is used when
<code>value
</code> belongs to the named category. Available categories depend on the language.
</td>
4054 <td>Any Integer
</td>
4055 <td>The phrase that is used when
<code>value
</code> is that exact integer.
</td>
4059 <h2 id=
"prepend"><code>{prepend}
</code><a class=
"headerlink" href=
"#prepend" title=
"Permanent link">#
</a></h2>
4060 <p>If a string should be prepended to the value of a variable,
<code>prepend
</code> can be used:
</p>
4061 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
4062 <span class=
"normal">2</span>
4063 <span class=
"normal">3</span>
4064 <span class=
"normal">4</span>
4065 <span class=
"normal">5</span>
4066 <span class=
"normal">6</span>
4067 <span class=
"normal">7</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">assign
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">templateVariable
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"s1">'newValue
'</span><span class=
"cp">}
</span>
4069 <span class=
"cp">{
</span><span class=
"nv">$templateVariable
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
'newValue *
</span><span class=
"cp">}
</span>
4071 <span class=
"cp">{
</span><span class=
"nf">prepend
</span> <span class=
"na">var
</span><span class=
"o">=
</span><span class=
"na">templateVariable
</span> <span class=
"na">value
</span><span class=
"o">=
</span><span class=
"s1">'2'</span><span class=
"cp">}
</span>
4073 <span class=
"cp">{
</span><span class=
"nv">$templateVariable
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* now prints
'2newValue
' *
</span><span class=
"cp">}
</span>
4074 </code></pre></div></td></tr></table></div>
4075 <p>If the variables does not exist yet,
<code>prepend
</code> creates a new one with the given value.
4076 If
<code>prepend
</code> is used on an array as the variable, the value is prepended to all elements of the array.
</p>
4077 <h2 id=
"shortunit"><code>|shortUnit
</code><a class=
"headerlink" href=
"#shortunit" title=
"Permanent link">#
</a></h2>
4078 <p><code>shortUnit
</code> shortens numbers larger than
1000 by using unit suffixes:
</p>
4079 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
4080 <span class=
"normal">2</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"m">10000</span><span class=
"o">|
</span><span class=
"na">shortUnit
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
10k *
</span><span class=
"cp">}
</span>
4081 <span class=
"cp">{
</span><span class=
"m">5400000</span><span class=
"o">|
</span><span class=
"na">shortUnit
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints
5.4M *
</span><span class=
"cp">}
</span>
4082 </code></pre></div></td></tr></table></div>
4083 <h2 id=
"tablewordwrap"><code>|tableWordwrap
</code><a class=
"headerlink" href=
"#tablewordwrap" title=
"Permanent link">#
</a></h2>
4084 <p><code>tableWordwrap
</code> inserts zero width spaces every
30 characters in words longer than
30 characters.
</p>
4085 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$foo
</span><span class=
"o">|
</span><span class=
"na">tableWordwrap
</span><span class=
"cp">}
</span>
4086 </code></pre></div></td></tr></table></div>
4087 <h2 id=
"time"><code>|time
</code><a class=
"headerlink" href=
"#time" title=
"Permanent link">#
</a></h2>
4088 <p><code>time
</code> generates an HTML
<code>time
</code> elements based on a timestamp that shows a relative time or the absolute time if the timestamp more than six days ago.
</p>
4089 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$timestamp
</span><span class=
"o">|
</span><span class=
"na">time
</span><span class=
"cp">}
</span><span class=
"x"> </span><span class=
"cp">{
</span><span class=
"c">* prints a
'<time
>' element *
</span><span class=
"cp">}
</span>
4090 </code></pre></div></td></tr></table></div>
4091 <h2 id=
"truncate"><code>|truncate
</code><a class=
"headerlink" href=
"#truncate" title=
"Permanent link">#
</a></h2>
4092 <p><code>truncate
</code> truncates a long string into a shorter one:
</p>
4093 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span>
4094 <span class=
"normal">2</span>
4095 <span class=
"normal">3</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nv">$foo
</span><span class=
"o">|
</span><span class=
"na">truncate
</span><span class=
"o">:
</span><span class=
"m">35</span><span class=
"cp">}
</span>
4097 <span class=
"cp">{
</span><span class=
"nv">$foo
</span><span class=
"o">|
</span><span class=
"na">truncate
</span><span class=
"o">:
</span><span class=
"m">35</span><span class=
"o">:
</span><span class=
"s1">'_
'</span><span class=
"o">:
</span><span class=
"kc">true
</span><span class=
"cp">}
</span>
4098 </code></pre></div></td></tr></table></div>
4102 <th>Parameter Number
</th>
4103 <th>Description
</th>
4109 <td>truncated string
</td>
4113 <td>truncated length;
<code>80</code> by default
</td>
4117 <td>ellipsis symbol;
<code>wcf\util\StringUtil::HELLIP
</code> by default
</td>
4121 <td>if
<code>true
</code>, words can be broken up in the middle;
<code>false
</code> by default
</td>
4125 <h2 id=
"user"><code>{user}
</code><a class=
"headerlink" href=
"#user" title=
"Permanent link">#
</a></h2>
4126 <p><code>user
</code> generates links to user profiles.
4127 The mandatory
<code>object
</code> parameter requires an instances of
<code>UserProfile
</code>.
4128 The optional
<code>type
</code> parameter is responsible for what the generated link contains:
</p>
4130 <li><code>type='default'
</code> (also applies if no
<code>type
</code> is given) outputs the formatted username relying on the “User Marking” setting of the relevant user group.
4131 Additionally, the user popover card will be shown when hovering over the generated link.
</li>
4132 <li><code>type='plain'
</code> outputs the username without additional formatting.
</li>
4133 <li><code>type='avatar(\d+)'
</code> outputs the user’s avatar in the specified size, i.e.,
<code>avatar48
</code> outputs the avatar with a width and height of
48 pixels.
</li>
4135 <p>The last special attribute is
<code>append
</code> whose contents are appended to the
<code>href
</code> attribute of the generated anchor element.
</p>
4136 <p>All of the other attributes matching
<code>~^[a-z]+([A-z]+)+$~
</code>, except for
<code>href
</code> which may not be added, are added as attributes to the anchor element.
</p>
4138 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">user
</span> <span class=
"na">object
</span><span class=
"o">=
</span><span class=
"nv">$user
</span><span class=
"cp">}
</span>
4139 </code></pre></div></td></tr></table></div>
4141 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><a href=
"</span><span class=
"cp">{
</span><span class=
"nv">$user
</span><span class=
"o">-
></span><span class=
"na">getLink
</span><span class=
"o">()
</span><span class=
"cp">}
</span><span class=
"x">" data-object-id=
"</span><span class=
"cp">{
</span><span class=
"nv">$user
</span><span class=
"o">-
></span><span class=
"na">userID
</span><span class=
"cp">}
</span><span class=
"x">" class=
"userLink
"></span><span class=
"cp">{
</span><span class=
"o">@
</span><span class=
"nv">$user
</span><span class=
"o">-
></span><span class=
"na">getFormattedUsername
</span><span class=
"o">()
</span><span class=
"cp">}
</span><span class=
"x"></a
></span>
4142 </code></pre></div></td></tr></table></div>
4144 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"cp">{
</span><span class=
"nf">user
</span> <span class=
"na">object
</span><span class=
"o">=
</span><span class=
"nv">$user
</span> <span class=
"na">type
</span><span class=
"o">=
</span><span class=
"s1">'avatar48
'</span> <span class=
"na">foo
</span><span class=
"o">=
</span><span class=
"s1">'bar
'</span><span class=
"cp">}
</span>
4145 </code></pre></div></td></tr></table></div>
4147 <div class=
"highlight"><table class=
"highlighttable"><tr><td class=
"linenos"><div class=
"linenodiv"><pre><span></span><span class=
"normal">1</span></pre></div></td><td class=
"code"><div><pre><span></span><code><span class=
"x"><a href=
"</span><span class=
"cp">{
</span><span class=
"nv">$user
</span><span class=
"o">-
></span><span class=
"na">getLink
</span><span class=
"o">()
</span><span class=
"cp">}
</span><span class=
"x">" foo=
"bar
"></span><span class=
"cp">{
</span><span class=
"o">@
</span><span class=
"nv">$object
</span><span class=
"o">-
></span><span class=
"na">getAvatar
</span><span class=
"o">()-
></span><span class=
"na">getImageTag
</span><span class=
"o">(
</span><span class=
"m">48</span><span class=
"o">)
</span><span class=
"cp">}
</span><span class=
"x"></a
></span>
4148 </code></pre></div></td></tr></table></div>
4151 <div class=
"md-source-file">
4173 <footer class=
"md-footer">
4175 <div class=
"md-footer-meta md-typeset">
4176 <div class=
"md-footer-meta__inner md-grid">
4177 <div class=
"md-copyright">
4179 <div class=
"md-copyright__highlight">
4180 Copyright ©
2020 WoltLab GmbH
4185 <a href=
"https://squidfunk.github.io/mkdocs-material/" target=
"_blank" rel=
"noopener">
4191 <div class=
"md-copyright">
4192 <a href=
"https://www.woltlab.com/legal-notice/">Legal Notice
</a>
4193 <a href=
"https://www.woltlab.com/privacy-policy/">Privacy Policy
</a>
4201 <div class=
"md-dialog" data-md-component=
"dialog">
4202 <div class=
"md-dialog__inner md-typeset"></div>
4205 <script id=
"__config" type=
"application/json">{
"base":
"../..",
"features": [
"navigation.tracking"],
"search":
"../../assets/javascripts/workers/search.208ed371.min.js",
"translations": {
"clipboard.copied":
"Copied to clipboard",
"clipboard.copy":
"Copy to clipboard",
"search.result.more.one":
"1 more on this page",
"search.result.more.other":
"# more on this page",
"search.result.none":
"No matching documents",
"search.result.one":
"1 matching document",
"search.result.other":
"# matching documents",
"search.result.placeholder":
"Type to start searching",
"search.result.term.missing":
"Missing",
"select.version":
"Select version"},
"version": {
"provider":
"mike"}}
</script>
4208 <script src=
"../../assets/javascripts/bundle.2a6f1dda.min.js"></script>