Deployed c8210293 to 6.0 with MkDocs 1.4.2 and mike 1.1.2
[GitHub/WoltLab/woltlab.github.io.git] / 6.0 / view / template-plugins / index.html
CommitLineData
9aa5da67
WG
1
2<!doctype html>
3<html lang="en" class="no-js">
4 <head>
5
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width,initial-scale=1">
8
9
10
11 <link rel="canonical" href="https://docs.woltlab.com/6.0/view/template-plugins/">
12
e02609d6
WG
13
14 <link rel="prev" href="../templates/">
15
16
17 <link rel="next" href="../css/">
18
9aa5da67 19 <link rel="icon" href="../../assets/default.favicon.ico">
0d132331 20 <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.15">
9aa5da67
WG
21
22
23
24 <title>Template Plugins - WoltLab Suite Documentation</title>
25
26
27
0d132331 28 <link rel="stylesheet" href="../../assets/stylesheets/main.113286f1.min.css">
9aa5da67
WG
29
30
6f2e8f13 31 <link rel="stylesheet" href="../../assets/stylesheets/palette.a0c5b2b5.min.css">
9aa5da67
WG
32
33
7f9945cf 34
9aa5da67
WG
35
36
37
38
39
40
41 <link rel="stylesheet" href="../../stylesheets/extra.css">
42
a06fd3b1 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>
9aa5da67
WG
44
45
46
47
48
7f9945cf 49
9aa5da67
WG
50 </head>
51
52
53
54
55
56
57
0fabd353 58 <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="">
9aa5da67
WG
59
60
61
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">
66
67
68 <a href="#template-plugins" class="md-skip">
69 Skip to content
70 </a>
71
72 </div>
73 <div data-md-component="announce">
74
75 <aside class="md-banner">
76 <div class="md-banner__inner md-grid md-typeset">
77
a06fd3b1 78
9aa5da67
WG
79 <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a>
80
81 </div>
a06fd3b1 82
9aa5da67
WG
83 </aside>
84
85 </div>
86
6f2e8f13 87 <div data-md-color-scheme="default" data-md-component="outdated" hidden>
a06fd3b1 88
9aa5da67
WG
89 </div>
90
91
92
93
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">
97
98 <img src="../../assets/logo.png" alt="logo">
99
100 </a>
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>
103 </label>
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
109 </span>
110 </div>
111 <div class="md-header__topic" data-md-component="header-topic">
112 <span class="md-ellipsis">
113
114 Template Plugins
115
116 </span>
117 </div>
118 </div>
119 </div>
120
121
122
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>
125 </label>
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>
134 </label>
135 <nav class="md-search__options" aria-label="Search">
136
7f9945cf 137 <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
9aa5da67
WG
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>
139 </button>
140 </nav>
141
142 </form>
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">
147 Initializing search
148 </div>
7b2c751c 149 <ol class="md-search-result__list" role="presentation"></ol>
9aa5da67
WG
150 </div>
151 </div>
152 </div>
153 </div>
154</div>
155
156
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">
160
6f2e8f13 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>
9aa5da67
WG
162 </div>
163 <div class="md-source__repository">
164 GitHub
165 </div>
166</a>
167 </div>
168
169 </nav>
170
171</header>
172
173 <div class="md-container" data-md-component="container">
174
175
176
177
178
179
180 <main class="md-main" data-md-component="main">
181 <div class="md-main__inner md-grid">
182
183
184
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">
188
189
190
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">
194
195 <img src="../../assets/logo.png" alt="logo">
196
197 </a>
198 WoltLab Suite Documentation
199 </label>
200
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">
204
6f2e8f13 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>
9aa5da67
WG
206 </div>
207 <div class="md-source__repository">
208 GitHub
209 </div>
210</a>
211 </div>
212
213 <ul class="md-nav__list" data-md-scrollfix>
214
215
216
217
218
219
220
221
222 <li class="md-nav__item">
223 <a href="../../getting-started/" class="md-nav__link">
224 Getting Started
225 </a>
226 </li>
227
228
229
230
231
232
233
234
235
236
237
238 <li class="md-nav__item md-nav__item--nested">
239
240
9aa5da67
WG
241
242
51b70eee 243 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
e02609d6 244
9aa5da67
WG
245
246
51b70eee 247 <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
9aa5da67
WG
248 PHP API
249 <span class="md-nav__icon md-icon"></span>
250 </label>
251
51b70eee 252 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
9aa5da67
WG
253 <label class="md-nav__title" for="__nav_2">
254 <span class="md-nav__icon md-icon"></span>
255 PHP API
256 </label>
257 <ul class="md-nav__list" data-md-scrollfix>
258
259
260
261
262
263
264 <li class="md-nav__item">
265 <a href="../../php/pages/" class="md-nav__link">
266 Pages
267 </a>
268 </li>
269
270
271
272
273
274
275
276
277
278 <li class="md-nav__item">
279 <a href="../../php/database-objects/" class="md-nav__link">
280 Database Objects
281 </a>
282 </li>
283
284
285
286
287
288
289
290
291
292 <li class="md-nav__item">
293 <a href="../../php/database-access/" class="md-nav__link">
294 Database Access
295 </a>
296 </li>
297
298
299
300
301
302
303
304
305
306 <li class="md-nav__item">
307 <a href="../../php/exceptions/" class="md-nav__link">
308 Exceptions
309 </a>
310 </li>
311
312
313
314
315
316
317
318
319
320
321 <li class="md-nav__item md-nav__item--nested">
322
323
9aa5da67
WG
324
325
51b70eee 326 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5" >
e02609d6 327
9aa5da67
WG
328
329
51b70eee 330 <label class="md-nav__link" for="__nav_2_5" id="__nav_2_5_label" tabindex="0">
9aa5da67
WG
331 API
332 <span class="md-nav__icon md-icon"></span>
333 </label>
334
51b70eee 335 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_5_label" aria-expanded="false">
9aa5da67
WG
336 <label class="md-nav__title" for="__nav_2_5">
337 <span class="md-nav__icon md-icon"></span>
338 API
339 </label>
340 <ul class="md-nav__list" data-md-scrollfix>
341
342
343
344
345
346
347
348 <li class="md-nav__item md-nav__item--nested">
349
350
9aa5da67
WG
351
352
51b70eee 353 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_1" >
9aa5da67
WG
354
355
e02609d6 356
51b70eee 357 <label class="md-nav__link" for="__nav_2_5_1" id="__nav_2_5_1_label" tabindex="0">
9aa5da67
WG
358 Caches
359 <span class="md-nav__icon md-icon"></span>
360 </label>
361
51b70eee 362 <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_1_label" aria-expanded="false">
9aa5da67
WG
363 <label class="md-nav__title" for="__nav_2_5_1">
364 <span class="md-nav__icon md-icon"></span>
365 Caches
366 </label>
367 <ul class="md-nav__list" data-md-scrollfix>
368
369
370
371
372
373
374 <li class="md-nav__item">
375 <a href="../../php/api/caches/" class="md-nav__link">
376 Overview
377 </a>
378 </li>
379
380
381
382
383
384
385
386
387
388 <li class="md-nav__item">
389 <a href="../../php/api/caches_persistent-caches/" class="md-nav__link">
390 Persistent Caches
391 </a>
392 </li>
393
394
395
396
397
398
399
400
401
402 <li class="md-nav__item">
403 <a href="../../php/api/caches_runtime-caches/" class="md-nav__link">
404 Runtime Caches
405 </a>
406 </li>
407
408
409
410
411 </ul>
412 </nav>
413 </li>
414
415
416
417
418
419
420
421
422
423 <li class="md-nav__item">
424 <a href="../../php/api/comments/" class="md-nav__link">
425 Comments
426 </a>
427 </li>
428
429
430
431
432
433
434
435
436
437 <li class="md-nav__item">
438 <a href="../../php/api/cronjobs/" class="md-nav__link">
439 Cronjobs
440 </a>
441 </li>
442
443
444
445
446
447
448
449
450
451 <li class="md-nav__item">
452 <a href="../../php/api/events/" class="md-nav__link">
453 Events
454 </a>
455 </li>
456
457
458
459
460
461
462
463
464
465
466 <li class="md-nav__item md-nav__item--nested">
467
468
9aa5da67
WG
469
470
51b70eee 471 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_5" >
e02609d6 472
9aa5da67
WG
473
474
51b70eee 475 <label class="md-nav__link" for="__nav_2_5_5" id="__nav_2_5_5_label" tabindex="0">
9aa5da67
WG
476 Form Builder
477 <span class="md-nav__icon md-icon"></span>
478 </label>
479
51b70eee 480 <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_5_label" aria-expanded="false">
9aa5da67
WG
481 <label class="md-nav__title" for="__nav_2_5_5">
482 <span class="md-nav__icon md-icon"></span>
483 Form Builder
484 </label>
485 <ul class="md-nav__list" data-md-scrollfix>
486
487
488
489
490
491
492 <li class="md-nav__item">
493 <a href="../../php/api/form_builder/overview/" class="md-nav__link">
494 Overview
495 </a>
496 </li>
497
498
499
500
501
502
503
504
505
506 <li class="md-nav__item">
507 <a href="../../php/api/form_builder/structure/" class="md-nav__link">
508 Structure
509 </a>
510 </li>
511
512
513
514
515
516
517
518
519
520 <li class="md-nav__item">
521 <a href="../../php/api/form_builder/form_fields/" class="md-nav__link">
522 Fields
523 </a>
524 </li>
525
526
527
528
529
530
531
532
533
534 <li class="md-nav__item">
535 <a href="../../php/api/form_builder/validation_data/" class="md-nav__link">
536 Validation and Data
537 </a>
538 </li>
539
540
541
542
543
544
545
546
547
548 <li class="md-nav__item">
549 <a href="../../php/api/form_builder/dependencies/" class="md-nav__link">
550 Dependencies
551 </a>
552 </li>
553
554
555
556
557 </ul>
558 </nav>
559 </li>
560
561
562
563
564
565
566
567
568
569 <li class="md-nav__item">
570 <a href="../../php/api/package_installation_plugins/" class="md-nav__link">
571 Package Installation Plugins
572 </a>
573 </li>
574
575
576
577
578
579
580
581
582
583 <li class="md-nav__item">
584 <a href="../../php/api/user_activity_points/" class="md-nav__link">
585 User Activity Points
586 </a>
587 </li>
588
589
590
591
592
593
594
595
596
597 <li class="md-nav__item">
598 <a href="../../php/api/user_notifications/" class="md-nav__link">
599 User Notifications
600 </a>
601 </li>
602
603
604
605
606
607
608
609
610
611 <li class="md-nav__item">
612 <a href="../../php/api/sitemaps/" class="md-nav__link">
613 Sitemaps
614 </a>
615 </li>
616
617
618
619
620 </ul>
621 </nav>
622 </li>
623
624
625
626
627
628
629
630
631
632 <li class="md-nav__item">
633 <a href="../../php/code-style/" class="md-nav__link">
634 Code Style
635 </a>
636 </li>
637
638
639
640
641
642
643
644
645
646 <li class="md-nav__item">
647 <a href="../../php/apps/" class="md-nav__link">
648 Apps
649 </a>
650 </li>
651
652
653
654
655
656
657
658
659
660 <li class="md-nav__item">
661 <a href="../../php/gdpr/" class="md-nav__link">
662 GDPR
663 </a>
664 </li>
665
666
667
668
669 </ul>
670 </nav>
671 </li>
672
673
674
675
676
677
678
679
680
681
682
683
684
685 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
686
687
9aa5da67
WG
688
689
51b70eee 690 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
e02609d6 691
9aa5da67
WG
692
693
51b70eee 694 <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
9aa5da67
WG
695 Languages, Templates & CSS
696 <span class="md-nav__icon md-icon"></span>
697 </label>
698
51b70eee 699 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
9aa5da67
WG
700 <label class="md-nav__title" for="__nav_3">
701 <span class="md-nav__icon md-icon"></span>
702 Languages, Templates & CSS
703 </label>
704 <ul class="md-nav__list" data-md-scrollfix>
705
706
707
708
709
710
711 <li class="md-nav__item">
712 <a href="../languages/" class="md-nav__link">
713 Languages
714 </a>
715 </li>
716
717
718
719
720
721
722
723
724
725 <li class="md-nav__item">
726 <a href="../templates/" class="md-nav__link">
727 Templates
728 </a>
729 </li>
730
731
732
733
734
735
736
737
738
739
740
741 <li class="md-nav__item md-nav__item--active">
742
51b70eee 743 <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
9aa5da67
WG
744
745
746
747
748
749 <label class="md-nav__link md-nav__link--active" for="__toc">
750 Template Plugins
751 <span class="md-nav__icon md-icon"></span>
752 </label>
753
754 <a href="./" class="md-nav__link md-nav__link--active">
755 Template Plugins
756 </a>
757
758
759
760<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
761
762
763
764
765
766
767 <label class="md-nav__title" for="__toc">
768 <span class="md-nav__icon md-icon"></span>
769 Table of contents
770 </label>
771 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
772
773 <li class="md-nav__item">
57bba3cc 774 <a href="#anchor" class="md-nav__link">
db9f8960 775 {anchor}
9aa5da67
WG
776 </a>
777
778</li>
779
780 <li class="md-nav__item">
57bba3cc 781 <a href="#anchorattributes" class="md-nav__link">
db9f8960 782 {anchorAttributes}
9aa5da67
WG
783 </a>
784
785</li>
786
787 <li class="md-nav__item">
788 <a href="#append" class="md-nav__link">
db9f8960 789 {append}
9aa5da67
WG
790 </a>
791
792</li>
793
794 <li class="md-nav__item">
795 <a href="#assign" class="md-nav__link">
db9f8960 796 {assign}
9aa5da67
WG
797 </a>
798
799</li>
800
801 <li class="md-nav__item">
802 <a href="#capture" class="md-nav__link">
db9f8960 803 {capture}
9aa5da67
WG
804 </a>
805
806</li>
807
808 <li class="md-nav__item">
809 <a href="#concat" class="md-nav__link">
db9f8960 810 |concat
9aa5da67
WG
811 </a>
812
813</li>
814
815 <li class="md-nav__item">
816 <a href="#counter" class="md-nav__link">
db9f8960 817 {counter}
9aa5da67
WG
818 </a>
819
820</li>
821
822 <li class="md-nav__item">
823 <a href="#54-csrftoken" class="md-nav__link">
824 5.4+ csrfToken
825 </a>
826
827</li>
828
829 <li class="md-nav__item">
830 <a href="#currency" class="md-nav__link">
db9f8960 831 |currency
9aa5da67
WG
832 </a>
833
834</li>
835
836 <li class="md-nav__item">
837 <a href="#cycle" class="md-nav__link">
db9f8960 838 {cycle}
9aa5da67
WG
839 </a>
840
841</li>
842
843 <li class="md-nav__item">
844 <a href="#date" class="md-nav__link">
db9f8960 845 |date
9aa5da67
WG
846 </a>
847
848</li>
849
850 <li class="md-nav__item">
57bba3cc 851 <a href="#dateinterval" class="md-nav__link">
db9f8960 852 {dateInterval}
9aa5da67
WG
853 </a>
854
855</li>
856
857 <li class="md-nav__item">
858 <a href="#encodejs" class="md-nav__link">
db9f8960 859 |encodeJS
9aa5da67
WG
860 </a>
861
862</li>
863
864 <li class="md-nav__item">
865 <a href="#escapecdata" class="md-nav__link">
db9f8960 866 |escapeCDATA
9aa5da67
WG
867 </a>
868
869</li>
870
871 <li class="md-nav__item">
872 <a href="#event" class="md-nav__link">
db9f8960 873 {event}
9aa5da67
WG
874 </a>
875
9aa5da67
WG
876</li>
877
878 <li class="md-nav__item">
879 <a href="#filesizebinary" class="md-nav__link">
db9f8960 880 |filesizeBinary
9aa5da67
WG
881 </a>
882
883</li>
884
885 <li class="md-nav__item">
886 <a href="#filesize" class="md-nav__link">
db9f8960 887 |filesize
9aa5da67
WG
888 </a>
889
890</li>
891
892 <li class="md-nav__item">
893 <a href="#hascontent" class="md-nav__link">
db9f8960 894 {hascontent}
9aa5da67
WG
895 </a>
896
897</li>
898
899 <li class="md-nav__item">
900 <a href="#htmlcheckboxes" class="md-nav__link">
db9f8960 901 {htmlCheckboxes}
9aa5da67
WG
902 </a>
903
904</li>
905
906 <li class="md-nav__item">
907 <a href="#htmloptions" class="md-nav__link">
db9f8960 908 {htmlOptions}
9aa5da67
WG
909 </a>
910
911</li>
912
913 <li class="md-nav__item">
914 <a href="#implode" class="md-nav__link">
db9f8960 915 {implode}
9aa5da67
WG
916 </a>
917
918</li>
919
920 <li class="md-nav__item">
57bba3cc 921 <a href="#ipsearch" class="md-nav__link">
db9f8960 922 |ipSearch
9aa5da67
WG
923 </a>
924
925</li>
926
927 <li class="md-nav__item">
928 <a href="#js" class="md-nav__link">
db9f8960 929 {js}
9aa5da67
WG
930 </a>
931
932</li>
933
934 <li class="md-nav__item">
57bba3cc 935 <a href="#jslang" class="md-nav__link">
db9f8960 936 {jslang}
9aa5da67
WG
937 </a>
938
939</li>
940
941 <li class="md-nav__item">
942 <a href="#55-json" class="md-nav__link">
cbb4b77d 943 5.5+ |json
9aa5da67
WG
944 </a>
945
71ef52e2
WG
946</li>
947
948 <li class="md-nav__item">
949 <a href="#60-jsphrase" class="md-nav__link">
950 6.0+ {jsphrase}
951 </a>
952
9aa5da67
WG
953</li>
954
955 <li class="md-nav__item">
956 <a href="#lang" class="md-nav__link">
db9f8960 957 {lang}
9aa5da67
WG
958 </a>
959
960</li>
961
962 <li class="md-nav__item">
963 <a href="#language" class="md-nav__link">
db9f8960 964 |language
9aa5da67
WG
965 </a>
966
967</li>
968
969 <li class="md-nav__item">
970 <a href="#link" class="md-nav__link">
db9f8960 971 {link}
9aa5da67
WG
972 </a>
973
974</li>
975
976 <li class="md-nav__item">
977 <a href="#newlinetobreak" class="md-nav__link">
db9f8960 978 |newlineToBreak
9aa5da67
WG
979 </a>
980
981</li>
982
983 <li class="md-nav__item">
984 <a href="#54-objectaction" class="md-nav__link">
985 5.4+ objectAction
986 </a>
987
988</li>
989
990 <li class="md-nav__item">
991 <a href="#page" class="md-nav__link">
db9f8960 992 {page}
9aa5da67
WG
993 </a>
994
995</li>
996
997 <li class="md-nav__item">
998 <a href="#pages" class="md-nav__link">
db9f8960 999 {pages}
9aa5da67
WG
1000 </a>
1001
1002</li>
1003
1004 <li class="md-nav__item">
1005 <a href="#55-phrase" class="md-nav__link">
cbb4b77d 1006 5.5+ |phrase
9aa5da67
WG
1007 </a>
1008
1009</li>
1010
1011 <li class="md-nav__item">
1012 <a href="#plaintime" class="md-nav__link">
db9f8960 1013 |plainTime
9aa5da67
WG
1014 </a>
1015
1016</li>
1017
1018 <li class="md-nav__item">
57bba3cc 1019 <a href="#plural" class="md-nav__link">
db9f8960 1020 {plural}
9aa5da67
WG
1021 </a>
1022
1023</li>
1024
1025 <li class="md-nav__item">
1026 <a href="#prepend" class="md-nav__link">
db9f8960 1027 {prepend}
9aa5da67
WG
1028 </a>
1029
1030</li>
1031
1032 <li class="md-nav__item">
1033 <a href="#shortunit" class="md-nav__link">
db9f8960 1034 |shortUnit
9aa5da67
WG
1035 </a>
1036
1037</li>
1038
1039 <li class="md-nav__item">
1040 <a href="#tablewordwrap" class="md-nav__link">
db9f8960 1041 |tableWordwrap
9aa5da67
WG
1042 </a>
1043
1044</li>
1045
1046 <li class="md-nav__item">
1047 <a href="#time" class="md-nav__link">
db9f8960 1048 |time
9aa5da67
WG
1049 </a>
1050
1051</li>
1052
1053 <li class="md-nav__item">
1054 <a href="#truncate" class="md-nav__link">
db9f8960 1055 |truncate
9aa5da67
WG
1056 </a>
1057
1058</li>
1059
1060 <li class="md-nav__item">
57bba3cc 1061 <a href="#user" class="md-nav__link">
db9f8960 1062 {user}
9aa5da67
WG
1063 </a>
1064
1065</li>
1066
1067 </ul>
1068
1069</nav>
1070
1071 </li>
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081 <li class="md-nav__item">
1082 <a href="../css/" class="md-nav__link">
1083 CSS
1084 </a>
1085 </li>
1086
1087
1088
1089
1090 </ul>
1091 </nav>
1092 </li>
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104 <li class="md-nav__item md-nav__item--nested">
1105
1106
9aa5da67
WG
1107
1108
51b70eee 1109 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
9aa5da67
WG
1110
1111
e02609d6 1112
51b70eee 1113 <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
9aa5da67
WG
1114 TypeScript and JavaScript API
1115 <span class="md-nav__icon md-icon"></span>
1116 </label>
1117
51b70eee 1118 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
9aa5da67
WG
1119 <label class="md-nav__title" for="__nav_4">
1120 <span class="md-nav__icon md-icon"></span>
1121 TypeScript and JavaScript API
1122 </label>
1123 <ul class="md-nav__list" data-md-scrollfix>
1124
1125
1126
1127
1128
1129
1130 <li class="md-nav__item">
1131 <a href="../../javascript/general-usage/" class="md-nav__link">
1132 General Usage
1133 </a>
1134 </li>
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144 <li class="md-nav__item">
1145 <a href="../../javascript/typescript/" class="md-nav__link">
1146 TypeScript
1147 </a>
1148 </li>
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159 <li class="md-nav__item md-nav__item--nested">
1160
1161
9aa5da67
WG
1162
1163
51b70eee 1164 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" >
e02609d6 1165
9aa5da67
WG
1166
1167
51b70eee 1168 <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
9f399714
WG
1169 Components
1170 <span class="md-nav__icon md-icon"></span>
1171 </label>
1172
51b70eee 1173 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
9f399714
WG
1174 <label class="md-nav__title" for="__nav_4_3">
1175 <span class="md-nav__icon md-icon"></span>
1176 Components
1177 </label>
1178 <ul class="md-nav__list" data-md-scrollfix>
1179
1180
1181
1182
1183
1184
1185 <li class="md-nav__item">
1186 <a href="../../javascript/components_confirmation/" class="md-nav__link">
1187 Confirmation
1188 </a>
1189 </li>
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199 <li class="md-nav__item">
1200 <a href="../../javascript/components_dialog/" class="md-nav__link">
1201 Dialog
1202 </a>
1203 </li>
1204
1205
1206
1207
f2d0508c
WG
1208
1209
1210
1211
1212
816a45a9
WG
1213 <li class="md-nav__item">
1214 <a href="../../javascript/components_google_maps/" class="md-nav__link">
1215 Google Maps
1216 </a>
1217 </li>
1218
1219
1220
1221
1222
1223
1224
1225
1226
f2d0508c
WG
1227 <li class="md-nav__item">
1228 <a href="../../javascript/components_pagination/" class="md-nav__link">
1229 Pagination
1230 </a>
1231 </li>
1232
1233
1234
1235
9f399714
WG
1236 </ul>
1237 </nav>
1238 </li>
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249 <li class="md-nav__item md-nav__item--nested">
1250
1251
9f399714
WG
1252
1253
51b70eee 1254 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" >
e02609d6 1255
9f399714
WG
1256
1257
51b70eee 1258 <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
9aa5da67
WG
1259 New API
1260 <span class="md-nav__icon md-icon"></span>
1261 </label>
1262
51b70eee 1263 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
9f399714 1264 <label class="md-nav__title" for="__nav_4_4">
9aa5da67
WG
1265 <span class="md-nav__icon md-icon"></span>
1266 New API
1267 </label>
1268 <ul class="md-nav__list" data-md-scrollfix>
1269
1270
1271
1272
1273
1274
1275 <li class="md-nav__item">
1276 <a href="../../javascript/new-api_writing-a-module/" class="md-nav__link">
1277 Writing a module
1278 </a>
1279 </li>
1280
1281
1282
1283
1284
1285
1286
1287
1288
9aa5da67
WG
1289 <li class="md-nav__item">
1290 <a href="../../javascript/new-api_core/" class="md-nav__link">
1291 Core Functions
1292 </a>
1293 </li>
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303 <li class="md-nav__item">
1304 <a href="../../javascript/new-api_dom/" class="md-nav__link">
1305 DOM
1306 </a>
1307 </li>
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317 <li class="md-nav__item">
1318 <a href="../../javascript/new-api_events/" class="md-nav__link">
1319 Event Handling
1320 </a>
1321 </li>
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331 <li class="md-nav__item">
1332 <a href="../../javascript/new-api_ajax/" class="md-nav__link">
1333 Ajax
1334 </a>
1335 </li>
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345 <li class="md-nav__item">
1346 <a href="../../javascript/new-api_dialogs/" class="md-nav__link">
1347 Dialogs
1348 </a>
1349 </li>
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359 <li class="md-nav__item">
1360 <a href="../../javascript/new-api_browser/" class="md-nav__link">
1361 Browser and Screen Sizes
1362 </a>
1363 </li>
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373 <li class="md-nav__item">
1374 <a href="../../javascript/new-api_ui/" class="md-nav__link">
1375 User Interface
1376 </a>
1377 </li>
1378
1379
1380
1381
1382 </ul>
1383 </nav>
1384 </li>
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394 <li class="md-nav__item">
1395 <a href="../../javascript/legacy-api/" class="md-nav__link">
1396 Legacy API
1397 </a>
1398 </li>
1399
1400
1401
1402
1403
1404
1405
1406
1407
9aa5da67
WG
1408 <li class="md-nav__item">
1409 <a href="../../javascript/code-snippets/" class="md-nav__link">
1410 Code Snippets
1411 </a>
1412 </li>
1413
1414
1415
1416
1417 </ul>
1418 </nav>
1419 </li>
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431 <li class="md-nav__item md-nav__item--nested">
1432
1433
9aa5da67
WG
1434
1435
51b70eee 1436 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
9aa5da67
WG
1437
1438
e02609d6 1439
51b70eee 1440 <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
9aa5da67
WG
1441 Package Components
1442 <span class="md-nav__icon md-icon"></span>
1443 </label>
1444
51b70eee 1445 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
9aa5da67
WG
1446 <label class="md-nav__title" for="__nav_5">
1447 <span class="md-nav__icon md-icon"></span>
1448 Package Components
1449 </label>
1450 <ul class="md-nav__list" data-md-scrollfix>
1451
1452
1453
1454
1455
1456
1457 <li class="md-nav__item">
1458 <a href="../../package/package-xml/" class="md-nav__link">
1459 package.xml
1460 </a>
1461 </li>
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472 <li class="md-nav__item md-nav__item--nested">
1473
1474
9aa5da67
WG
1475
1476
51b70eee 1477 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
e02609d6 1478
9aa5da67
WG
1479
1480
51b70eee 1481 <label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
9aa5da67
WG
1482 PIPs
1483 <span class="md-nav__icon md-icon"></span>
1484 </label>
1485
51b70eee 1486 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
9aa5da67
WG
1487 <label class="md-nav__title" for="__nav_5_2">
1488 <span class="md-nav__icon md-icon"></span>
1489 PIPs
1490 </label>
1491 <ul class="md-nav__list" data-md-scrollfix>
1492
1493
1494
1495
1496
1497
1498 <li class="md-nav__item">
1499 <a href="../../package/pip/" class="md-nav__link">
1500 Overview
1501 </a>
1502 </li>
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512 <li class="md-nav__item">
1513 <a href="../../package/pip/acl-option/" class="md-nav__link">
1514 aclOption
1515 </a>
1516 </li>
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526 <li class="md-nav__item">
1527 <a href="../../package/pip/acp-menu/" class="md-nav__link">
1528 acpMenu
1529 </a>
1530 </li>
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540 <li class="md-nav__item">
1541 <a href="../../package/pip/acp-search-provider/" class="md-nav__link">
1542 acpSearchProvider
1543 </a>
1544 </li>
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554 <li class="md-nav__item">
1555 <a href="../../package/pip/acp-template/" class="md-nav__link">
1556 acpTemplate
1557 </a>
1558 </li>
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568 <li class="md-nav__item">
1569 <a href="../../package/pip/acp-template-delete/" class="md-nav__link">
1570 acpTemplateDelete
1571 </a>
1572 </li>
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582 <li class="md-nav__item">
1583 <a href="../../package/pip/bbcode/" class="md-nav__link">
1584 bbcode
1585 </a>
1586 </li>
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596 <li class="md-nav__item">
1597 <a href="../../package/pip/box/" class="md-nav__link">
1598 box
1599 </a>
1600 </li>
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610 <li class="md-nav__item">
1611 <a href="../../package/pip/clipboard-action/" class="md-nav__link">
1612 clipboardAction
1613 </a>
1614 </li>
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624 <li class="md-nav__item">
1625 <a href="../../package/pip/core-object/" class="md-nav__link">
1626 coreObject
1627 </a>
1628 </li>
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638 <li class="md-nav__item">
1639 <a href="../../package/pip/cronjob/" class="md-nav__link">
1640 cronjob
1641 </a>
1642 </li>
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652 <li class="md-nav__item">
1653 <a href="../../package/pip/database/" class="md-nav__link">
1654 database
1655 </a>
1656 </li>
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666 <li class="md-nav__item">
1667 <a href="../../package/pip/event-listener/" class="md-nav__link">
1668 eventListener
1669 </a>
1670 </li>
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680 <li class="md-nav__item">
1681 <a href="../../package/pip/file/" class="md-nav__link">
1682 file
1683 </a>
1684 </li>
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694 <li class="md-nav__item">
1695 <a href="../../package/pip/file-delete/" class="md-nav__link">
1696 fileDelete
1697 </a>
1698 </li>
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708 <li class="md-nav__item">
1709 <a href="../../package/pip/language/" class="md-nav__link">
1710 language
1711 </a>
1712 </li>
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722 <li class="md-nav__item">
1723 <a href="../../package/pip/media-provider/" class="md-nav__link">
1724 mediaProvider
1725 </a>
1726 </li>
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736 <li class="md-nav__item">
1737 <a href="../../package/pip/menu/" class="md-nav__link">
1738 menu
1739 </a>
1740 </li>
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750 <li class="md-nav__item">
1751 <a href="../../package/pip/menu-item/" class="md-nav__link">
1752 menuItem
1753 </a>
1754 </li>
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764 <li class="md-nav__item">
1765 <a href="../../package/pip/object-type/" class="md-nav__link">
1766 objectType
1767 </a>
1768 </li>
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778 <li class="md-nav__item">
1779 <a href="../../package/pip/object-type-definition/" class="md-nav__link">
1780 objectTypeDefinition
1781 </a>
1782 </li>
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792 <li class="md-nav__item">
1793 <a href="../../package/pip/option/" class="md-nav__link">
1794 option
1795 </a>
1796 </li>
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806 <li class="md-nav__item">
1807 <a href="../../package/pip/page/" class="md-nav__link">
1808 page
1809 </a>
1810 </li>
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820 <li class="md-nav__item">
1821 <a href="../../package/pip/pip/" class="md-nav__link">
1822 pip
1823 </a>
1824 </li>
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834 <li class="md-nav__item">
1835 <a href="../../package/pip/script/" class="md-nav__link">
1836 script
1837 </a>
1838 </li>
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848 <li class="md-nav__item">
1849 <a href="../../package/pip/smiley/" class="md-nav__link">
1850 smiley
1851 </a>
1852 </li>
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862 <li class="md-nav__item">
1863 <a href="../../package/pip/sql/" class="md-nav__link">
1864 sql
1865 </a>
1866 </li>
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876 <li class="md-nav__item">
1877 <a href="../../package/pip/style/" class="md-nav__link">
1878 style
1879 </a>
1880 </li>
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890 <li class="md-nav__item">
1891 <a href="../../package/pip/template/" class="md-nav__link">
1892 template
1893 </a>
1894 </li>
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904 <li class="md-nav__item">
1905 <a href="../../package/pip/template-delete/" class="md-nav__link">
1906 templateDelete
1907 </a>
1908 </li>
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918 <li class="md-nav__item">
1919 <a href="../../package/pip/template-listener/" class="md-nav__link">
1920 templateListener
1921 </a>
1922 </li>
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932 <li class="md-nav__item">
1933 <a href="../../package/pip/user-group-option/" class="md-nav__link">
1934 userGroupOption
1935 </a>
1936 </li>
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946 <li class="md-nav__item">
1947 <a href="../../package/pip/user-menu/" class="md-nav__link">
1948 userMenu
1949 </a>
1950 </li>
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960 <li class="md-nav__item">
1961 <a href="../../package/pip/user-notification-event/" class="md-nav__link">
1962 userNotificationEvent
1963 </a>
1964 </li>
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974 <li class="md-nav__item">
1975 <a href="../../package/pip/user-option/" class="md-nav__link">
1976 userOption
1977 </a>
1978 </li>
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988 <li class="md-nav__item">
1989 <a href="../../package/pip/user-profile-menu/" class="md-nav__link">
1990 userProfileMenu
1991 </a>
1992 </li>
1993
1994
1995
1996
1997 </ul>
1998 </nav>
1999 </li>
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009 <li class="md-nav__item">
2010 <a href="../../package/database-php-api/" class="md-nav__link">
2011 Database PHP API
2012 </a>
2013 </li>
2014
2015
2016
2017
2018 </ul>
2019 </nav>
2020 </li>
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032 <li class="md-nav__item md-nav__item--nested">
2033
2034
9aa5da67
WG
2035
2036
51b70eee 2037 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
e02609d6 2038
9aa5da67
WG
2039
2040
51b70eee 2041 <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
9aa5da67
WG
2042 Migration
2043 <span class="md-nav__icon md-icon"></span>
2044 </label>
2045
51b70eee 2046 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
9aa5da67
WG
2047 <label class="md-nav__title" for="__nav_6">
2048 <span class="md-nav__icon md-icon"></span>
2049 Migration
2050 </label>
2051 <ul class="md-nav__list" data-md-scrollfix>
2052
2053
2054
2055
2056
2057
2058
2059 <li class="md-nav__item md-nav__item--nested">
2060
2061
9aa5da67
WG
2062
2063
51b70eee 2064 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_1" >
9aa5da67
WG
2065
2066
e02609d6 2067
51b70eee 2068 <label class="md-nav__link" for="__nav_6_1" id="__nav_6_1_label" tabindex="0">
9aa5da67
WG
2069 From WoltLab Suite 5.5
2070 <span class="md-nav__icon md-icon"></span>
2071 </label>
2072
51b70eee 2073 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_1_label" aria-expanded="false">
9aa5da67
WG
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
2077 </label>
2078 <ul class="md-nav__list" data-md-scrollfix>
2079
2080
2081
2082
2083
2084
2085 <li class="md-nav__item">
2086 <a href="../../migration/wsc55/php/" class="md-nav__link">
2087 PHP API
2088 </a>
2089 </li>
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099 <li class="md-nav__item">
2100 <a href="../../migration/wsc55/javascript/" class="md-nav__link">
2101 TypeScript and JavaScript
2102 </a>
2103 </li>
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113 <li class="md-nav__item">
2114 <a href="../../migration/wsc55/templates/" class="md-nav__link">
2115 Templates
2116 </a>
2117 </li>
2118
2119
2120
2121
2122
2123
2124
2125
2126
024038ef
WG
2127 <li class="md-nav__item">
2128 <a href="../../migration/wsc55/icons/" class="md-nav__link">
2129 Icons
2130 </a>
2131 </li>
2132
2133
2134
2135
2136
2137
2138
2139
2140
6d611e8a
WG
2141 <li class="md-nav__item">
2142 <a href="../../migration/wsc55/dialogs/" class="md-nav__link">
2143 Dialogs
2144 </a>
2145 </li>
2146
2147
2148
2149
2150
2151
2152
2153
2154
9aa5da67
WG
2155 <li class="md-nav__item">
2156 <a href="../../migration/wsc55/libraries/" class="md-nav__link">
2157 Third Party Libraries
2158 </a>
2159 </li>
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169 <li class="md-nav__item">
2170 <a href="../../migration/wsc55/deprecations_removals/" class="md-nav__link">
2171 Deprecations and Removals
2172 </a>
2173 </li>
2174
2175
2176
2177
2178 </ul>
2179 </nav>
2180 </li>
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191 <li class="md-nav__item md-nav__item--nested">
2192
2193
9aa5da67
WG
2194
2195
51b70eee 2196 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_2" >
e02609d6 2197
9aa5da67
WG
2198
2199
51b70eee 2200 <label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0">
9aa5da67
WG
2201 From WoltLab Suite 5.4
2202 <span class="md-nav__icon md-icon"></span>
2203 </label>
2204
51b70eee 2205 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="false">
9aa5da67
WG
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
2209 </label>
2210 <ul class="md-nav__list" data-md-scrollfix>
2211
2212
2213
2214
2215
2216
2217 <li class="md-nav__item">
2218 <a href="../../migration/wsc54/php/" class="md-nav__link">
2219 PHP API
2220 </a>
2221 </li>
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231 <li class="md-nav__item">
2232 <a href="../../migration/wsc54/javascript/" class="md-nav__link">
2233 TypeScript and JavaScript
2234 </a>
2235 </li>
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245 <li class="md-nav__item">
2246 <a href="../../migration/wsc54/templates/" class="md-nav__link">
2247 Templates
2248 </a>
2249 </li>
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259 <li class="md-nav__item">
2260 <a href="../../migration/wsc54/libraries/" class="md-nav__link">
2261 Third Party Libraries
2262 </a>
2263 </li>
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273 <li class="md-nav__item">
2274 <a href="../../migration/wsc54/deprecations_removals/" class="md-nav__link">
2275 Deprecations and Removals
2276 </a>
2277 </li>
2278
2279
2280
2281
2282 </ul>
2283 </nav>
2284 </li>
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295 <li class="md-nav__item md-nav__item--nested">
2296
2297
9aa5da67
WG
2298
2299
51b70eee 2300 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_3" >
e02609d6 2301
9aa5da67
WG
2302
2303
51b70eee 2304 <label class="md-nav__link" for="__nav_6_3" id="__nav_6_3_label" tabindex="0">
9aa5da67
WG
2305 From WoltLab Suite 5.3
2306 <span class="md-nav__icon md-icon"></span>
2307 </label>
2308
51b70eee 2309 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_3_label" aria-expanded="false">
9aa5da67
WG
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
2313 </label>
2314 <ul class="md-nav__list" data-md-scrollfix>
2315
2316
2317
2318
2319
2320
2321 <li class="md-nav__item">
2322 <a href="../../migration/wsc53/php/" class="md-nav__link">
2323 PHP API
2324 </a>
2325 </li>
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335 <li class="md-nav__item">
2336 <a href="../../migration/wsc53/session/" class="md-nav__link">
2337 Session Handling and Authentication
2338 </a>
2339 </li>
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349 <li class="md-nav__item">
2350 <a href="../../migration/wsc53/javascript/" class="md-nav__link">
2351 TypeScript and JavaScript
2352 </a>
2353 </li>
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363 <li class="md-nav__item">
2364 <a href="../../migration/wsc53/templates/" class="md-nav__link">
2365 Templates
2366 </a>
2367 </li>
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377 <li class="md-nav__item">
2378 <a href="../../migration/wsc53/libraries/" class="md-nav__link">
2379 Third Party Libraries
2380 </a>
2381 </li>
2382
2383
2384
2385
2386 </ul>
2387 </nav>
2388 </li>
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399 <li class="md-nav__item md-nav__item--nested">
2400
2401
9aa5da67
WG
2402
2403
51b70eee 2404 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_4" >
9aa5da67
WG
2405
2406
e02609d6 2407
51b70eee 2408 <label class="md-nav__link" for="__nav_6_4" id="__nav_6_4_label" tabindex="0">
9aa5da67
WG
2409 From WoltLab Suite 5.2
2410 <span class="md-nav__icon md-icon"></span>
2411 </label>
2412
51b70eee 2413 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_4_label" aria-expanded="false">
9aa5da67
WG
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
2417 </label>
2418 <ul class="md-nav__list" data-md-scrollfix>
2419
2420
2421
2422
2423
2424
2425 <li class="md-nav__item">
2426 <a href="../../migration/wsc52/php/" class="md-nav__link">
2427 PHP API
2428 </a>
2429 </li>
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439 <li class="md-nav__item">
2440 <a href="../../migration/wsc52/templates/" class="md-nav__link">
2441 Templates and Languages
2442 </a>
2443 </li>
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453 <li class="md-nav__item">
2454 <a href="../../migration/wsc52/libraries/" class="md-nav__link">
2455 Third Party Libraries
2456 </a>
2457 </li>
2458
2459
2460
2461
2462 </ul>
2463 </nav>
2464 </li>
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475 <li class="md-nav__item md-nav__item--nested">
2476
2477
9aa5da67
WG
2478
2479
51b70eee 2480 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_5" >
e02609d6 2481
9aa5da67
WG
2482
2483
51b70eee 2484 <label class="md-nav__link" for="__nav_6_5" id="__nav_6_5_label" tabindex="0">
9aa5da67
WG
2485 From WoltLab Suite 3.1
2486 <span class="md-nav__icon md-icon"></span>
2487 </label>
2488
51b70eee 2489 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_5_label" aria-expanded="false">
9aa5da67
WG
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
2493 </label>
2494 <ul class="md-nav__list" data-md-scrollfix>
2495
2496
2497
2498
2499
2500
2501 <li class="md-nav__item">
2502 <a href="../../migration/wsc31/php/" class="md-nav__link">
2503 PHP API
2504 </a>
2505 </li>
2506
2507
2508
2509
2510 </ul>
2511 </nav>
2512 </li>
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523 <li class="md-nav__item md-nav__item--nested">
2524
2525
9aa5da67
WG
2526
2527
51b70eee 2528 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_6" >
e02609d6 2529
9aa5da67
WG
2530
2531
51b70eee 2532 <label class="md-nav__link" for="__nav_6_6" id="__nav_6_6_label" tabindex="0">
9aa5da67
WG
2533 From WoltLab Suite 3.0
2534 <span class="md-nav__icon md-icon"></span>
2535 </label>
2536
51b70eee 2537 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_6_label" aria-expanded="false">
9aa5da67
WG
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
2541 </label>
2542 <ul class="md-nav__list" data-md-scrollfix>
2543
2544
2545
2546
2547
2548
2549 <li class="md-nav__item">
2550 <a href="../../migration/wsc30/php/" class="md-nav__link">
2551 PHP API
2552 </a>
2553 </li>
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563 <li class="md-nav__item">
2564 <a href="../../migration/wsc30/javascript/" class="md-nav__link">
2565 JavaScript API
2566 </a>
2567 </li>
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577 <li class="md-nav__item">
2578 <a href="../../migration/wsc30/templates/" class="md-nav__link">
2579 Templates
2580 </a>
2581 </li>
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591 <li class="md-nav__item">
2592 <a href="../../migration/wsc30/css/" class="md-nav__link">
2593 CSS
2594 </a>
2595 </li>
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605 <li class="md-nav__item">
2606 <a href="../../migration/wsc30/package/" class="md-nav__link">
2607 Package Components
2608 </a>
2609 </li>
2610
2611
2612
2613
2614 </ul>
2615 </nav>
2616 </li>
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627 <li class="md-nav__item md-nav__item--nested">
2628
2629
9aa5da67
WG
2630
2631
51b70eee 2632 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_7" >
9aa5da67
WG
2633
2634
e02609d6 2635
51b70eee 2636 <label class="md-nav__link" for="__nav_6_7" id="__nav_6_7_label" tabindex="0">
9aa5da67
WG
2637 From WCF 2.1
2638 <span class="md-nav__icon md-icon"></span>
2639 </label>
2640
51b70eee 2641 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="false">
9aa5da67
WG
2642 <label class="md-nav__title" for="__nav_6_7">
2643 <span class="md-nav__icon md-icon"></span>
2644 From WCF 2.1
2645 </label>
2646 <ul class="md-nav__list" data-md-scrollfix>
2647
2648
2649
2650
2651
2652
2653 <li class="md-nav__item">
2654 <a href="../../migration/wcf21/php/" class="md-nav__link">
2655 PHP API
2656 </a>
2657 </li>
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667 <li class="md-nav__item">
2668 <a href="../../migration/wcf21/templates/" class="md-nav__link">
2669 Templates
2670 </a>
2671 </li>
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681 <li class="md-nav__item">
2682 <a href="../../migration/wcf21/css/" class="md-nav__link">
2683 CSS
2684 </a>
2685 </li>
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695 <li class="md-nav__item">
2696 <a href="../../migration/wcf21/package/" class="md-nav__link">
2697 Package Components
2698 </a>
2699 </li>
2700
2701
2702
2703
2704 </ul>
2705 </nav>
2706 </li>
2707
2708
2709
2710
2711 </ul>
2712 </nav>
2713 </li>
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725 <li class="md-nav__item md-nav__item--nested">
2726
2727
9aa5da67
WG
2728
2729
51b70eee 2730 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
e02609d6 2731
9aa5da67
WG
2732
2733
51b70eee 2734 <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
9aa5da67
WG
2735 Tutorials
2736 <span class="md-nav__icon md-icon"></span>
2737 </label>
2738
51b70eee 2739 <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
9aa5da67
WG
2740 <label class="md-nav__title" for="__nav_7">
2741 <span class="md-nav__icon md-icon"></span>
2742 Tutorials
2743 </label>
2744 <ul class="md-nav__list" data-md-scrollfix>
2745
2746
2747
2748
2749
2750
2751
2752 <li class="md-nav__item md-nav__item--nested">
2753
2754
9aa5da67
WG
2755
2756
51b70eee 2757 <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_1" >
9aa5da67
WG
2758
2759
e02609d6 2760
51b70eee 2761 <label class="md-nav__link" for="__nav_7_1" id="__nav_7_1_label" tabindex="0">
9aa5da67
WG
2762 Tutorial Series
2763 <span class="md-nav__icon md-icon"></span>
2764 </label>
2765
51b70eee 2766 <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_1_label" aria-expanded="false">
9aa5da67
WG
2767 <label class="md-nav__title" for="__nav_7_1">
2768 <span class="md-nav__icon md-icon"></span>
2769 Tutorial Series
2770 </label>
2771 <ul class="md-nav__list" data-md-scrollfix>
2772
2773
2774
2775
2776
2777
2778 <li class="md-nav__item">
2779 <a href="../../tutorial/series/overview/" class="md-nav__link">
2780 Overview
2781 </a>
2782 </li>
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792 <li class="md-nav__item">
2793 <a href="../../tutorial/series/part_1/" class="md-nav__link">
2794 Part 1
2795 </a>
2796 </li>
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806 <li class="md-nav__item">
2807 <a href="../../tutorial/series/part_2/" class="md-nav__link">
2808 Part 2
2809 </a>
2810 </li>
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820 <li class="md-nav__item">
2821 <a href="../../tutorial/series/part_3/" class="md-nav__link">
2822 Part 3
2823 </a>
2824 </li>
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834 <li class="md-nav__item">
2835 <a href="../../tutorial/series/part_4/" class="md-nav__link">
2836 Part 4
2837 </a>
2838 </li>
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848 <li class="md-nav__item">
2849 <a href="../../tutorial/series/part_5/" class="md-nav__link">
2850 Part 5
2851 </a>
2852 </li>
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862 <li class="md-nav__item">
2863 <a href="../../tutorial/series/part_6/" class="md-nav__link">
2864 Part 6
2865 </a>
2866 </li>
2867
2868
2869
2870
2871 </ul>
2872 </nav>
2873 </li>
2874
2875
2876
2877
2878 </ul>
2879 </nav>
2880 </li>
2881
2882
2883
2884 </ul>
2885</nav>
2886 </div>
2887 </div>
2888 </div>
2889
2890
2891
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">
2895
2896
2897<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
2898
2899
2900
2901
2902
2903
2904 <label class="md-nav__title" for="__toc">
2905 <span class="md-nav__icon md-icon"></span>
2906 Table of contents
2907 </label>
2908 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2909
2910 <li class="md-nav__item">
57bba3cc 2911 <a href="#anchor" class="md-nav__link">
db9f8960 2912 {anchor}
9aa5da67
WG
2913 </a>
2914
2915</li>
2916
2917 <li class="md-nav__item">
57bba3cc 2918 <a href="#anchorattributes" class="md-nav__link">
db9f8960 2919 {anchorAttributes}
9aa5da67
WG
2920 </a>
2921
2922</li>
2923
2924 <li class="md-nav__item">
2925 <a href="#append" class="md-nav__link">
db9f8960 2926 {append}
9aa5da67
WG
2927 </a>
2928
2929</li>
2930
2931 <li class="md-nav__item">
2932 <a href="#assign" class="md-nav__link">
db9f8960 2933 {assign}
9aa5da67
WG
2934 </a>
2935
2936</li>
2937
2938 <li class="md-nav__item">
2939 <a href="#capture" class="md-nav__link">
db9f8960 2940 {capture}
9aa5da67
WG
2941 </a>
2942
2943</li>
2944
2945 <li class="md-nav__item">
2946 <a href="#concat" class="md-nav__link">
db9f8960 2947 |concat
9aa5da67
WG
2948 </a>
2949
2950</li>
2951
2952 <li class="md-nav__item">
2953 <a href="#counter" class="md-nav__link">
db9f8960 2954 {counter}
9aa5da67
WG
2955 </a>
2956
2957</li>
2958
2959 <li class="md-nav__item">
2960 <a href="#54-csrftoken" class="md-nav__link">
2961 5.4+ csrfToken
2962 </a>
2963
2964</li>
2965
2966 <li class="md-nav__item">
2967 <a href="#currency" class="md-nav__link">
db9f8960 2968 |currency
9aa5da67
WG
2969 </a>
2970
2971</li>
2972
2973 <li class="md-nav__item">
2974 <a href="#cycle" class="md-nav__link">
db9f8960 2975 {cycle}
9aa5da67
WG
2976 </a>
2977
2978</li>
2979
2980 <li class="md-nav__item">
2981 <a href="#date" class="md-nav__link">
db9f8960 2982 |date
9aa5da67
WG
2983 </a>
2984
2985</li>
2986
2987 <li class="md-nav__item">
57bba3cc 2988 <a href="#dateinterval" class="md-nav__link">
db9f8960 2989 {dateInterval}
9aa5da67
WG
2990 </a>
2991
2992</li>
2993
2994 <li class="md-nav__item">
2995 <a href="#encodejs" class="md-nav__link">
db9f8960 2996 |encodeJS
9aa5da67
WG
2997 </a>
2998
2999</li>
3000
3001 <li class="md-nav__item">
3002 <a href="#escapecdata" class="md-nav__link">
db9f8960 3003 |escapeCDATA
9aa5da67
WG
3004 </a>
3005
3006</li>
3007
3008 <li class="md-nav__item">
3009 <a href="#event" class="md-nav__link">
db9f8960 3010 {event}
9aa5da67
WG
3011 </a>
3012
9aa5da67
WG
3013</li>
3014
3015 <li class="md-nav__item">
3016 <a href="#filesizebinary" class="md-nav__link">
db9f8960 3017 |filesizeBinary
9aa5da67
WG
3018 </a>
3019
3020</li>
3021
3022 <li class="md-nav__item">
3023 <a href="#filesize" class="md-nav__link">
db9f8960 3024 |filesize
9aa5da67
WG
3025 </a>
3026
3027</li>
3028
3029 <li class="md-nav__item">
3030 <a href="#hascontent" class="md-nav__link">
db9f8960 3031 {hascontent}
9aa5da67
WG
3032 </a>
3033
3034</li>
3035
3036 <li class="md-nav__item">
3037 <a href="#htmlcheckboxes" class="md-nav__link">
db9f8960 3038 {htmlCheckboxes}
9aa5da67
WG
3039 </a>
3040
3041</li>
3042
3043 <li class="md-nav__item">
3044 <a href="#htmloptions" class="md-nav__link">
db9f8960 3045 {htmlOptions}
9aa5da67
WG
3046 </a>
3047
3048</li>
3049
3050 <li class="md-nav__item">
3051 <a href="#implode" class="md-nav__link">
db9f8960 3052 {implode}
9aa5da67
WG
3053 </a>
3054
3055</li>
3056
3057 <li class="md-nav__item">
57bba3cc 3058 <a href="#ipsearch" class="md-nav__link">
db9f8960 3059 |ipSearch
9aa5da67
WG
3060 </a>
3061
3062</li>
3063
3064 <li class="md-nav__item">
3065 <a href="#js" class="md-nav__link">
db9f8960 3066 {js}
9aa5da67
WG
3067 </a>
3068
3069</li>
3070
3071 <li class="md-nav__item">
57bba3cc 3072 <a href="#jslang" class="md-nav__link">
db9f8960 3073 {jslang}
9aa5da67
WG
3074 </a>
3075
3076</li>
3077
3078 <li class="md-nav__item">
3079 <a href="#55-json" class="md-nav__link">
cbb4b77d 3080 5.5+ |json
9aa5da67
WG
3081 </a>
3082
71ef52e2
WG
3083</li>
3084
3085 <li class="md-nav__item">
3086 <a href="#60-jsphrase" class="md-nav__link">
3087 6.0+ {jsphrase}
3088 </a>
3089
9aa5da67
WG
3090</li>
3091
3092 <li class="md-nav__item">
3093 <a href="#lang" class="md-nav__link">
db9f8960 3094 {lang}
9aa5da67
WG
3095 </a>
3096
3097</li>
3098
3099 <li class="md-nav__item">
3100 <a href="#language" class="md-nav__link">
db9f8960 3101 |language
9aa5da67
WG
3102 </a>
3103
3104</li>
3105
3106 <li class="md-nav__item">
3107 <a href="#link" class="md-nav__link">
db9f8960 3108 {link}
9aa5da67
WG
3109 </a>
3110
3111</li>
3112
3113 <li class="md-nav__item">
3114 <a href="#newlinetobreak" class="md-nav__link">
db9f8960 3115 |newlineToBreak
9aa5da67
WG
3116 </a>
3117
3118</li>
3119
3120 <li class="md-nav__item">
3121 <a href="#54-objectaction" class="md-nav__link">
3122 5.4+ objectAction
3123 </a>
3124
3125</li>
3126
3127 <li class="md-nav__item">
3128 <a href="#page" class="md-nav__link">
db9f8960 3129 {page}
9aa5da67
WG
3130 </a>
3131
3132</li>
3133
3134 <li class="md-nav__item">
3135 <a href="#pages" class="md-nav__link">
db9f8960 3136 {pages}
9aa5da67
WG
3137 </a>
3138
3139</li>
3140
3141 <li class="md-nav__item">
3142 <a href="#55-phrase" class="md-nav__link">
cbb4b77d 3143 5.5+ |phrase
9aa5da67
WG
3144 </a>
3145
3146</li>
3147
3148 <li class="md-nav__item">
3149 <a href="#plaintime" class="md-nav__link">
db9f8960 3150 |plainTime
9aa5da67
WG
3151 </a>
3152
3153</li>
3154
3155 <li class="md-nav__item">
57bba3cc 3156 <a href="#plural" class="md-nav__link">
db9f8960 3157 {plural}
9aa5da67
WG
3158 </a>
3159
3160</li>
3161
3162 <li class="md-nav__item">
3163 <a href="#prepend" class="md-nav__link">
db9f8960 3164 {prepend}
9aa5da67
WG
3165 </a>
3166
3167</li>
3168
3169 <li class="md-nav__item">
3170 <a href="#shortunit" class="md-nav__link">
db9f8960 3171 |shortUnit
9aa5da67
WG
3172 </a>
3173
3174</li>
3175
3176 <li class="md-nav__item">
3177 <a href="#tablewordwrap" class="md-nav__link">
db9f8960 3178 |tableWordwrap
9aa5da67
WG
3179 </a>
3180
3181</li>
3182
3183 <li class="md-nav__item">
3184 <a href="#time" class="md-nav__link">
db9f8960 3185 |time
9aa5da67
WG
3186 </a>
3187
3188</li>
3189
3190 <li class="md-nav__item">
3191 <a href="#truncate" class="md-nav__link">
db9f8960 3192 |truncate
9aa5da67
WG
3193 </a>
3194
3195</li>
3196
3197 <li class="md-nav__item">
57bba3cc 3198 <a href="#user" class="md-nav__link">
db9f8960 3199 {user}
9aa5da67
WG
3200 </a>
3201
3202</li>
3203
3204 </ul>
3205
3206</nav>
3207 </div>
3208 </div>
3209 </div>
3210
3211
7f9945cf
WG
3212
3213 <div class="md-content" data-md-component="content">
3214 <article class="md-content__inner md-typeset">
9aa5da67 3215
7f9945cf
WG
3216
3217
e02609d6
WG
3218
3219
3220
9aa5da67 3221
9aa5da67 3222<h1 id="template-plugins">Template Plugins<a class="headerlink" href="#template-plugins" title="Permanent link">#</a></h1>
db9f8960 3223<h2 id="anchor"><code>{anchor}</code><a class="headerlink" href="#anchor" title="Permanent link">#</a></h2>
9aa5da67
WG
3224<p>The <code>anchor</code> template plugin creates <code>a</code> HTML elements.
3225The easiest way to use the template plugin is to pass it an instance of <code>ITitledLinkObject</code>:</p>
c708394c 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>
9aa5da67
WG
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">&lt;a href=&quot;</span><span class="cp">{</span><span class="nv">$object</span><span class="o">-&gt;</span><span class="na">getLink</span><span class="o">()</span><span class="cp">}</span><span class="x">&quot;&gt;</span><span class="cp">{</span><span class="nv">$object</span><span class="o">-&gt;</span><span class="na">getTitle</span><span class="o">()</span><span class="cp">}</span><span class="x">&lt;/a&gt;</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>
c708394c 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>
9aa5da67
WG
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.
3238This functionality makes it easy to generate links with popover support.
3239Instead of</p>
c338dfa7 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">&lt;a href=&quot;</span><span class="cp">{</span><span class="nv">$entry</span><span class="o">-&gt;</span><span class="na">getLink</span><span class="o">()</span><span class="cp">}</span><span class="x">&quot; class=&quot;blogEntryLink&quot; data-object-id=&quot;</span><span class="cp">{</span><span class="nv">$entry</span><span class="o">-&gt;</span><span class="na">entryID</span><span class="cp">}</span><span class="x">&quot;&gt;</span><span class="cp">{</span><span class="nv">$entry</span><span class="o">-&gt;</span><span class="na">subject</span><span class="cp">}</span><span class="x">&lt;/a&gt;</span>
9aa5da67
WG
3241</code></pre></div></td></tr></table></div>
3242<p>using</p>
c708394c 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">&#39;blogEntryLink&#39;</span><span class="cp">}</span>
9aa5da67
WG
3244</code></pre></div></td></tr></table></div>
3245<p>is sufficient if <code>Entry::getPopoverLinkClass()</code> returns <code>blogEntryLink</code>.</p>
db9f8960 3246<h2 id="anchorattributes"><code>{anchorAttributes}</code><a class="headerlink" href="#anchorattributes" title="Permanent link">#</a></h2>
9aa5da67
WG
3247<p><code>anchorAttributes</code> compliments the <code>StringUtil::getAnchorTagAttributes(string, bool): string</code> method.
3248It 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">&lt;a href=&quot;https://www.example.com&quot; </span><span class="cp">{</span><span class="nf">anchorAttributes</span> <span class="na">url</span><span class="o">=</span><span class="s1">&#39;https://www.example.com&#39;</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">&gt;</span>
3250</code></pre></div></td></tr></table></div>
3251<table>
3252<thead>
3253<tr>
3254<th>Attribute</th>
3255<th>Description</th>
3256</tr>
3257</thead>
3258<tbody>
3259<tr>
3260<td><code>url</code></td>
3261<td>destination URL</td>
3262</tr>
3263<tr>
3264<td><code>appendHref</code></td>
3265<td>whether the <code>href</code> attribute should be generated; <code>true</code> by default</td>
3266</tr>
3267<tr>
3268<td><code>isUgc</code></td>
3269<td>whether the <code>rel="ugc"</code> attribute should be generated; <code>false</code> by default</td>
3270</tr>
3271<tr>
3272<td><code>appendClassname</code></td>
3273<td>whether the <code>class="externalURL"</code> attribute should be generated; <code>true</code> by default</td>
3274</tr>
3275</tbody>
3276</table>
db9f8960 3277<h2 id="append"><code>{append}</code><a class="headerlink" href="#append" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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">&#39;newValue&#39;</span><span class="cp">}</span>
9aa5da67 3286
c708394c 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 &#39;newValue *</span><span class="cp">}</span>
9aa5da67 3288
c708394c 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">&#39;2&#39;</span><span class="cp">}</span>
9aa5da67 3290
c708394c 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 &#39;newValue2 *</span><span class="cp">}</span>
9aa5da67
WG
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.
3294If <code>append</code> is used on an array as the variable, the value is appended to all elements of the array.</p>
db9f8960 3295<h2 id="assign"><code>{assign}</code><a class="headerlink" href="#assign" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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">&#39;newValue&#39;</span><span class="cp">}</span>
9aa5da67 3300
c708394c 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 &#39;newValue *</span><span class="cp">}</span>
9aa5da67 3302</code></pre></div></td></tr></table></div>
db9f8960 3303<h2 id="capture"><code>{capture}</code><a class="headerlink" href="#capture" title="Permanent link">#</a></h2>
9aa5da67
WG
3304<p>In some situations, <code>assign</code> is not sufficient to assign values to variables in templates if the value is complex.
3305Instead, <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>
c708394c
WG
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>
9aa5da67 3314<span class="x"> &lt;p&gt;</span><span class="cp">{</span><span class="nv">$bar</span><span class="cp">}</span><span class="x">&lt;/p&gt;</span>
c708394c 3315<span class="x"> </span><span class="cp">{</span><span class="nf">else</span><span class="cp">}</span>
9aa5da67 3316<span class="x"> &lt;small&gt;</span><span class="cp">{</span><span class="nv">$baz</span><span class="cp">}</span><span class="x">&lt;/small&gt;</span>
c708394c
WG
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>
9aa5da67 3319</code></pre></div></td></tr></table></div>
db9f8960 3320<h2 id="concat"><code>|concat</code><a class="headerlink" href="#concat" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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">&#39;foo&#39;</span><span class="cp">}</span>
9aa5da67 3327
c708394c 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">&#39;bar&#39;</span><span class="o">|</span><span class="na">concat</span><span class="o">:</span><span class="nv">$foo</span><span class="cp">}</span>
9aa5da67 3329
c708394c 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 &#39;foobar *</span><span class="cp">}</span>
9aa5da67 3331</code></pre></div></td></tr></table></div>
db9f8960 3332<h2 id="counter"><code>{counter}</code><a class="headerlink" href="#counter" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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 &#39;1&#39; *</span><span class="cp">}</span>
9aa5da67 3341
c708394c 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 &#39;2&#39; now *</span><span class="cp">}</span>
9aa5da67 3343
c708394c 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 &#39;3&#39; now internally *</span><span class="cp">}</span>
9aa5da67 3345
c708394c 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 &#39;4&#39; *</span><span class="cp">}</span>
9aa5da67
WG
3347</code></pre></div></td></tr></table></div>
3348<p>Counter supports the following attributes:</p>
3349<table>
3350<thead>
3351<tr>
3352<th>Attribute</th>
3353<th>Description</th>
3354</tr>
3355</thead>
3356<tbody>
3357<tr>
3358<td><code>assign</code></td>
3359<td>optional name of the template variable the current counter value is assigned to</td>
3360</tr>
3361<tr>
3362<td><code>direction</code></td>
3363<td>counting direction, either <code>up</code> or <code>down</code>; <code>up</code> by default</td>
3364</tr>
3365<tr>
3366<td><code>name</code></td>
3367<td>name of the counter, relevant if multiple counters are used simultaneously</td>
3368</tr>
3369<tr>
3370<td><code>print</code></td>
3371<td>if <code>true</code>, the current counter value is printed; <code>false</code> by default</td>
3372</tr>
3373<tr>
3374<td><code>skip</code></td>
3375<td>positive counting increment; <code>1</code> by default</td>
3376</tr>
3377<tr>
3378<td><code>start</code></td>
3379<td>start counter value; <code>1</code> by default</td>
3380</tr>
3381</tbody>
3382</table>
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">&lt;form action=&quot;</span><span class="cp">{</span><span class="nf">link</span> <span class="na">controller</span><span class="o">=</span><span class="s2">&quot;Foo&quot;</span><span class="cp">}{</span><span class="nf">/link</span><span class="cp">}</span><span class="x">&quot; method=&quot;post&quot;&gt;</span>
c708394c 3390<span class="x"> </span><span class="cp">{</span><span class="c">* snip *</span><span class="cp">}</span>
9aa5da67 3391
c708394c 3392<span class="x"> </span><span class="cp">{</span><span class="nf">csrfToken</span><span class="cp">}</span>
9aa5da67
WG
3393<span class="x">&lt;/form&gt;</span>
3394</code></pre></div></td></tr></table></div>
3395<p>The <code>{csrfToken}</code> template plugin supports a <code>type</code> parameter.
3396Specifying this parameter might be required in rare situations.
3397Please <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>
db9f8960 3398<h2 id="currency"><code>|currency</code><a class="headerlink" href="#currency" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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>
9aa5da67 3403
c708394c 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 &#39;12.34&#39; *</span><span class="cp">}</span>
9aa5da67 3405</code></pre></div></td></tr></table></div>
db9f8960 3406<h2 id="cycle"><code>{cycle}</code><a class="headerlink" href="#cycle" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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">&#39;bar,baz&#39;</span><span class="cp">}</span><span class="x"> </span><span class="cp">{</span><span class="c">* prints &#39;bar&#39; *</span><span class="cp">}</span>
9aa5da67 3415
c708394c 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 &#39;baz&#39; *</span><span class="cp">}</span>
9aa5da67 3417
c708394c 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 &#39;baz&#39; again *</span><span class="cp">}</span>
9aa5da67 3419
c708394c 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 &#39;bar&#39; *</span><span class="cp">}</span>
9aa5da67
WG
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>
3424</div>
3425<table>
3426<thead>
3427<tr>
3428<th>Attribute</th>
3429<th>Description</th>
3430</tr>
3431</thead>
3432<tbody>
3433<tr>
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>
3436</tr>
3437<tr>
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>
3440</tr>
3441<tr>
3442<td><code>delimiter</code></td>
3443<td>delimiter between the different cycle values; <code>,</code> by default</td>
3444</tr>
3445<tr>
3446<td><code>name</code></td>
3447<td>name of the cycle, relevant if multiple cycles are used simultaneously</td>
3448</tr>
3449<tr>
3450<td><code>print</code></td>
3451<td>if <code>true</code>, the current cycle value is printed, <code>false</code> by default</td>
3452</tr>
3453<tr>
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>
3456</tr>
3457<tr>
3458<td><code>values</code></td>
3459<td>string containing the different cycles values, also see <code>delimiter</code></td>
3460</tr>
3461</tbody>
3462</table>
db9f8960 3463<h2 id="date"><code>|date</code><a class="headerlink" href="#date" title="Permanent link">#</a></h2>
9aa5da67 3464<p><code>date</code> generated a formatted date using <code>wcf\util\DateUtil::format()</code> with <code>DateUtil::DATE_FORMAT</code> internally.</p>
c708394c 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>
9aa5da67 3466</code></pre></div></td></tr></table></div>
db9f8960 3467<h2 id="dateinterval"><code>{dateInterval}</code><a class="headerlink" href="#dateinterval" title="Permanent link">#</a></h2>
9aa5da67 3468<p><code>dateInterval</code> calculates the difference between two unix timestamps and generated a textual date interval.</p>
c708394c 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">&#39;sentence&#39;</span><span class="cp">}</span>
9aa5da67
WG
3470</code></pre></div></td></tr></table></div>
3471<table>
3472<thead>
3473<tr>
3474<th>Attribute</th>
3475<th>Description</th>
3476</tr>
3477</thead>
3478<tbody>
3479<tr>
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>
3482</tr>
3483<tr>
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>
3486</tr>
3487<tr>
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>
3490</tr>
3491<tr>
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>
3494</tr>
3495</tbody>
3496</table>
db9f8960 3497<h2 id="encodejs"><code>|encodeJS</code><a class="headerlink" href="#encodejs" title="Permanent link">#</a></h2>
9aa5da67
WG
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">&lt;script&gt;</span>
3502<span class="x"> var foo = &#39;</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">&#39;;</span>
3503<span class="x">&lt;/script&gt;</span>
3504</code></pre></div></td></tr></table></div>
db9f8960 3505<h2 id="escapecdata"><code>|escapeCDATA</code><a class="headerlink" href="#escapecdata" title="Permanent link">#</a></h2>
9aa5da67
WG
3506<p><code>escapeCDATA</code> encodes a string to be used in a <code>CDATA</code> element by replacing <code>]]&gt;</code> with <code>]]]]&gt;&lt;![CDATA[&gt;</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">&lt;![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">]]&gt;</span>
3508</code></pre></div></td></tr></table></div>
db9f8960 3509<h2 id="event"><code>{event}</code><a class="headerlink" href="#event" title="Permanent link">#</a></h2>
9aa5da67 3510<p><code>event</code> provides extension points in templates that <a href="../../package/pip/template-listener/">template listeners</a> can use.</p>
c708394c 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">&#39;foo&#39;</span><span class="cp">}</span>
9aa5da67 3512</code></pre></div></td></tr></table></div>
db9f8960 3513<h2 id="filesizebinary"><code>|filesizeBinary</code><a class="headerlink" href="#filesizebinary" title="Permanent link">#</a></h2>
9aa5da67 3514<p><code>filesizeBinary</code> formats the filesize using binary filesize (in bytes).</p>
c708394c 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>
9aa5da67 3516</code></pre></div></td></tr></table></div>
db9f8960 3517<h2 id="filesize"><code>|filesize</code><a class="headerlink" href="#filesize" title="Permanent link">#</a></h2>
9aa5da67 3518<p><code>filesize</code> formats the filesize using filesize (in bytes).</p>
c708394c 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>
9aa5da67 3520</code></pre></div></td></tr></table></div>
db9f8960 3521<h2 id="hascontent"><code>{hascontent}</code><a class="headerlink" href="#hascontent" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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">&#39;bar&#39;</span><span class="cp">}</span>
9aa5da67 3526<span class="x"> only shown if $foo is bar</span>
c708394c 3527<span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span>
9aa5da67
WG
3528</code></pre></div></td></tr></table></div>
3529<p>In some situations, however, such conditional statements are not sufficient.
3530One 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>
c708394c 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">&#39;bar&#39;</span><span class="cp">}</span>
9aa5da67 3540<span class="x"> &lt;ul&gt;</span>
c708394c 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">&#39;bar&#39;</span><span class="cp">}</span>
9aa5da67 3542<span class="x"> &lt;li&gt;Bar&lt;/li&gt;</span>
c708394c 3543<span class="x"> </span><span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span>
9aa5da67 3544
c708394c 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">&#39;listItems&#39;</span><span class="cp">}</span>
9aa5da67 3546<span class="x"> &lt;/li&gt;</span>
c708394c 3547<span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span>
9aa5da67
WG
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.
3550In 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>
c708394c 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>
9aa5da67 3562<span class="x"> &lt;ul&gt;</span>
c708394c
WG
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">&#39;bar&#39;</span><span class="cp">}</span>
9aa5da67 3565<span class="x"> &lt;li&gt;Bar&lt;/li&gt;</span>
c708394c 3566<span class="x"> </span><span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span>
9aa5da67 3567
c708394c
WG
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">&#39;listItems&#39;</span><span class="cp">}</span>
3569<span class="x"> </span><span class="cp">{</span><span class="nf">/content</span><span class="cp">}</span>
9aa5da67 3570<span class="x"> &lt;/ul&gt;</span>
c708394c 3571<span class="cp">{</span><span class="nf">/hascontent</span><span class="cp">}</span>
9aa5da67
WG
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.
3574Thus, 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>
c708394c 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>
9aa5da67 3585<span class="x"> &lt;ul&gt;</span>
c708394c
WG
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>
9aa5da67 3589<span class="x"> &lt;/ul&gt;</span>
c708394c 3590<span class="cp">{</span><span class="nf">hascontentelse</span><span class="cp">}</span>
9aa5da67 3591<span class="x"> no list</span>
c708394c 3592<span class="cp">{</span><span class="nf">/hascontent</span><span class="cp">}</span>
9aa5da67 3593</code></pre></div></td></tr></table></div>
db9f8960 3594<h2 id="htmlcheckboxes"><code>{htmlCheckboxes}</code><a class="headerlink" href="#htmlcheckboxes" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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>
9aa5da67 3599
c708394c 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>
9aa5da67
WG
3601</code></pre></div></td></tr></table></div>
3602<table>
3603<thead>
3604<tr>
3605<th>Attribute</th>
3606<th>Description</th>
3607</tr>
3608</thead>
3609<tbody>
3610<tr>
57bba3cc 3611<td><code>disabled</code></td>
9aa5da67
WG
3612<td>if <code>true</code>, all checkboxes are disabled</td>
3613</tr>
3614<tr>
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>
3617</tr>
3618<tr>
3619<td><code>name</code></td>
3620<td><code>name</code> attribute of the <code>input</code> checkbox element</td>
3621</tr>
3622<tr>
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>
3625</tr>
3626<tr>
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>
3629</tr>
3630<tr>
3631<td><code>selected</code></td>
3632<td>current selected value(s)</td>
3633</tr>
3634<tr>
3635<td><code>separator</code></td>
3636<td>separator between the different checkboxes in the generated output; empty string by default</td>
3637</tr>
3638<tr>
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>
3641</tr>
3642</tbody>
3643</table>
db9f8960 3644<h2 id="htmloptions"><code>{htmlOptions}</code><a class="headerlink" href="#htmloptions" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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">&#39;foo&#39;</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>
9aa5da67
WG
3652
3653<span class="x">&lt;select name=&quot;bar&quot;&gt;</span>
3654<span class="x"> &lt;option value=&quot;&quot;</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">&gt;</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">&lt;/option&gt;</span>
c708394c 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>
9aa5da67
WG
3656<span class="x">&lt;/select&gt;</span>
3657</code></pre></div></td></tr></table></div>
3658<table>
3659<thead>
3660<tr>
3661<th>Attribute</th>
3662<th>Description</th>
3663</tr>
3664</thead>
3665<tbody>
3666<tr>
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>
3669</tr>
3670<tr>
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>
3673</tr>
3674<tr>
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>
3677</tr>
3678<tr>
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>
3681</tr>
3682<tr>
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>
3685</tr>
3686<tr>
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>
3689</tr>
3690<tr>
3691<td><code>selected</code></td>
3692<td>current selected value(s)</td>
3693</tr>
3694</tbody>
3695</table>
3696<p>All additional attributes are added as attributes of the <code>select</code> HTML element.</p>
db9f8960 3697<h2 id="implode"><code>{implode}</code><a class="headerlink" href="#implode" title="Permanent link">#</a></h2>
9aa5da67 3698<p><code>implodes</code> transforms an array into a string and prints it.</p>
c708394c 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">&quot;;&quot;</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>
9aa5da67
WG
3700</code></pre></div></td></tr></table></div>
3701<table>
3702<thead>
3703<tr>
3704<th>Attribute</th>
3705<th>Description</th>
3706</tr>
3707</thead>
3708<tbody>
3709<tr>
3710<td><code>from</code></td>
3711<td>array with the imploded values</td>
3712</tr>
3713<tr>
3714<td><code>glue</code></td>
3715<td>separator between the different array values; <code>', '</code> by default</td>
3716</tr>
3717<tr>
3718<td><code>item</code></td>
3719<td>template variable name where the current array value is stored during the iteration</td>
3720</tr>
3721<tr>
3722<td><code>key</code></td>
3723<td>optional template variable name where the current array key is stored during the iteration</td>
3724</tr>
3725</tbody>
3726</table>
db9f8960 3727<h2 id="ipsearch"><code>|ipSearch</code><a class="headerlink" href="#ipsearch" title="Permanent link">#</a></h2>
9aa5da67 3728<p><code>ipSearch</code> generates a link to search for an IP address.</p>
c708394c 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">&quot;127.0.0.1&quot;</span><span class="o">|</span><span class="na">ipSearch</span><span class="cp">}</span>
9aa5da67 3730</code></pre></div></td></tr></table></div>
db9f8960 3731<h2 id="js"><code>{js}</code><a class="headerlink" href="#js" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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">&#39;wbb&#39;</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;WBB&#39;</span><span class="cp">}</span><span class="x"> </span><span class="cp">{</span><span class="c">* generates &#39;http://example.com/js/WBB.js&#39; *</span><span class="cp">}</span>
9aa5da67 3749
c708394c
WG
3750<span class="cp">{</span><span class="nf">js</span> <span class="na">application</span><span class="o">=</span><span class="s1">&#39;wcf&#39;</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;WCF.User&#39;</span> <span class="na">bundle</span><span class="o">=</span><span class="s1">&#39;WCF.Combined&#39;</span><span class="cp">}</span>
3751<span class="x"> </span><span class="cp">{</span><span class="c">* generates &#39;http://example.com/wcf/js/WCF.User.js&#39; if ENABLE_DEBUG_MODE=1 *</span><span class="cp">}</span>
3752<span class="x"> </span><span class="cp">{</span><span class="c">* generates &#39;http://example.com/wcf/js/WCF.Combined.min.js&#39; if ENABLE_DEBUG_MODE=0 *</span><span class="cp">}</span>
9aa5da67 3753
c708394c
WG
3754<span class="cp">{</span><span class="nf">js</span> <span class="na">application</span><span class="o">=</span><span class="s1">&#39;wcf&#39;</span> <span class="na">lib</span><span class="o">=</span><span class="s1">&#39;jquery&#39;</span><span class="cp">}</span>
3755<span class="x"> </span><span class="cp">{</span><span class="c">* generates &#39;http://example.com/wcf/js/3rdParty/jquery.js&#39; *</span><span class="cp">}</span>
9aa5da67 3756
c708394c
WG
3757<span class="cp">{</span><span class="nf">js</span> <span class="na">application</span><span class="o">=</span><span class="s1">&#39;wcf&#39;</span> <span class="na">lib</span><span class="o">=</span><span class="s1">&#39;jquery-ui&#39;</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;awesomeWidget&#39;</span><span class="cp">}</span>
3758<span class="x"> </span><span class="cp">{</span><span class="c">* generates &#39;http://example.com/wcf/js/3rdParty/jquery-ui/awesomeWidget.js&#39; *</span><span class="cp">}</span>
9aa5da67 3759
c708394c
WG
3760<span class="cp">{</span><span class="nf">js</span> <span class="na">application</span><span class="o">=</span><span class="s1">&#39;wcf&#39;</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;WCF.User&#39;</span> <span class="na">bundle</span><span class="o">=</span><span class="s1">&#39;WCF.Combined&#39;</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 &#39;http://example.com/wcf/js/WCF.User.js&#39; if ENABLE_DEBUG_MODE=1 *</span><span class="cp">}</span>
3762<span class="x"> </span><span class="cp">{</span><span class="c">* generates &#39;http://example.com/wcf/js/WCF.Combined.min.js&#39; (ENABLE_DEBUG_MODE=0 *</span><span class="cp">}</span>
3763<span class="x"> </span><span class="cp">{</span><span class="c">* generates &#39;http://example.com/wcf/js/WCF.Combined.tiny.min.js&#39; if ENABLE_DEBUG_MODE=0 and VISITOR_USE_TINY_BUILD=1 *</span><span class="cp">}</span>
9aa5da67 3764</code></pre></div></td></tr></table></div>
db9f8960 3765<h2 id="jslang"><code>{jslang}</code><a class="headerlink" href="#jslang" title="Permanent link">#</a></h2>
9aa5da67
WG
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([&#39;Language&#39;, /* … */], 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">&#39;app.foo.bar&#39;</span><span class="o">:</span> <span class="s1">&#39;{jslang}app.foo.bar{/jslang}&#39;</span><span class="o">,</span>
3776 <span class="cp">}</span><span class="o">);</span>
3777
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>
cbb4b77d 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>
9aa5da67
WG
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">&lt;script&gt;</span>
3786<span class="x">let data = </span><span class="cp">{</span> <span class="s2">&quot;title&quot;</span><span class="o">:</span> <span class="cp">{</span><span class="o">@</span><span class="nv">$foo</span><span class="o">-&gt;</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">&lt;/script&gt;</span>
3788</code></pre></div></td></tr></table></div>
71ef52e2
WG
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.
3791This plugin only supports static phrase names.
3792If 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">&lt;script data-relocate=&quot;true&quot;&gt;</span>
3798<span class="cp">{</span><span class="nf">jsphrase</span> <span class="na">name</span><span class="o">=</span><span class="s1">&#39;app.foo.bar&#39;</span><span class="cp">}</span>
3799
3800<span class="x">// …</span>
3801<span class="x">&lt;/script&gt;</span>
3802</code></pre></div></td></tr></table></div>
db9f8960 3803<h2 id="lang"><code>{lang}</code><a class="headerlink" href="#lang" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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>
9aa5da67 3812
c708394c 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>
9aa5da67 3814
c708394c 3815<span class="cp">{</span><span class="nf">lang</span> <span class="na">foo</span><span class="o">=</span><span class="s1">&#39;baz&#39;</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>
9aa5da67 3816
c708394c 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>
9aa5da67
WG
3818</code></pre></div></td></tr></table></div>
3819<table>
3820<thead>
3821<tr>
3822<th>Attribute</th>
3823<th>Description</th>
3824</tr>
3825</thead>
3826<tbody>
3827<tr>
3828<td><code>__encode</code></td>
3829<td>if <code>true</code>, the output will be passed through <code>StringUtil::encodeHTML()</code></td>
3830</tr>
3831<tr>
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>
3834</tr>
3835<tr>
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>
3838</tr>
3839</tbody>
3840</table>
3841<p>All additional attributes are available when parsing the language item.</p>
db9f8960 3842<h2 id="language"><code>|language</code><a class="headerlink" href="#language" title="Permanent link">#</a></h2>
9aa5da67
WG
3843<p><code>language</code> replaces a language items with its value.
3844If the template variable <code>__language</code> exists, this language object will be used instead of <code>WCF::getLanguage()</code>.
3845This 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>
c708394c 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>
9aa5da67 3850
c708394c 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>
9aa5da67 3852</code></pre></div></td></tr></table></div>
db9f8960 3853<h2 id="link"><code>{link}</code><a class="headerlink" href="#link" title="Permanent link">#</a></h2>
9aa5da67
WG
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">&lt;a href=&quot;</span><span class="cp">{</span><span class="nf">link</span> <span class="na">controller</span><span class="o">=</span><span class="s1">&#39;FooList&#39;</span> <span class="na">application</span><span class="o">=</span><span class="s1">&#39;bar&#39;</span><span class="cp">}</span><span class="x">param1=2&amp;param2=A</span><span class="cp">{</span><span class="nf">/link</span><span class="cp">}</span><span class="x">&quot;&gt;Foo&lt;/a&gt;</span>
3856</code></pre></div></td></tr></table></div>
3857<table>
3858<thead>
3859<tr>
3860<th>Attribute</th>
3861<th>Description</th>
3862</tr>
3863</thead>
3864<tbody>
3865<tr>
3866<td><code>application</code></td>
3867<td>abbreviation of the application the controller belongs to; <code>wcf</code> by default</td>
3868</tr>
3869<tr>
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>
3872</tr>
3873<tr>
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>
3876</tr>
3877<tr>
3878<td><code>isEmail</code></td>
3879<td>sets <code>encode=false</code> and forces links to link to the frontend</td>
3880</tr>
3881</tbody>
3882</table>
3883<p>Additional attributes are passed to <code>LinkHandler::getLink()</code>.</p>
db9f8960 3884<h2 id="newlinetobreak"><code>|newlineToBreak</code><a class="headerlink" href="#newlinetobreak" title="Permanent link">#</a></h2>
9aa5da67 3885<p><code>newlineToBreak</code> transforms newlines into HTML <code>&lt;br&gt;</code> elements after encoding the content via <code>wcf\util\StringUtil::encodeHTML()</code>.</p>
c708394c 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>
9aa5da67
WG
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>.
3890For 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>
db9f8960 3891<h2 id="page"><code>{page}</code><a class="headerlink" href="#page" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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>
9aa5da67 3900
c708394c 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>
9aa5da67 3902
c708394c 3903<span class="cp">{</span><span class="nf">page</span> <span class="na">language</span><span class="o">=</span><span class="s1">&#39;de&#39;</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>
9aa5da67 3904
c708394c 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>
9aa5da67
WG
3906</code></pre></div></td></tr></table></div>
3907<table>
3908<thead>
3909<tr>
3910<th>Attribute</th>
3911<th>Description</th>
3912</tr>
3913</thead>
3914<tbody>
3915<tr>
3916<td><code>pageID</code></td>
3917<td>unique id of the page (cannot be used together with a page identifier as value)</td>
3918</tr>
3919<tr>
3920<td><code>languageID</code></td>
3921<td>id of the page language (cannot be used together with <code>language</code>)</td>
3922</tr>
3923<tr>
3924<td><code>language</code></td>
3925<td>language code of the page language (cannot be used together with <code>languageID</code>)</td>
3926</tr>
3927</tbody>
3928</table>
db9f8960
WG
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>
3932</div>
9aa5da67
WG
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>
c708394c 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">&#39;FooList&#39;</span> <span class="na">link</span><span class="o">=</span><span class="s2">&quot;pageNo=%d&quot;</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>
9aa5da67 3937
c708394c 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>
9aa5da67
WG
3939</code></pre></div></td></tr></table></div>
3940<table>
3941<thead>
3942<tr>
3943<th>Attribute</th>
3944<th>Description</th>
3945</tr>
3946</thead>
3947<tbody>
3948<tr>
3949<td><code>assign</code></td>
3950<td>optional name of the template variable the pagination is assigned to</td>
3951</tr>
3952<tr>
3953<td><code>controller</code></td>
3954<td>controller name of the generated links</td>
3955</tr>
3956<tr>
3957<td><code>link</code></td>
3958<td>additional link parameter where <code>%d</code> will be replaced with the relevant page number</td>
3959</tr>
3960<tr>
3961<td><code>pages</code></td>
3962<td>maximum number of of pages; by default, the template variable <code>$pages</code> is used</td>
3963</tr>
3964<tr>
3965<td><code>print</code></td>
3966<td>if <code>false</code> and <code>assign=true</code>, the pagination is not printed</td>
3967</tr>
3968<tr>
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>
3971</tr>
3972</tbody>
3973</table>
cbb4b77d 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>
9aa5da67
WG
3975<p><code>phrase</code> replaces a language items with its value.
3976If the template variable <code>__language</code> exists, this language object will be used instead of <code>WCF::getLanguage()</code>.
3977This 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>
c708394c 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>
9aa5da67 3982
c708394c 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>
9aa5da67 3984</code></pre></div></td></tr></table></div>
db9f8960 3985<h2 id="plaintime"><code>|plainTime</code><a class="headerlink" href="#plaintime" title="Permanent link">#</a></h2>
9aa5da67
WG
3986<p><code>plainTime</code> formats a timestamp to include year, month, day, hour, and minutes.
3987The 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>
c708394c 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>
9aa5da67 3989</code></pre></div></td></tr></table></div>
db9f8960 3990<h2 id="plural"><code>{plural}</code><a class="headerlink" href="#plural" title="Permanent link">#</a></h2>
9aa5da67
WG
3991<p><code>plural</code> allows to easily select the correct plural form of a phrase based on a given <code>value</code>.
3992The 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>.
3994It is automatically formatted using <code>StringUtil::formatNumeric</code>.</p>
3995<p>English:</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.
3997They 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>
c708394c 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>
9aa5da67
WG
4002<span class="x">&lt;h1&gt;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">&#39;World&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;Worlds&#39;</span><span class="cp">}</span><span class="x">!&lt;/h1&gt;</span>
4003<span class="x">&lt;p&gt;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">&#39;is one world&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;are # worlds&#39;</span><span class="cp">}</span><span class="x">!&lt;/p&gt;</span>
4004<span class="x">&lt;p&gt;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">&#39;is # world&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;are # worlds&#39;</span><span class="cp">}</span><span class="x">!&lt;/p&gt;</span>
4005</code></pre></div></td></tr></table></div></p>
4006<p>German:
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>
c708394c 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>
9aa5da67
WG
4011<span class="x">&lt;h1&gt;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">&#39;Welt&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;Welten&#39;</span><span class="cp">}</span><span class="x">!&lt;/h1&gt;</span>
4012<span class="x">&lt;p&gt;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">&#39;eine Welt&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;# Welten&#39;</span><span class="cp">}</span><span class="x">!&lt;/p&gt;</span>
4013<span class="x">&lt;p&gt;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">&#39;# Welt&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;# Welten&#39;</span><span class="cp">}</span><span class="x">!&lt;/p&gt;</span>
4014</code></pre></div></td></tr></table></div></p>
4015<p>Romanian:</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>
c708394c 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>
9aa5da67
WG
4021<span class="x">&lt;h1&gt;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">&#39;lume&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;lumi&#39;</span><span class="cp">}</span><span class="x">!&lt;/h1&gt;</span>
4022<span class="x">&lt;p&gt;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">&#39;o lume&#39;</span> <span class="na">few</span><span class="o">=</span><span class="s1">&#39;# lumi&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;# de lumi&#39;</span><span class="cp">}</span><span class="x">!&lt;/p&gt;</span>
4023<span class="x">&lt;p&gt;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">&#39;# lume&#39;</span> <span class="na">few</span><span class="o">=</span><span class="s1">&#39;# lumi&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;# de lumi&#39;</span><span class="cp">}</span><span class="x">!&lt;/p&gt;</span>
4024</code></pre></div></td></tr></table></div></p>
4025<p>Russian:</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>
c708394c 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>
9aa5da67
WG
4030<span class="x">&lt;h1&gt;Привет </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">&#39;мир&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;миры&#39;</span><span class="cp">}</span><span class="x">!&lt;/h1&gt;</span>
4031<span class="x">&lt;p&gt;Есть </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">&#39;мир&#39;</span> <span class="na">one</span><span class="o">=</span><span class="s1">&#39;# мир&#39;</span> <span class="na">few</span><span class="o">=</span><span class="s1">&#39;# мира&#39;</span> <span class="na">many</span><span class="o">=</span><span class="s1">&#39;# миров&#39;</span> <span class="na">other</span><span class="o">=</span><span class="s1">&#39;# миров&#39;</span><span class="cp">}</span><span class="x">!&lt;/p&gt;</span>
4032</code></pre></div></td></tr></table></div></p>
4033<table>
4034<thead>
4035<tr>
4036<th>Attribute</th>
4037<th>Description</th>
4038</tr>
4039</thead>
4040<tbody>
4041<tr>
4042<td>value</td>
4043<td>The value that is used to select the proper phrase.</td>
4044</tr>
4045<tr>
4046<td>other</td>
4047<td>The phrase that is used when no other selector matches.</td>
4048</tr>
4049<tr>
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>
4052</tr>
4053<tr>
4054<td>Any Integer</td>
4055<td>The phrase that is used when <code>value</code> is that exact integer.</td>
4056</tr>
4057</tbody>
4058</table>
db9f8960 4059<h2 id="prepend"><code>{prepend}</code><a class="headerlink" href="#prepend" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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">&#39;newValue&#39;</span><span class="cp">}</span>
9aa5da67 4068
c708394c 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 &#39;newValue *</span><span class="cp">}</span>
9aa5da67 4070
c708394c 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">&#39;2&#39;</span><span class="cp">}</span>
9aa5da67 4072
c708394c 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 &#39;2newValue&#39; *</span><span class="cp">}</span>
9aa5da67
WG
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.
4076If <code>prepend</code> is used on an array as the variable, the value is prepended to all elements of the array.</p>
db9f8960 4077<h2 id="shortunit"><code>|shortUnit</code><a class="headerlink" href="#shortunit" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c
WG
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>
9aa5da67 4082</code></pre></div></td></tr></table></div>
db9f8960 4083<h2 id="tablewordwrap"><code>|tableWordwrap</code><a class="headerlink" href="#tablewordwrap" title="Permanent link">#</a></h2>
9aa5da67 4084<p><code>tableWordwrap</code> inserts zero width spaces every 30 characters in words longer than 30 characters.</p>
c708394c 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>
9aa5da67 4086</code></pre></div></td></tr></table></div>
db9f8960 4087<h2 id="time"><code>|time</code><a class="headerlink" href="#time" title="Permanent link">#</a></h2>
9aa5da67 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>
c708394c 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 &#39;&lt;time&gt;&#39; element *</span><span class="cp">}</span>
9aa5da67 4090</code></pre></div></td></tr></table></div>
db9f8960 4091<h2 id="truncate"><code>|truncate</code><a class="headerlink" href="#truncate" title="Permanent link">#</a></h2>
9aa5da67
WG
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>
c708394c 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>
9aa5da67 4096
c708394c 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">&#39;_&#39;</span><span class="o">:</span><span class="kc">true</span><span class="cp">}</span>
9aa5da67
WG
4098</code></pre></div></td></tr></table></div>
4099<table>
4100<thead>
4101<tr>
4102<th>Parameter Number</th>
4103<th>Description</th>
4104</tr>
4105</thead>
4106<tbody>
4107<tr>
4108<td>0</td>
4109<td>truncated string</td>
4110</tr>
4111<tr>
4112<td>1</td>
4113<td>truncated length; <code>80</code> by default</td>
4114</tr>
4115<tr>
4116<td>2</td>
4117<td>ellipsis symbol; <code>wcf\util\StringUtil::HELLIP</code> by default</td>
4118</tr>
4119<tr>
4120<td>3</td>
4121<td>if <code>true</code>, words can be broken up in the middle; <code>false</code> by default</td>
4122</tr>
4123</tbody>
4124</table>
db9f8960 4125<h2 id="user"><code>{user}</code><a class="headerlink" href="#user" title="Permanent link">#</a></h2>
9aa5da67
WG
4126<p><code>user</code> generates links to user profiles.
4127The mandatory <code>object</code> parameter requires an instances of <code>UserProfile</code>.
4128The optional <code>type</code> parameter is responsible for what the generated link contains:</p>
4129<ul>
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>
4134</ul>
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>
4137<p>Examples:</p>
c708394c 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>
9aa5da67
WG
4139</code></pre></div></td></tr></table></div>
4140<p>generates</p>
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">&lt;a href=&quot;</span><span class="cp">{</span><span class="nv">$user</span><span class="o">-&gt;</span><span class="na">getLink</span><span class="o">()</span><span class="cp">}</span><span class="x">&quot; data-object-id=&quot;</span><span class="cp">{</span><span class="nv">$user</span><span class="o">-&gt;</span><span class="na">userID</span><span class="cp">}</span><span class="x">&quot; class=&quot;userLink&quot;&gt;</span><span class="cp">{</span><span class="o">@</span><span class="nv">$user</span><span class="o">-&gt;</span><span class="na">getFormattedUsername</span><span class="o">()</span><span class="cp">}</span><span class="x">&lt;/a&gt;</span>
4142</code></pre></div></td></tr></table></div>
4143<p>and</p>
c708394c 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">&#39;avatar48&#39;</span> <span class="na">foo</span><span class="o">=</span><span class="s1">&#39;bar&#39;</span><span class="cp">}</span>
9aa5da67
WG
4145</code></pre></div></td></tr></table></div>
4146<p>generates</p>
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">&lt;a href=&quot;</span><span class="cp">{</span><span class="nv">$user</span><span class="o">-&gt;</span><span class="na">getLink</span><span class="o">()</span><span class="cp">}</span><span class="x">&quot; foo=&quot;bar&quot;&gt;</span><span class="cp">{</span><span class="o">@</span><span class="nv">$object</span><span class="o">-&gt;</span><span class="na">getAvatar</span><span class="o">()-&gt;</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">&lt;/a&gt;</span>
4148</code></pre></div></td></tr></table></div>
4149
4150 <hr>
4151<div class="md-source-file">
4152 <small>
4153
4154 Last update:
c338dfa7 4155 2023-01-25
9aa5da67
WG
4156
4157 </small>
4158</div>
4159
a06fd3b1
WG
4160
4161
4162
7f9945cf
WG
4163
4164
4165 </article>
4166 </div>
4167
4168
9aa5da67
WG
4169 </div>
4170
4171 </main>
4172
4173 <footer class="md-footer">
4174
9aa5da67
WG
4175 <div class="md-footer-meta md-typeset">
4176 <div class="md-footer-meta__inner md-grid">
4177 <div class="md-copyright">
4178
4179 <div class="md-copyright__highlight">
4180 Copyright © 2020 WoltLab GmbH
4181 </div>
4182
4183
4184 Made with
4185 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
4186 Material for MkDocs
4187 </a>
4188
4189</div>
4190
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>
4194</div>
4195
4196 </div>
4197 </div>
4198</footer>
4199
4200 </div>
4201 <div class="md-dialog" data-md-component="dialog">
4202 <div class="md-dialog__inner md-typeset"></div>
4203 </div>
a06fd3b1 4204
6f2e8f13 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>
9aa5da67
WG
4206
4207
6f2e8f13 4208 <script src="../../assets/javascripts/bundle.2a6f1dda.min.js"></script>
9aa5da67
WG
4209
4210
4211 </body>
4212</html>