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