Deployed 3bf25ab to 5.4 with MkDocs 1.1.2 and mike 0.5.5
[GitHub/WoltLab/woltlab.github.io.git] / latest / view / templates / index.html
CommitLineData
0c5338dd
TD
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
12 <link rel="shortcut icon" href="../../assets/default.favicon.ico">
fb88dc6e 13 <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.0.5">
0c5338dd
TD
14
15
16
17 <title>Templates - WoltLab Suite Documentation</title>
18
19
20
fb88dc6e 21 <link rel="stylesheet" href="../../assets/stylesheets/main.77f3fd56.min.css">
0c5338dd
TD
22
23
24 <link rel="stylesheet" href="../../assets/stylesheets/palette.7fa14f5b.min.css">
25
26
27
28 <meta name="theme-color" content="#009485">
29
30
31
32
33
fd8430cb
WG
34
35
0c5338dd
TD
36
37
38 <link rel="stylesheet" href="../../stylesheets/extra.css">
39
40
41
42
43
44 </head>
45
46
47
48
49
50
51
52 <body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent="">
53
54
55
56 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
57 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
58 <label class="md-overlay" for="__drawer"></label>
59 <div data-md-component="skip">
60
61
62 <a href="#templates" class="md-skip">
63 Skip to content
64 </a>
65
66 </div>
67 <div data-md-component="announce">
68
69 <aside class="md-announce">
70 <div class="md-announce__inner md-grid md-typeset">
71
72 <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a>
73
74 </div>
75 </aside>
76
77 </div>
78
79
80
81<header class="md-header" data-md-component="header">
82 <nav class="md-header__inner md-grid" aria-label="Header">
83 <a href="../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation">
84
85 <img src="../../assets/logo.png" alt="logo">
86
87 </a>
88 <label class="md-header__button md-icon" for="__drawer">
89 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
90 </label>
91 <div class="md-header__title" data-md-component="header-title">
92 <div class="md-header__ellipsis">
93 <div class="md-header__topic">
94 <span class="md-ellipsis">
95 WoltLab Suite Documentation
96 </span>
97 </div>
98 <div class="md-header__topic" data-md-component="header-topic">
99 <span class="md-ellipsis">
100
101 Templates
102
103 </span>
104 </div>
105 </div>
106 </div>
107 <div class="md-header__options">
108
109 </div>
110
111 <label class="md-header__button md-icon" for="__search">
112 <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>
113 </label>
114
115<div class="md-search" data-md-component="search" role="dialog">
116 <label class="md-search__overlay" for="__search"></label>
117 <div class="md-search__inner" role="search">
118 <form class="md-search__form" name="search">
119 <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" data-md-state="active" required>
120 <label class="md-search__icon 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 <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>
123 </label>
124 <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
125 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.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>
126 </button>
127 </form>
128 <div class="md-search__output">
129 <div class="md-search__scrollwrap" data-md-scrollfix>
130 <div class="md-search-result" data-md-component="search-result">
131 <div class="md-search-result__meta">
132 Initializing search
133 </div>
134 <ol class="md-search-result__list"></ol>
135 </div>
136 </div>
137 </div>
138 </div>
139</div>
140
141
7124f4cb
WG
142 <div class="md-header__source">
143
144<a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
145 <div class="md-source__icon md-icon">
146
147 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05L244 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>
148 </div>
149 <div class="md-source__repository">
150 GitHub
151 </div>
152</a>
153 </div>
154
0c5338dd
TD
155 </nav>
156</header>
157
158 <div class="md-container" data-md-component="container">
159
160
161
162
163 <main class="md-main" data-md-component="main">
164 <div class="md-main__inner md-grid">
165
166
167
168 <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
169 <div class="md-sidebar__scrollwrap">
170 <div class="md-sidebar__inner">
171
172
173
174
175
176<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
177 <label class="md-nav__title" for="__drawer">
178 <a href="../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation">
179
180 <img src="../../assets/logo.png" alt="logo">
181
182 </a>
183 WoltLab Suite Documentation
184 </label>
185
7124f4cb
WG
186 <div class="md-nav__source">
187
188<a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
189 <div class="md-source__icon md-icon">
190
191 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05L244 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>
192 </div>
193 <div class="md-source__repository">
194 GitHub
195 </div>
196</a>
197 </div>
198
0c5338dd
TD
199 <ul class="md-nav__list" data-md-scrollfix>
200
201
202
203
204
205
206
207
208 <li class="md-nav__item">
209 <a href="../../getting-started/" class="md-nav__link">
210 Getting Started
211 </a>
212 </li>
213
214
215
216
217
218
219
220
221
222
223
224 <li class="md-nav__item md-nav__item--nested">
225
226
227 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
228
229 <label class="md-nav__link" for="__nav_2">
230 PHP API
231 <span class="md-nav__icon md-icon"></span>
232 </label>
233 <nav class="md-nav" aria-label="PHP API" data-md-level="1">
234 <label class="md-nav__title" for="__nav_2">
235 <span class="md-nav__icon md-icon"></span>
236 PHP API
237 </label>
238 <ul class="md-nav__list" data-md-scrollfix>
239
240
241
242
243
244 <li class="md-nav__item">
245 <a href="../../php/pages/" class="md-nav__link">
246 Pages
247 </a>
248 </li>
249
250
251
252
253
254
255
256 <li class="md-nav__item">
257 <a href="../../php/database-objects/" class="md-nav__link">
258 Database Objects
259 </a>
260 </li>
261
262
263
264
265
266
267
268 <li class="md-nav__item">
269 <a href="../../php/database-access/" class="md-nav__link">
270 Database Access
271 </a>
272 </li>
273
274
275
276
277
278
279
280 <li class="md-nav__item">
281 <a href="../../php/exceptions/" class="md-nav__link">
282 Exceptions
283 </a>
284 </li>
285
286
287
288
289
290
291
292
293 <li class="md-nav__item md-nav__item--nested">
294
295
296 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" >
297
298 <label class="md-nav__link" for="__nav_2_5">
299 API
300 <span class="md-nav__icon md-icon"></span>
301 </label>
302 <nav class="md-nav" aria-label="API" data-md-level="2">
303 <label class="md-nav__title" for="__nav_2_5">
304 <span class="md-nav__icon md-icon"></span>
305 API
306 </label>
307 <ul class="md-nav__list" data-md-scrollfix>
308
309
310
311
312
313 <li class="md-nav__item">
314 <a href="../../php/api/caches/" class="md-nav__link">
315 Caches
316 </a>
317 </li>
318
319
320
321
322
323
324
325 <li class="md-nav__item">
326 <a href="../../php/api/comments/" class="md-nav__link">
327 Comments
328 </a>
329 </li>
330
331
332
333
334
335
336
337 <li class="md-nav__item">
338 <a href="../../php/api/cronjobs/" class="md-nav__link">
339 Cronjobs
340 </a>
341 </li>
342
343
344
345
346
347
348
349 <li class="md-nav__item">
350 <a href="../../php/api/events/" class="md-nav__link">
351 Events
352 </a>
353 </li>
354
355
356
357
358
359
360
361
362 <li class="md-nav__item md-nav__item--nested">
363
364
365 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" >
366
367 <label class="md-nav__link" for="__nav_2_5_5">
368 Form Builder
369 <span class="md-nav__icon md-icon"></span>
370 </label>
371 <nav class="md-nav" aria-label="Form Builder" data-md-level="3">
372 <label class="md-nav__title" for="__nav_2_5_5">
373 <span class="md-nav__icon md-icon"></span>
374 Form Builder
375 </label>
376 <ul class="md-nav__list" data-md-scrollfix>
377
378
379
380
381
382 <li class="md-nav__item">
383 <a href="../../php/api/form_builder/overview/" class="md-nav__link">
384 Overview
385 </a>
386 </li>
387
388
389
390
391
392
393
394 <li class="md-nav__item">
395 <a href="../../php/api/form_builder/structure/" class="md-nav__link">
396 Structure
397 </a>
398 </li>
399
400
401
402
403
404
405
406 <li class="md-nav__item">
407 <a href="../../php/api/form_builder/form_fields/" class="md-nav__link">
408 Fields
409 </a>
410 </li>
411
412
413
414
415
416
417
418 <li class="md-nav__item">
419 <a href="../../php/api/form_builder/validation_data/" class="md-nav__link">
420 Validation and Data
421 </a>
422 </li>
423
424
425
426
427
428
429
430 <li class="md-nav__item">
431 <a href="../../php/api/form_builder/dependencies/" class="md-nav__link">
432 Dependencies
433 </a>
434 </li>
435
436
437
438 </ul>
439 </nav>
440 </li>
441
442
443
444
445
446
447
448 <li class="md-nav__item">
449 <a href="../../php/api/package_installation_plugins/" class="md-nav__link">
450 Package Installation Plugins
451 </a>
452 </li>
453
454
455
456
457
458
459
460 <li class="md-nav__item">
461 <a href="../../php/api/user_activity_points/" class="md-nav__link">
462 User Activity Points
463 </a>
464 </li>
465
466
467
468
469
470
471
472 <li class="md-nav__item">
473 <a href="../../php/api/user_notifications/" class="md-nav__link">
474 User Notifications
475 </a>
476 </li>
477
478
479
480
481
482
483
484 <li class="md-nav__item">
485 <a href="../../php/api/sitemaps/" class="md-nav__link">
486 Sitemaps
487 </a>
488 </li>
489
490
491
492 </ul>
493 </nav>
494 </li>
495
496
497
498
499
500
501
502 <li class="md-nav__item">
503 <a href="../../php/code-style/" class="md-nav__link">
504 Code Style
505 </a>
506 </li>
507
508
509
510
511
512
513
514 <li class="md-nav__item">
515 <a href="../../php/apps/" class="md-nav__link">
516 Apps
517 </a>
518 </li>
519
520
521
522
523
524
525
526 <li class="md-nav__item">
527 <a href="../../php/gdpr/" class="md-nav__link">
528 GDPR
529 </a>
530 </li>
531
532
533
534 </ul>
535 </nav>
536 </li>
537
538
539
540
541
542
543
544
545
546
547
548
549
550 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
551
552
553 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" checked>
554
555 <label class="md-nav__link" for="__nav_3">
556 Languages, Templates & CSS
557 <span class="md-nav__icon md-icon"></span>
558 </label>
559 <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1">
560 <label class="md-nav__title" for="__nav_3">
561 <span class="md-nav__icon md-icon"></span>
562 Languages, Templates & CSS
563 </label>
564 <ul class="md-nav__list" data-md-scrollfix>
565
566
567
568
569
570 <li class="md-nav__item">
571 <a href="../languages/" class="md-nav__link">
572 Languages
573 </a>
574 </li>
575
576
577
578
579
580
581
582
583
584 <li class="md-nav__item md-nav__item--active">
585
586 <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
587
588
589
590
591 <label class="md-nav__link md-nav__link--active" for="__toc">
592 Templates
593 <span class="md-nav__icon md-icon"></span>
594 </label>
595
596 <a href="./" class="md-nav__link md-nav__link--active">
597 Templates
598 </a>
599
600
601<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
602
603
604
605
606
607 <label class="md-nav__title" for="__toc">
608 <span class="md-nav__icon md-icon"></span>
609 Table of contents
610 </label>
611 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
612
613 <li class="md-nav__item">
614 <a href="#template-types-and-conventions" class="md-nav__link">
615 Template Types and Conventions
616 </a>
617
618</li>
619
620 <li class="md-nav__item">
621 <a href="#installing-templates" class="md-nav__link">
622 Installing Templates
623 </a>
624
625</li>
626
627 <li class="md-nav__item">
628 <a href="#base-templates" class="md-nav__link">
629 Base Templates
630 </a>
631
632 <nav class="md-nav" aria-label="Base Templates">
633 <ul class="md-nav__list">
634
635 <li class="md-nav__item">
636 <a href="#frontend" class="md-nav__link">
637 Frontend
638 </a>
639
640</li>
641
642 <li class="md-nav__item">
643 <a href="#backend" class="md-nav__link">
644 Backend
645 </a>
646
647</li>
648
649 </ul>
650 </nav>
651
652</li>
653
654 <li class="md-nav__item">
655 <a href="#common-template-components" class="md-nav__link">
656 Common Template Components
657 </a>
658
659 <nav class="md-nav" aria-label="Common Template Components">
660 <ul class="md-nav__list">
661
662 <li class="md-nav__item">
663 <a href="#forms" class="md-nav__link">
664 Forms
665 </a>
666
667</li>
668
669 <li class="md-nav__item">
670 <a href="#tab-menus" class="md-nav__link">
671 Tab Menus
672 </a>
673
674</li>
675
676 </ul>
677 </nav>
678
679</li>
680
681 <li class="md-nav__item">
682 <a href="#template-scripting" class="md-nav__link">
683 Template Scripting
684 </a>
685
686 <nav class="md-nav" aria-label="Template Scripting">
687 <ul class="md-nav__list">
688
689 <li class="md-nav__item">
690 <a href="#template-variables" class="md-nav__link">
691 Template Variables
692 </a>
693
694 <nav class="md-nav" aria-label="Template Variables">
695 <ul class="md-nav__list">
696
697 <li class="md-nav__item">
698 <a href="#modifiers" class="md-nav__link">
699 Modifiers
700 </a>
701
702</li>
703
704 <li class="md-nav__item">
705 <a href="#system-template-variable" class="md-nav__link">
706 System Template Variable
707 </a>
708
709</li>
710
711 </ul>
712 </nav>
713
714</li>
715
716 <li class="md-nav__item">
717 <a href="#comments" class="md-nav__link">
718 Comments
719 </a>
720
721</li>
722
723 <li class="md-nav__item">
724 <a href="#conditions" class="md-nav__link">
725 Conditions
726 </a>
727
728</li>
729
730 <li class="md-nav__item">
731 <a href="#foreach-loops" class="md-nav__link">
732 Foreach Loops
733 </a>
734
735</li>
736
737 <li class="md-nav__item">
738 <a href="#including-other-templates" class="md-nav__link">
739 Including Other Templates
740 </a>
741
742</li>
743
744 <li class="md-nav__item">
745 <a href="#template-plugins" class="md-nav__link">
746 Template Plugins
747 </a>
748
749</li>
750
751 </ul>
752 </nav>
753
754</li>
755
756 </ul>
757
758</nav>
759
760 </li>
761
762
763
764
765
766
767
768 <li class="md-nav__item">
769 <a href="../css/" class="md-nav__link">
770 CSS
771 </a>
772 </li>
773
774
775
776 </ul>
777 </nav>
778 </li>
779
780
781
782
783
784
785
786
787
788
789
790 <li class="md-nav__item md-nav__item--nested">
791
792
793 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
794
795 <label class="md-nav__link" for="__nav_4">
796 JavaScript API
797 <span class="md-nav__icon md-icon"></span>
798 </label>
799 <nav class="md-nav" aria-label="JavaScript API" data-md-level="1">
800 <label class="md-nav__title" for="__nav_4">
801 <span class="md-nav__icon md-icon"></span>
802 JavaScript API
803 </label>
804 <ul class="md-nav__list" data-md-scrollfix>
805
806
807
808
809
810 <li class="md-nav__item">
811 <a href="../../javascript/general-usage/" class="md-nav__link">
812 General Usage
813 </a>
814 </li>
815
816
817
818
819
820
821
822
823 <li class="md-nav__item md-nav__item--nested">
824
825
826 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_2" type="checkbox" id="__nav_4_2" >
827
828 <label class="md-nav__link" for="__nav_4_2">
829 New API
830 <span class="md-nav__icon md-icon"></span>
831 </label>
832 <nav class="md-nav" aria-label="New API" data-md-level="2">
833 <label class="md-nav__title" for="__nav_4_2">
834 <span class="md-nav__icon md-icon"></span>
835 New API
836 </label>
837 <ul class="md-nav__list" data-md-scrollfix>
838
839
840
841
842
843 <li class="md-nav__item">
844 <a href="../../javascript/new-api_writing-a-module/" class="md-nav__link">
845 Writing a module
846 </a>
847 </li>
848
849
850
851
852
853
854
855 <li class="md-nav__item">
856 <a href="../../javascript/new-api_data-structures/" class="md-nav__link">
857 Data Structures
858 </a>
859 </li>
860
861
862
863
864
865
866
867 <li class="md-nav__item">
868 <a href="../../javascript/new-api_core/" class="md-nav__link">
869 Core Functions
870 </a>
871 </li>
872
873
874
875
876
877
878
879 <li class="md-nav__item">
880 <a href="../../javascript/new-api_dom/" class="md-nav__link">
881 DOM
882 </a>
883 </li>
884
885
886
887
888
889
890
891 <li class="md-nav__item">
892 <a href="../../javascript/new-api_events/" class="md-nav__link">
893 Event Handling
894 </a>
895 </li>
896
897
898
899
900
901
902
903 <li class="md-nav__item">
904 <a href="../../javascript/new-api_ajax/" class="md-nav__link">
905 Ajax
906 </a>
907 </li>
908
909
910
911
912
913
914
915 <li class="md-nav__item">
916 <a href="../../javascript/new-api_dialogs/" class="md-nav__link">
917 Dialogs
918 </a>
919 </li>
920
921
922
923
924
925
926
927 <li class="md-nav__item">
928 <a href="../../javascript/new-api_browser/" class="md-nav__link">
929 Browser and Screen Sizes
930 </a>
931 </li>
932
933
934
935
936
937
938
939 <li class="md-nav__item">
940 <a href="../../javascript/new-api_ui/" class="md-nav__link">
941 User Interface
942 </a>
943 </li>
944
945
946
947 </ul>
948 </nav>
949 </li>
950
951
952
953
954
955
956
957 <li class="md-nav__item">
958 <a href="../../javascript/legacy-api/" class="md-nav__link">
959 Legacy API
960 </a>
961 </li>
962
963
964
965
966
967
968
969 <li class="md-nav__item">
970 <a href="../../javascript/helper-functions/" class="md-nav__link">
971 Helper Functions
972 </a>
973 </li>
974
975
976
977
978
979
980
981 <li class="md-nav__item">
982 <a href="../../javascript/code-snippets/" class="md-nav__link">
983 Code Snippets
984 </a>
985 </li>
986
987
988
989 </ul>
990 </nav>
991 </li>
992
993
994
995
996
997
998
999
1000
1001
1002
1003 <li class="md-nav__item md-nav__item--nested">
1004
1005
1006 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
1007
1008 <label class="md-nav__link" for="__nav_5">
1009 Package Components
1010 <span class="md-nav__icon md-icon"></span>
1011 </label>
1012 <nav class="md-nav" aria-label="Package Components" data-md-level="1">
1013 <label class="md-nav__title" for="__nav_5">
1014 <span class="md-nav__icon md-icon"></span>
1015 Package Components
1016 </label>
1017 <ul class="md-nav__list" data-md-scrollfix>
1018
1019
1020
1021
1022
1023 <li class="md-nav__item">
1024 <a href="../../package/package-xml/" class="md-nav__link">
1025 package.xml
1026 </a>
1027 </li>
1028
1029
1030
1031
1032
1033
1034
1035
1036 <li class="md-nav__item md-nav__item--nested">
1037
1038
1039 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
1040
1041 <label class="md-nav__link" for="__nav_5_2">
1042 PIPs
1043 <span class="md-nav__icon md-icon"></span>
1044 </label>
1045 <nav class="md-nav" aria-label="PIPs" data-md-level="2">
1046 <label class="md-nav__title" for="__nav_5_2">
1047 <span class="md-nav__icon md-icon"></span>
1048 PIPs
1049 </label>
1050 <ul class="md-nav__list" data-md-scrollfix>
1051
1052
1053
1054
1055
1056 <li class="md-nav__item">
1057 <a href="../../package/pip/" class="md-nav__link">
1058 Overview
1059 </a>
1060 </li>
1061
1062
1063
1064
1065
1066
1067
1068 <li class="md-nav__item">
1069 <a href="../../package/pip/acl-option/" class="md-nav__link">
1070 aclOption
1071 </a>
1072 </li>
1073
1074
1075
1076
1077
1078
1079
1080 <li class="md-nav__item">
1081 <a href="../../package/pip/acp-menu/" class="md-nav__link">
1082 acpMenu
1083 </a>
1084 </li>
1085
1086
1087
1088
1089
1090
1091
1092 <li class="md-nav__item">
1093 <a href="../../package/pip/acp-search-provider/" class="md-nav__link">
1094 acpSearchProvider
1095 </a>
1096 </li>
1097
1098
1099
1100
1101
1102
1103
1104 <li class="md-nav__item">
1105 <a href="../../package/pip/acp-template/" class="md-nav__link">
1106 acpTemplate
1107 </a>
1108 </li>
1109
1110
1111
1112
1113
1114
1115
1116 <li class="md-nav__item">
1117 <a href="../../package/pip/bbcode/" class="md-nav__link">
1118 bbcode
1119 </a>
1120 </li>
1121
1122
1123
1124
1125
1126
1127
1128 <li class="md-nav__item">
1129 <a href="../../package/pip/box/" class="md-nav__link">
1130 box
1131 </a>
1132 </li>
1133
1134
1135
1136
1137
1138
1139
1140 <li class="md-nav__item">
1141 <a href="../../package/pip/clipboard-action/" class="md-nav__link">
1142 clipboardAction
1143 </a>
1144 </li>
1145
1146
1147
1148
1149
1150
1151
1152 <li class="md-nav__item">
1153 <a href="../../package/pip/core-object/" class="md-nav__link">
1154 coreObject
1155 </a>
1156 </li>
1157
1158
1159
1160
1161
1162
1163
1164 <li class="md-nav__item">
1165 <a href="../../package/pip/cronjob/" class="md-nav__link">
1166 cronjob
1167 </a>
1168 </li>
1169
1170
1171
1172
1173
1174
1175
1176 <li class="md-nav__item">
1177 <a href="../../package/pip/event-listener/" class="md-nav__link">
1178 eventListener
1179 </a>
1180 </li>
1181
1182
1183
1184
1185
1186
1187
1188 <li class="md-nav__item">
1189 <a href="../../package/pip/file/" class="md-nav__link">
1190 file
1191 </a>
1192 </li>
1193
1194
1195
1196
1197
1198
1199
1200 <li class="md-nav__item">
1201 <a href="../../package/pip/language/" class="md-nav__link">
1202 language
1203 </a>
1204 </li>
1205
1206
1207
1208
1209
1210
1211
1212 <li class="md-nav__item">
1213 <a href="../../package/pip/media-provider/" class="md-nav__link">
1214 mediaProvider
1215 </a>
1216 </li>
1217
1218
1219
1220
1221
1222
1223
1224 <li class="md-nav__item">
1225 <a href="../../package/pip/menu/" class="md-nav__link">
1226 menu
1227 </a>
1228 </li>
1229
1230
1231
1232
1233
1234
1235
1236 <li class="md-nav__item">
1237 <a href="../../package/pip/menu-item/" class="md-nav__link">
1238 menuItem
1239 </a>
1240 </li>
1241
1242
1243
1244
1245
1246
1247
1248 <li class="md-nav__item">
1249 <a href="../../package/pip/object-type/" class="md-nav__link">
1250 objectType
1251 </a>
1252 </li>
1253
1254
1255
1256
1257
1258
1259
1260 <li class="md-nav__item">
1261 <a href="../../package/pip/object-type-definition/" class="md-nav__link">
1262 objectTypeDefinition
1263 </a>
1264 </li>
1265
1266
1267
1268
1269
1270
1271
1272 <li class="md-nav__item">
1273 <a href="../../package/pip/option/" class="md-nav__link">
1274 option
1275 </a>
1276 </li>
1277
1278
1279
1280
1281
1282
1283
1284 <li class="md-nav__item">
1285 <a href="../../package/pip/page/" class="md-nav__link">
1286 page
1287 </a>
1288 </li>
1289
1290
1291
1292
1293
1294
1295
1296 <li class="md-nav__item">
1297 <a href="../../package/pip/pip/" class="md-nav__link">
1298 pip
1299 </a>
1300 </li>
1301
1302
1303
1304
1305
1306
1307
1308 <li class="md-nav__item">
1309 <a href="../../package/pip/script/" class="md-nav__link">
1310 script
1311 </a>
1312 </li>
1313
1314
1315
1316
1317
1318
1319
1320 <li class="md-nav__item">
1321 <a href="../../package/pip/smiley/" class="md-nav__link">
1322 smiley
1323 </a>
1324 </li>
1325
1326
1327
1328
1329
1330
1331
1332 <li class="md-nav__item">
1333 <a href="../../package/pip/sql/" class="md-nav__link">
1334 sql
1335 </a>
1336 </li>
1337
1338
1339
1340
1341
1342
1343
1344 <li class="md-nav__item">
1345 <a href="../../package/pip/style/" class="md-nav__link">
1346 style
1347 </a>
1348 </li>
1349
1350
1351
1352
1353
1354
1355
1356 <li class="md-nav__item">
1357 <a href="../../package/pip/template/" class="md-nav__link">
1358 template
1359 </a>
1360 </li>
1361
1362
1363
1364
1365
1366
1367
1368 <li class="md-nav__item">
1369 <a href="../../package/pip/template-listener/" class="md-nav__link">
1370 templateListener
1371 </a>
1372 </li>
1373
1374
1375
1376
1377
1378
1379
1380 <li class="md-nav__item">
1381 <a href="../../package/pip/user-group-option/" class="md-nav__link">
1382 userGroupOption
1383 </a>
1384 </li>
1385
1386
1387
1388
1389
1390
1391
1392 <li class="md-nav__item">
1393 <a href="../../package/pip/user-menu/" class="md-nav__link">
1394 userMenu
1395 </a>
1396 </li>
1397
1398
1399
1400
1401
1402
1403
1404 <li class="md-nav__item">
1405 <a href="../../package/pip/user-notification-event/" class="md-nav__link">
1406 userNotificationEvent
1407 </a>
1408 </li>
1409
1410
1411
1412
1413
1414
1415
1416 <li class="md-nav__item">
1417 <a href="../../package/pip/user-option/" class="md-nav__link">
1418 userOption
1419 </a>
1420 </li>
1421
1422
1423
1424
1425
1426
1427
1428 <li class="md-nav__item">
1429 <a href="../../package/pip/user-profile-menu/" class="md-nav__link">
1430 userProfileMenu
1431 </a>
1432 </li>
1433
1434
1435
1436 </ul>
1437 </nav>
1438 </li>
1439
1440
1441
1442
1443
1444
1445
1446 <li class="md-nav__item">
1447 <a href="../../package/database-php-api/" class="md-nav__link">
1448 Database PHP API
1449 </a>
1450 </li>
1451
1452
1453
1454 </ul>
1455 </nav>
1456 </li>
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468 <li class="md-nav__item md-nav__item--nested">
1469
1470
1471 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
1472
1473 <label class="md-nav__link" for="__nav_6">
1474 Migration
1475 <span class="md-nav__icon md-icon"></span>
1476 </label>
1477 <nav class="md-nav" aria-label="Migration" data-md-level="1">
1478 <label class="md-nav__title" for="__nav_6">
1479 <span class="md-nav__icon md-icon"></span>
1480 Migration
1481 </label>
1482 <ul class="md-nav__list" data-md-scrollfix>
1483
1484
1485
1486
1487
1488
1489 <li class="md-nav__item md-nav__item--nested">
1490
1491
1492 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" >
1493
1494 <label class="md-nav__link" for="__nav_6_1">
1495 Migrating from WSC 5.3
1496 <span class="md-nav__icon md-icon"></span>
1497 </label>
1498 <nav class="md-nav" aria-label="Migrating from WSC 5.3" data-md-level="2">
1499 <label class="md-nav__title" for="__nav_6_1">
1500 <span class="md-nav__icon md-icon"></span>
1501 Migrating from WSC 5.3
1502 </label>
1503 <ul class="md-nav__list" data-md-scrollfix>
1504
1505
1506
1507
1508
1509 <li class="md-nav__item">
1510 <a href="../../migration/wsc53/php/" class="md-nav__link">
1511 PHP API
1512 </a>
1513 </li>
1514
1515
1516
1517
1518
1519
1520
1521 <li class="md-nav__item">
1522 <a href="../../migration/wsc53/session/" class="md-nav__link">
1523 Session Handling and Authentication
1524 </a>
1525 </li>
1526
1527
1528
1529
1530
1531
1532
1533 <li class="md-nav__item">
1534 <a href="../../migration/wsc53/javascript/" class="md-nav__link">
1535 JavaScript
1536 </a>
1537 </li>
1538
1539
1540
1541
1542
1543
1544
1545 <li class="md-nav__item">
1546 <a href="../../migration/wsc53/templates/" class="md-nav__link">
1547 Templates
1548 </a>
1549 </li>
1550
1551
1552
1553
1554
1555
1556
1557 <li class="md-nav__item">
1558 <a href="../../migration/wsc53/libraries/" class="md-nav__link">
1559 Third Party Libraries
1560 </a>
1561 </li>
1562
1563
1564
1565 </ul>
1566 </nav>
1567 </li>
1568
1569
1570
1571
1572
1573
1574
1575
1576 <li class="md-nav__item md-nav__item--nested">
1577
1578
1579 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" >
1580
1581 <label class="md-nav__link" for="__nav_6_2">
1582 Migrating from WSC 5.2
1583 <span class="md-nav__icon md-icon"></span>
1584 </label>
1585 <nav class="md-nav" aria-label="Migrating from WSC 5.2" data-md-level="2">
1586 <label class="md-nav__title" for="__nav_6_2">
1587 <span class="md-nav__icon md-icon"></span>
1588 Migrating from WSC 5.2
1589 </label>
1590 <ul class="md-nav__list" data-md-scrollfix>
1591
1592
1593
1594
1595
1596 <li class="md-nav__item">
1597 <a href="../../migration/wsc52/php/" class="md-nav__link">
1598 PHP API
1599 </a>
1600 </li>
1601
1602
1603
1604
1605
1606
1607
1608 <li class="md-nav__item">
1609 <a href="../../migration/wsc52/templates/" class="md-nav__link">
1610 Templates and Languages
1611 </a>
1612 </li>
1613
1614
1615
1616
1617
1618
1619
1620 <li class="md-nav__item">
1621 <a href="../../migration/wsc52/libraries/" class="md-nav__link">
1622 Third Party Libraries
1623 </a>
1624 </li>
1625
1626
1627
1628 </ul>
1629 </nav>
1630 </li>
1631
1632
1633
1634
1635
1636
1637
1638
1639 <li class="md-nav__item md-nav__item--nested">
1640
1641
1642 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" >
1643
1644 <label class="md-nav__link" for="__nav_6_3">
1645 Migrating from WSC 3.1
1646 <span class="md-nav__icon md-icon"></span>
1647 </label>
1648 <nav class="md-nav" aria-label="Migrating from WSC 3.1" data-md-level="2">
1649 <label class="md-nav__title" for="__nav_6_3">
1650 <span class="md-nav__icon md-icon"></span>
1651 Migrating from WSC 3.1
1652 </label>
1653 <ul class="md-nav__list" data-md-scrollfix>
1654
1655
1656
1657
1658
1659 <li class="md-nav__item">
1660 <a href="../../migration/wsc31/php/" class="md-nav__link">
1661 PHP API
1662 </a>
1663 </li>
1664
1665
1666
1667 </ul>
1668 </nav>
1669 </li>
1670
1671
1672
1673
1674
1675
1676
1677
1678 <li class="md-nav__item md-nav__item--nested">
1679
1680
1681 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" >
1682
1683 <label class="md-nav__link" for="__nav_6_4">
1684 Migrating from WSC 3.0
1685 <span class="md-nav__icon md-icon"></span>
1686 </label>
1687 <nav class="md-nav" aria-label="Migrating from WSC 3.0" data-md-level="2">
1688 <label class="md-nav__title" for="__nav_6_4">
1689 <span class="md-nav__icon md-icon"></span>
1690 Migrating from WSC 3.0
1691 </label>
1692 <ul class="md-nav__list" data-md-scrollfix>
1693
1694
1695
1696
1697
1698 <li class="md-nav__item">
1699 <a href="../../migration/wsc30/php/" class="md-nav__link">
1700 PHP API
1701 </a>
1702 </li>
1703
1704
1705
1706
1707
1708
1709
1710 <li class="md-nav__item">
1711 <a href="../../migration/wsc30/javascript/" class="md-nav__link">
1712 JavaScript API
1713 </a>
1714 </li>
1715
1716
1717
1718
1719
1720
1721
1722 <li class="md-nav__item">
1723 <a href="../../migration/wsc30/templates/" class="md-nav__link">
1724 Templates
1725 </a>
1726 </li>
1727
1728
1729
1730
1731
1732
1733
1734 <li class="md-nav__item">
1735 <a href="../../migration/wsc30/css/" class="md-nav__link">
1736 CSS
1737 </a>
1738 </li>
1739
1740
1741
1742
1743
1744
1745
1746 <li class="md-nav__item">
1747 <a href="../../migration/wsc30/package/" class="md-nav__link">
1748 Package Components
1749 </a>
1750 </li>
1751
1752
1753
1754 </ul>
1755 </nav>
1756 </li>
1757
1758
1759
1760
1761
1762
1763
1764
1765 <li class="md-nav__item md-nav__item--nested">
1766
1767
1768 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" >
1769
1770 <label class="md-nav__link" for="__nav_6_5">
1771 Migrating from WCF 2.1
1772 <span class="md-nav__icon md-icon"></span>
1773 </label>
1774 <nav class="md-nav" aria-label="Migrating from WCF 2.1" data-md-level="2">
1775 <label class="md-nav__title" for="__nav_6_5">
1776 <span class="md-nav__icon md-icon"></span>
1777 Migrating from WCF 2.1
1778 </label>
1779 <ul class="md-nav__list" data-md-scrollfix>
1780
1781
1782
1783
1784
1785 <li class="md-nav__item">
1786 <a href="../../migration/wcf21/php/" class="md-nav__link">
1787 PHP API
1788 </a>
1789 </li>
1790
1791
1792
1793
1794
1795
1796
1797 <li class="md-nav__item">
1798 <a href="../../migration/wcf21/templates/" class="md-nav__link">
1799 Templates
1800 </a>
1801 </li>
1802
1803
1804
1805
1806
1807
1808
1809 <li class="md-nav__item">
1810 <a href="../../migration/wcf21/css/" class="md-nav__link">
1811 CSS
1812 </a>
1813 </li>
1814
1815
1816
1817
1818
1819
1820
1821 <li class="md-nav__item">
1822 <a href="../../migration/wcf21/package/" class="md-nav__link">
1823 Package Components
1824 </a>
1825 </li>
1826
1827
1828
1829 </ul>
1830 </nav>
1831 </li>
1832
1833
1834
1835 </ul>
1836 </nav>
1837 </li>
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849 <li class="md-nav__item md-nav__item--nested">
1850
1851
1852 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
1853
1854 <label class="md-nav__link" for="__nav_7">
1855 Tutorials
1856 <span class="md-nav__icon md-icon"></span>
1857 </label>
1858 <nav class="md-nav" aria-label="Tutorials" data-md-level="1">
1859 <label class="md-nav__title" for="__nav_7">
1860 <span class="md-nav__icon md-icon"></span>
1861 Tutorials
1862 </label>
1863 <ul class="md-nav__list" data-md-scrollfix>
1864
1865
1866
1867
1868
1869
1870 <li class="md-nav__item md-nav__item--nested">
1871
1872
1873 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" >
1874
1875 <label class="md-nav__link" for="__nav_7_1">
1876 Tutorial Series
1877 <span class="md-nav__icon md-icon"></span>
1878 </label>
1879 <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2">
1880 <label class="md-nav__title" for="__nav_7_1">
1881 <span class="md-nav__icon md-icon"></span>
1882 Tutorial Series
1883 </label>
1884 <ul class="md-nav__list" data-md-scrollfix>
1885
1886
1887
1888
1889
1890 <li class="md-nav__item">
1891 <a href="../../tutorial/series/overview/" class="md-nav__link">
1892 Overview
1893 </a>
1894 </li>
1895
1896
1897
1898
1899
1900
1901
1902 <li class="md-nav__item">
1903 <a href="../../tutorial/series/part_1/" class="md-nav__link">
1904 Part 1
1905 </a>
1906 </li>
1907
1908
1909
1910
1911
1912
1913
1914 <li class="md-nav__item">
1915 <a href="../../tutorial/series/part_2/" class="md-nav__link">
1916 Part 2
1917 </a>
1918 </li>
1919
1920
1921
1922
1923
1924
1925
1926 <li class="md-nav__item">
1927 <a href="../../tutorial/series/part_3/" class="md-nav__link">
1928 Part 3
1929 </a>
1930 </li>
1931
1932
1933
1934 </ul>
1935 </nav>
1936 </li>
1937
1938
1939
1940 </ul>
1941 </nav>
1942 </li>
1943
1944
1945
1946 </ul>
1947</nav>
1948 </div>
1949 </div>
1950 </div>
1951
1952
1953
1954 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1955 <div class="md-sidebar__scrollwrap">
1956 <div class="md-sidebar__inner">
1957
1958<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1959
1960
1961
1962
1963
1964 <label class="md-nav__title" for="__toc">
1965 <span class="md-nav__icon md-icon"></span>
1966 Table of contents
1967 </label>
1968 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1969
1970 <li class="md-nav__item">
1971 <a href="#template-types-and-conventions" class="md-nav__link">
1972 Template Types and Conventions
1973 </a>
1974
1975</li>
1976
1977 <li class="md-nav__item">
1978 <a href="#installing-templates" class="md-nav__link">
1979 Installing Templates
1980 </a>
1981
1982</li>
1983
1984 <li class="md-nav__item">
1985 <a href="#base-templates" class="md-nav__link">
1986 Base Templates
1987 </a>
1988
1989 <nav class="md-nav" aria-label="Base Templates">
1990 <ul class="md-nav__list">
1991
1992 <li class="md-nav__item">
1993 <a href="#frontend" class="md-nav__link">
1994 Frontend
1995 </a>
1996
1997</li>
1998
1999 <li class="md-nav__item">
2000 <a href="#backend" class="md-nav__link">
2001 Backend
2002 </a>
2003
2004</li>
2005
2006 </ul>
2007 </nav>
2008
2009</li>
2010
2011 <li class="md-nav__item">
2012 <a href="#common-template-components" class="md-nav__link">
2013 Common Template Components
2014 </a>
2015
2016 <nav class="md-nav" aria-label="Common Template Components">
2017 <ul class="md-nav__list">
2018
2019 <li class="md-nav__item">
2020 <a href="#forms" class="md-nav__link">
2021 Forms
2022 </a>
2023
2024</li>
2025
2026 <li class="md-nav__item">
2027 <a href="#tab-menus" class="md-nav__link">
2028 Tab Menus
2029 </a>
2030
2031</li>
2032
2033 </ul>
2034 </nav>
2035
2036</li>
2037
2038 <li class="md-nav__item">
2039 <a href="#template-scripting" class="md-nav__link">
2040 Template Scripting
2041 </a>
2042
2043 <nav class="md-nav" aria-label="Template Scripting">
2044 <ul class="md-nav__list">
2045
2046 <li class="md-nav__item">
2047 <a href="#template-variables" class="md-nav__link">
2048 Template Variables
2049 </a>
2050
2051 <nav class="md-nav" aria-label="Template Variables">
2052 <ul class="md-nav__list">
2053
2054 <li class="md-nav__item">
2055 <a href="#modifiers" class="md-nav__link">
2056 Modifiers
2057 </a>
2058
2059</li>
2060
2061 <li class="md-nav__item">
2062 <a href="#system-template-variable" class="md-nav__link">
2063 System Template Variable
2064 </a>
2065
2066</li>
2067
2068 </ul>
2069 </nav>
2070
2071</li>
2072
2073 <li class="md-nav__item">
2074 <a href="#comments" class="md-nav__link">
2075 Comments
2076 </a>
2077
2078</li>
2079
2080 <li class="md-nav__item">
2081 <a href="#conditions" class="md-nav__link">
2082 Conditions
2083 </a>
2084
2085</li>
2086
2087 <li class="md-nav__item">
2088 <a href="#foreach-loops" class="md-nav__link">
2089 Foreach Loops
2090 </a>
2091
2092</li>
2093
2094 <li class="md-nav__item">
2095 <a href="#including-other-templates" class="md-nav__link">
2096 Including Other Templates
2097 </a>
2098
2099</li>
2100
2101 <li class="md-nav__item">
2102 <a href="#template-plugins" class="md-nav__link">
2103 Template Plugins
2104 </a>
2105
2106</li>
2107
2108 </ul>
2109 </nav>
2110
2111</li>
2112
2113 </ul>
2114
2115</nav>
2116 </div>
2117 </div>
2118 </div>
2119
2120
2121 <div class="md-content" data-md-component="content">
2122 <article class="md-content__inner md-typeset">
2123
2124
7124f4cb
WG
2125 <a href="https://github.com/WoltLab/docs.woltlab.com/edit/master/docs/view/templates.md" title="Edit this page" class="md-content__button md-icon">
2126 <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>
2127 </a>
2128
0c5338dd
TD
2129
2130 <h1 id="templates">Templates<a class="headerlink" href="#templates" title="Permanent link">#</a></h1>
2131<p>Templates are responsible for the output a user sees when requesting a page (while the PHP code is responsible for providing the data that will be shown).
2132Templates are text files with <code>.tpl</code> as the file extension.
2133WoltLab Suite Core compiles the template files once into a PHP file that is executed when a user requests the page.
2134In subsequent request, as the PHP file containing the compiled template already exists, compiling the template is not necessary anymore.</p>
2135<h2 id="template-types-and-conventions">Template Types and Conventions<a class="headerlink" href="#template-types-and-conventions" title="Permanent link">#</a></h2>
2136<p>WoltLab Suite Core supports two types of templates:
2137frontend templates (or simply <em>templates</em>) and backend templates (<em>ACP templates</em>).
2138Each type of template is only available in its respective domain, thus frontend templates cannot be included or used in the ACP and vice versa.</p>
2139<p>For pages and forms, the name of the template matches the unqualified name of the PHP class except for the <code>Page</code> or <code>Form</code> suffix:</p>
2140<ul>
2141<li><code>RegisterForm.class.php</code> → <code>register.tpl</code></li>
2142<li><code>UserPage.class.php</code> → <code>user.tpl</code></li>
2143</ul>
2144<p>If you follow this convention, WoltLab Suite Core will automatically determine the template name so that you do not have to explicitly set it.</p>
2145<div class="admonition info">
2146<p class="admonition-title">For forms that handle creating and editing objects, in general, there are two form classes: <code>FooAddForm</code> and <code>FooEditForm</code>. WoltLab Suite Core, however, generally only uses one template <code>fooAdd.tpl</code> and the template variable <code>$action</code> to distinguish between creating a new object (<code>$action = 'add'</code>) and editing an existing object (<code>$action = 'edit'</code>) as the differences between templates for adding and editing an object are minimal.</p>
2147</div>
2148<h2 id="installing-templates">Installing Templates<a class="headerlink" href="#installing-templates" title="Permanent link">#</a></h2>
2149<p>Templates and ACP templates are installed by two different package installation plugins:
2150the <a href="../../package/pip/template/">template PIP</a> and the <a href="../../package/pip/acp-template/">ACP template PIP</a>.
2151More information about installing templates can be found on those pages. </p>
2152<h2 id="base-templates">Base Templates<a class="headerlink" href="#base-templates" title="Permanent link">#</a></h2>
2153<h3 id="frontend">Frontend<a class="headerlink" href="#frontend" title="Permanent link">#</a></h3>
2154<div class="highlight"><pre><span></span><code><span class="cp">{</span><span class="nf">include</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;header&#39;</span><span class="cp">}</span><span class="x"></span>
2155
2156<span class="cp">{</span><span class="c">* content *</span><span class="cp">}</span><span class="x"></span>
2157
2158<span class="cp">{</span><span class="nf">include</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;footer&#39;</span><span class="cp">}</span><span class="x"></span>
2159</code></pre></div>
0c5338dd
TD
2160<h3 id="backend">Backend<a class="headerlink" href="#backend" title="Permanent link">#</a></h3>
2161<div class="highlight"><pre><span></span><code><span class="cp">{</span><span class="nf">include</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;header&#39;</span> <span class="na">pageTitle</span><span class="o">=</span><span class="s1">&#39;foo.bar.baz&#39;</span><span class="cp">}</span><span class="x"></span>
2162
2163<span class="x">&lt;header class=&quot;contentHeader&quot;&gt;</span>
2164<span class="x"> &lt;div class=&quot;contentHeaderTitle&quot;&gt;</span>
2165<span class="x"> &lt;h1 class=&quot;contentTitle&quot;&gt;Title&lt;/h1&gt;</span>
2166<span class="x"> &lt;/div&gt;</span>
2167
2168<span class="x"> &lt;nav class=&quot;contentHeaderNavigation&quot;&gt;</span>
2169<span class="x"> &lt;ul&gt;</span>
2170<span class="x"> </span><span class="cp">{</span><span class="c">* your default content header navigation buttons *</span><span class="cp">}</span><span class="x"></span>
2171
2172<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;contentHeaderNavigation&#39;</span><span class="cp">}</span><span class="x"></span>
2173<span class="x"> &lt;/ul&gt;</span>
2174<span class="x"> &lt;/nav&gt;</span>
2175<span class="x">&lt;/header&gt;</span>
2176
2177<span class="cp">{</span><span class="c">* content *</span><span class="cp">}</span><span class="x"></span>
2178
2179<span class="cp">{</span><span class="nf">include</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;footer&#39;</span><span class="cp">}</span><span class="x"></span>
2180</code></pre></div>
0c5338dd
TD
2181<p><code>foo.bar.baz</code> is the language item that contains the title of the page.</p>
2182<h2 id="common-template-components">Common Template Components<a class="headerlink" href="#common-template-components" title="Permanent link">#</a></h2>
2183<h3 id="forms">Forms<a class="headerlink" href="#forms" title="Permanent link">#</a></h3>
2184<div class="admonition info">
2185<p class="admonition-title">For new forms, use the new <a href="../../php/api/form_builder/overview/">form builder API</a> introduced with WoltLab Suite 5.2.</p>
2186</div>
2187<div class="highlight"><pre><span></span><code><span class="x">&lt;form method=&quot;post&quot; action=&quot;</span><span class="cp">{</span><span class="nf">link</span> <span class="na">controller</span><span class="o">=</span><span class="s1">&#39;FooBar&#39;</span><span class="cp">}{</span><span class="nf">/link</span><span class="cp">}</span><span class="x">&quot;&gt;</span>
2188<span class="x"> &lt;div class=&quot;section&quot;&gt;</span>
2189<span class="x"> &lt;dl</span><span class="cp">{</span><span class="nf">if</span> <span class="nv">$errorField</span> <span class="o">==</span> <span class="s1">&#39;baz&#39;</span><span class="cp">}</span><span class="x"> class=&quot;formError&quot;</span><span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span><span class="x">&gt;</span>
2190<span class="x"> &lt;dt&gt;&lt;label for=&quot;baz&quot;&gt;</span><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">&lt;/label&gt;&lt;/dt&gt;</span>
2191<span class="x"> &lt;dd&gt;</span>
2192<span class="x"> &lt;input type=&quot;text&quot; id=&quot;baz&quot; name=&quot;baz&quot; value=&quot;</span><span class="cp">{</span><span class="nv">$baz</span><span class="cp">}</span><span class="x">&quot; class=&quot;long&quot; required autofocus&gt;</span>
2193<span class="x"> </span><span class="cp">{</span><span class="nf">if</span> <span class="nv">$errorField</span> <span class="o">==</span> <span class="s1">&#39;baz&#39;</span><span class="cp">}</span><span class="x"></span>
2194<span class="x"> &lt;small class=&quot;innerError&quot;&gt;</span>
2195<span class="x"> </span><span class="cp">{</span><span class="nf">if</span> <span class="nv">$errorType</span> <span class="o">==</span> <span class="s1">&#39;empty&#39;</span><span class="cp">}</span><span class="x"></span>
2196<span class="x"> </span><span class="cp">{</span><span class="nf">lang</span><span class="cp">}</span><span class="x">wcf.global.form.error.empty</span><span class="cp">{</span><span class="nf">/lang</span><span class="cp">}</span><span class="x"></span>
2197<span class="x"> </span><span class="cp">{</span><span class="nf">else</span><span class="cp">}</span><span class="x"></span>
2198<span class="x"> </span><span class="cp">{</span><span class="nf">lang</span><span class="cp">}</span><span class="x">foo.bar.baz.error.</span><span class="cp">{</span><span class="o">@</span><span class="nv">$errorType</span><span class="cp">}{</span><span class="nf">/lang</span><span class="cp">}</span><span class="x"></span>
2199<span class="x"> </span><span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span><span class="x"></span>
2200<span class="x"> &lt;/small&gt;</span>
2201<span class="x"> </span><span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span><span class="x"></span>
2202<span class="x"> &lt;/dd&gt;</span>
2203<span class="x"> &lt;/dl&gt;</span>
2204
2205<span class="x"> &lt;dl&gt;</span>
2206<span class="x"> &lt;dt&gt;&lt;label for=&quot;bar&quot;&gt;</span><span class="cp">{</span><span class="nf">lang</span><span class="cp">}</span><span class="x">foo.bar.bar</span><span class="cp">{</span><span class="nf">/lang</span><span class="cp">}</span><span class="x">&lt;/label&gt;&lt;/dt&gt;</span>
2207<span class="x"> &lt;dd&gt;</span>
2208<span class="x"> &lt;textarea name=&quot;bar&quot; id=&quot;bar&quot; cols=&quot;40&quot; rows=&quot;10&quot;&gt;</span><span class="cp">{</span><span class="nv">$bar</span><span class="cp">}</span><span class="x">&lt;/textarea&gt;</span>
2209<span class="x"> </span><span class="cp">{</span><span class="nf">if</span> <span class="nv">$errorField</span> <span class="o">==</span> <span class="s1">&#39;bar&#39;</span><span class="cp">}</span><span class="x"></span>
2210<span class="x"> &lt;small class=&quot;innerError&quot;&gt;</span><span class="cp">{</span><span class="nf">lang</span><span class="cp">}</span><span class="x">foo.bar.bar.error.</span><span class="cp">{</span><span class="o">@</span><span class="nv">$errorType</span><span class="cp">}{</span><span class="nf">/lang</span><span class="cp">}</span><span class="x">&lt;/small&gt;</span>
2211<span class="x"> </span><span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span><span class="x"></span>
2212<span class="x"> &lt;/dd&gt;</span>
2213<span class="x"> &lt;/dl&gt;</span>
2214
2215<span class="x"> </span><span class="cp">{</span><span class="c">* other fields *</span><span class="cp">}</span><span class="x"></span>
2216
2217<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;dataFields&#39;</span><span class="cp">}</span><span class="x"></span>
2218<span class="x"> &lt;/div&gt;</span>
2219
2220<span class="x"> </span><span class="cp">{</span><span class="c">* other sections *</span><span class="cp">}</span><span class="x"></span>
2221
2222<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;sections&#39;</span><span class="cp">}</span><span class="x"></span>
2223
2224<span class="x"> &lt;div class=&quot;formSubmit&quot;&gt;</span>
2225<span class="x"> &lt;input type=&quot;submit&quot; value=&quot;</span><span class="cp">{</span><span class="nf">lang</span><span class="cp">}</span><span class="x">wcf.global.button.submit</span><span class="cp">{</span><span class="nf">/lang</span><span class="cp">}</span><span class="x">&quot; accesskey=&quot;s&quot;&gt;</span>
2226<span class="x"> </span><span class="cp">{</span><span class="nf">csrfToken</span><span class="cp">}</span><span class="x"></span>
2227<span class="x"> &lt;/div&gt;</span>
2228<span class="x">&lt;/form&gt;</span>
2229</code></pre></div>
0c5338dd
TD
2230<h3 id="tab-menus">Tab Menus<a class="headerlink" href="#tab-menus" title="Permanent link">#</a></h3>
2231<div class="highlight"><pre><span></span><code><span class="x">&lt;div class=&quot;section tabMenuContainer&quot;&gt;</span>
2232<span class="x"> &lt;nav class=&quot;tabMenu&quot;&gt;</span>
2233<span class="x"> &lt;ul&gt;</span>
2234<span class="x"> &lt;li&gt;&lt;a href=&quot;</span><span class="cp">{</span><span class="o">@</span><span class="nv">$__wcf</span><span class="o">-&gt;</span><span class="na">getAnchor</span><span class="o">(</span><span class="s1">&#39;tab1&#39;</span><span class="o">)</span><span class="cp">}</span><span class="x">&quot;&gt;Tab 1&lt;/a&gt;&lt;/li&gt;</span>
2235<span class="x"> &lt;li&gt;&lt;a href=&quot;</span><span class="cp">{</span><span class="o">@</span><span class="nv">$__wcf</span><span class="o">-&gt;</span><span class="na">getAnchor</span><span class="o">(</span><span class="s1">&#39;tab2&#39;</span><span class="o">)</span><span class="cp">}</span><span class="x">&quot;&gt;Tab 2&lt;/a&gt;&lt;/li&gt;</span>
2236
2237<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;tabMenuTabs&#39;</span><span class="cp">}</span><span class="x"></span>
2238<span class="x"> &lt;/ul&gt;</span>
2239<span class="x"> &lt;/nav&gt;</span>
2240
2241<span class="x"> &lt;div id=&quot;tab1&quot; class=&quot;tabMenuContent&quot;&gt;</span>
2242<span class="x"> &lt;div class=&quot;section&quot;&gt;</span>
2243<span class="x"> </span><span class="cp">{</span><span class="c">* contents of first tab *</span><span class="cp">}</span><span class="x"></span>
2244<span class="x"> &lt;/div&gt;</span>
2245<span class="x"> &lt;/div&gt;</span>
2246
2247<span class="x"> &lt;div id=&quot;tab2&quot; class=&quot;tabMenuContainer tabMenuContent&quot;&gt;</span>
2248<span class="x"> &lt;nav class=&quot;menu&quot;&gt;</span>
2249<span class="x"> &lt;ul&gt;</span>
2250<span class="x"> &lt;li&gt;&lt;a href=&quot;</span><span class="cp">{</span><span class="o">@</span><span class="nv">$__wcf</span><span class="o">-&gt;</span><span class="na">getAnchor</span><span class="o">(</span><span class="s1">&#39;tab2A&#39;</span><span class="o">)</span><span class="cp">}</span><span class="x">&quot;&gt;Tab 2A&lt;/a&gt;&lt;/li&gt;</span>
2251<span class="x"> &lt;li&gt;&lt;a href=&quot;</span><span class="cp">{</span><span class="o">@</span><span class="nv">$__wcf</span><span class="o">-&gt;</span><span class="na">getAnchor</span><span class="o">(</span><span class="s1">&#39;tab2B&#39;</span><span class="o">)</span><span class="cp">}</span><span class="x">&quot;&gt;Tab 2B&lt;/a&gt;&lt;/li&gt;</span>
2252
2253<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;tabMenuTab2Subtabs&#39;</span><span class="cp">}</span><span class="x"></span>
2254<span class="x"> &lt;/ul&gt;</span>
2255<span class="x"> &lt;/nav&gt;</span>
2256
2257<span class="x"> &lt;div id=&quot;tab2A&quot; class=&quot;tabMenuContent&quot;&gt;</span>
2258<span class="x"> &lt;div class=&quot;section&quot;&gt;</span>
2259<span class="x"> </span><span class="cp">{</span><span class="c">* contents of first subtab for second tab *</span><span class="cp">}</span><span class="x"></span>
2260<span class="x"> &lt;/div&gt;</span>
2261<span class="x"> &lt;/div&gt;</span>
2262
2263<span class="x"> &lt;div id=&quot;tab2B&quot; class=&quot;tabMenuContent&quot;&gt;</span>
2264<span class="x"> &lt;div class=&quot;section&quot;&gt;</span>
2265<span class="x"> </span><span class="cp">{</span><span class="c">* contents of second subtab for second tab *</span><span class="cp">}</span><span class="x"></span>
2266<span class="x"> &lt;/div&gt;</span>
2267<span class="x"> &lt;/div&gt;</span>
2268
2269<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;tabMenuTab2Contents&#39;</span><span class="cp">}</span><span class="x"></span>
2270<span class="x"> &lt;/div&gt;</span>
2271
2272<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;tabMenuContents&#39;</span><span class="cp">}</span><span class="x"></span>
2273<span class="x">&lt;/div&gt;</span>
2274</code></pre></div>
0c5338dd
TD
2275<h2 id="template-scripting">Template Scripting<a class="headerlink" href="#template-scripting" title="Permanent link">#</a></h2>
2276<h3 id="template-variables">Template Variables<a class="headerlink" href="#template-variables" title="Permanent link">#</a></h3>
2277<p>Template variables can be assigned via <code>WCF::getTPL()-&gt;assign('foo', 'bar')</code> and accessed in templates via <code>$foo</code>:</p>
2278<ul>
2279<li><code>{$foo}</code> will result in the contents of <code>$foo</code> to be passed to <code>StringUtil::encodeHTML()</code> before being printed.</li>
2280<li><code>{#$foo}</code> will result in the contents of <code>$foo</code> to be passed to <code>StringUtil::formatNumeric()</code> before being printed.
2281 Thus, this method is relevant when printing numbers and having them formatted correctly according the the user’s language.</li>
2282<li><code>{@$foo}</code> will result in the contents of <code>$foo</code> to be printed directly.
2283 In general, this method should not be used for user-generated input.</li>
2284</ul>
2285<p>Multiple template variables can be assigned by passing an array:</p>
2286<div class="highlight"><pre><span></span><code><span class="nx">WCF</span><span class="o">::</span><span class="na">getTPL</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">assign</span><span class="p">([</span>
2287 <span class="s1">&#39;foo&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;bar&#39;</span><span class="p">,</span>
2288 <span class="s1">&#39;baz&#39;</span> <span class="o">=&gt;</span> <span class="k">false</span>
2289<span class="p">]);</span>
2290</code></pre></div>
0c5338dd
TD
2291<h4 id="modifiers">Modifiers<a class="headerlink" href="#modifiers" title="Permanent link">#</a></h4>
2292<p>If you want to call a function on a variable, you can use the modifier syntax:
2293<code>{@$foo|trim}</code>, for example, results in the trimmed contents of <code>$foo</code> to be printed.</p>
2294<h4 id="system-template-variable">System Template Variable<a class="headerlink" href="#system-template-variable" title="Permanent link">#</a></h4>
2295<p>The template variable <code>$tpl</code> is automatically assigned and is an array containing different data:</p>
2296<ul>
2297<li><code>$tpl[get]</code> contains <code>$_GET</code>.</li>
2298<li><code>$tpl[post]</code> contains <code>$_POST</code>.</li>
2299<li><code>$tpl[cookie]</code> contains <code>$_COOKIE</code>.</li>
2300<li><code>$tpl[server]</code> contains <code>$_SERVER</code>.</li>
2301<li><code>$tpl[env]</code> contains <code>$_ENV</code>.</li>
2302<li><code>$tpl[now]</code> contains <code>TIME_NOW</code> (current timestamp).</li>
2303</ul>
2304<p>Furthermore, the following template variables are also automatically assigned:</p>
2305<ul>
2306<li><code>$__wcf</code> contains the <code>WCF</code> object (or <code>WCFACP</code> object in the backend).</li>
2307</ul>
2308<h3 id="comments">Comments<a class="headerlink" href="#comments" title="Permanent link">#</a></h3>
2309<p>Comments are wrapped in <code>{*</code> and <code>*}</code> and can span multiple lines:</p>
2310<div class="highlight"><pre><span></span><code><span class="cp">{</span><span class="c">* some</span>
2311<span class="c"> comment *</span><span class="cp">}</span><span class="x"></span>
2312</code></pre></div>
0c5338dd
TD
2313<div class="admonition info">
2314<p class="admonition-title">The template compiler discards the comments, so that they not included in the compiled template.</p>
2315</div>
2316<h3 id="conditions">Conditions<a class="headerlink" href="#conditions" title="Permanent link">#</a></h3>
2317<p>Conditions follow a similar syntax to PHP code:</p>
2318<div class="highlight"><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>
2319<span class="x"> foo is bar</span>
2320<span class="cp">{</span><span class="nf">elseif</span> <span class="nv">$foo</span> <span class="o">===</span> <span class="s1">&#39;baz&#39;</span><span class="cp">}</span><span class="x"></span>
2321<span class="x"> foo is baz</span>
2322<span class="cp">{</span><span class="nf">else</span><span class="cp">}</span><span class="x"></span>
2323<span class="x"> foo is neither bar nor baz</span>
2324<span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span><span class="x"></span>
2325</code></pre></div>
0c5338dd
TD
2326<p>The supported operators in conditions are <code>===</code>, <code>!==</code>, <code>==</code>, <code>!=</code>, <code>&lt;=</code>, <code>&lt;</code>, <code>&gt;=</code>, <code>&gt;</code>, <code>||</code>, <code>&amp;&amp;</code>, <code>!</code>, and <code>=</code>.</p>
2327<p>More examples:</p>
2328<div class="highlight"><pre><span></span><code><span class="cp">{</span><span class="nf">if</span> <span class="nv">$bar</span><span class="o">|</span><span class="na">isset</span><span class="cp">}</span><span class="x">…</span><span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span><span class="x"></span>
2329
2330<span class="cp">{</span><span class="nf">if</span> <span class="nv">$bar</span><span class="o">|</span><span class="na">count</span> <span class="o">&gt;</span> <span class="m">3</span> <span class="o">&amp;&amp;</span> <span class="nv">$bar</span><span class="o">|</span><span class="na">count</span> <span class="o">&lt;</span> <span class="m">100</span><span class="cp">}</span><span class="x">…</span><span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span><span class="x"></span>
2331</code></pre></div>
0c5338dd
TD
2332<h3 id="foreach-loops">Foreach Loops<a class="headerlink" href="#foreach-loops" title="Permanent link">#</a></h3>
2333<p>Foreach loops allow to iterate over arrays or iterable objects:</p>
2334<div class="highlight"><pre><span></span><code><span class="x">&lt;ul&gt;</span>
2335<span class="x"> </span><span class="cp">{</span><span class="nf">foreach</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">value</span><span class="cp">}</span><span class="x"></span>
2336<span class="x"> &lt;li&gt;</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="x">&lt;/li&gt;</span>
2337<span class="x"> </span><span class="cp">{</span><span class="nf">/foreach</span><span class="cp">}</span><span class="x"></span>
2338<span class="x">&lt;/ul&gt;</span>
2339</code></pre></div>
0c5338dd
TD
2340<p>While the <code>from</code> attribute containing the iterated structure and the <code>item</code> attribute containg the current value are mandatory, the <code>key</code> attribute is optional.
2341If the foreach loop has a name assigned to it via the <code>name</code> attribute, the <code>$tpl</code> template variable provides additional data about the loop:</p>
2342<div class="highlight"><pre><span></span><code><span class="x">&lt;ul&gt;</span>
2343<span class="x"> </span><span class="cp">{</span><span class="nf">foreach</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">value</span> <span class="na">name</span><span class="o">=</span><span class="na">foo</span><span class="cp">}</span><span class="x"></span>
2344<span class="x"> </span><span class="cp">{</span><span class="nf">if</span> <span class="nv">$tpl</span><span class="o">[</span><span class="na">foreach</span><span class="o">][</span><span class="na">foo</span><span class="o">][</span><span class="na">first</span><span class="o">]</span><span class="cp">}</span><span class="x"></span>
2345<span class="x"> something special for the first iteration</span>
2346<span class="x"> </span><span class="cp">{</span><span class="nf">elseif</span> <span class="nv">$tpl</span><span class="o">[</span><span class="na">foreach</span><span class="o">][</span><span class="na">foo</span><span class="o">][</span><span class="na">last</span><span class="o">]</span><span class="cp">}</span><span class="x"></span>
2347<span class="x"> something special for the last iteration</span>
2348<span class="x"> </span><span class="cp">{</span><span class="nf">/if</span><span class="cp">}</span><span class="x"></span>
2349
2350<span class="x"> &lt;li&gt;iteration </span><span class="cp">{</span><span class="err">#</span><span class="nv">$tpl</span><span class="o">[</span><span class="na">foreach</span><span class="o">][</span><span class="na">foo</span><span class="o">][</span><span class="na">iteration</span><span class="o">]+</span><span class="m">1</span><span class="cp">}</span><span class="x"> out of </span><span class="cp">{</span><span class="err">#</span><span class="nv">$tpl</span><span class="o">[</span><span class="na">foreach</span><span class="o">][</span><span class="na">foo</span><span class="o">][</span><span class="na">total</span><span class="o">]</span><span class="cp">}</span><span class="x"> </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="x">&lt;/li&gt;</span>
2351<span class="x"> </span><span class="cp">{</span><span class="nf">/foreach</span><span class="cp">}</span><span class="x"></span>
2352<span class="x">&lt;/ul&gt;</span>
2353</code></pre></div>
0c5338dd
TD
2354<p>In contrast to PHP’s foreach loop, templates also support <code>foreachelse</code>:</p>
2355<div class="highlight"><pre><span></span><code><span class="cp">{</span><span class="nf">foreach</span> <span class="na">from</span><span class="o">=</span><span class="nv">$array</span> <span class="na">item</span><span class="o">=</span><span class="na">value</span><span class="cp">}</span><span class="x"></span>
2356<span class="x"> …</span>
2357<span class="cp">{</span><span class="nf">foreachelse</span><span class="cp">}</span><span class="x"></span>
2358<span class="x"> there is nothing to iterate over</span>
2359<span class="cp">{</span><span class="nf">/foreach</span><span class="cp">}</span><span class="x"></span>
2360</code></pre></div>
0c5338dd
TD
2361<h3 id="including-other-templates">Including Other Templates<a class="headerlink" href="#including-other-templates" title="Permanent link">#</a></h3>
2362<p>To include template named <code>foo</code> from the same domain (frontend/backend), you can use</p>
2363<div class="highlight"><pre><span></span><code><span class="cp">{</span><span class="nf">include</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;foo&#39;</span><span class="cp">}</span><span class="x"></span>
2364</code></pre></div>
0c5338dd
TD
2365<p>If the template belongs to an application, you have to specify that application using the <code>application</code> attribute:</p>
2366<div class="highlight"><pre><span></span><code><span class="cp">{</span><span class="nf">include</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;foo&#39;</span> <span class="na">application</span><span class="o">=</span><span class="s1">&#39;app&#39;</span><span class="cp">}</span><span class="x"></span>
2367</code></pre></div>
0c5338dd
TD
2368<p>Additional template variables can be passed to the included template as additional attributes:</p>
2369<div class="highlight"><pre><span></span><code><span class="cp">{</span><span class="nf">include</span> <span class="na">file</span><span class="o">=</span><span class="s1">&#39;foo&#39;</span> <span class="na">application</span><span class="o">=</span><span class="s1">&#39;app&#39;</span> <span class="na">var1</span><span class="o">=</span><span class="s1">&#39;foo1&#39;</span> <span class="na">var2</span><span class="o">=</span><span class="s1">&#39;foo2&#39;</span><span class="cp">}</span><span class="x"></span>
2370</code></pre></div>
0c5338dd
TD
2371<h3 id="template-plugins">Template Plugins<a class="headerlink" href="#template-plugins" title="Permanent link">#</a></h3>
2372<p>An overview of all available template plugins can be found <a href="../template-plugins/">here</a>.</p>
2373
2374
2375
2376
2377
2378
2379
2380 </article>
2381 </div>
2382 </div>
2383 </main>
2384
2385
2386<footer class="md-footer">
2387
2388 <nav class="md-footer__inner md-grid" aria-label="Footer">
2389
2390 <a href="../languages/" class="md-footer__link md-footer__link--prev" rel="prev">
2391 <div class="md-footer__button md-icon">
2392 <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>
2393 </div>
2394 <div class="md-footer__title">
2395 <div class="md-ellipsis">
2396 <span class="md-footer__direction">
2397 Previous
2398 </span>
2399 Languages
2400 </div>
2401 </div>
2402 </a>
2403
2404
2405 <a href="../css/" class="md-footer__link md-footer__link--next" rel="next">
2406 <div class="md-footer__title">
2407 <div class="md-ellipsis">
2408 <span class="md-footer__direction">
2409 Next
2410 </span>
2411 CSS
2412 </div>
2413 </div>
2414 <div class="md-footer__button md-icon">
2415 <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>
2416 </div>
2417 </a>
2418
2419 </nav>
2420
2421 <div class="md-footer-meta md-typeset">
2422 <div class="md-footer-meta__inner md-grid">
2423 <div class="md-footer-copyright">
2424
2425 <div class="md-footer-copyright__highlight">
2426 Copyright © 2020 WoltLab GmbH
2427 </div>
2428
2429 Made with
2430 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2431 Material for MkDocs
2432 </a>
fb88dc6e 2433
0c5338dd
TD
2434 </div>
2435 <div class="md-footer-copyright">
2436 <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a>
2437 <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a>
2438</div>
2439 </div>
2440 </div>
2441</footer>
2442
2443 </div>
2444 <div class="md-dialog" data-md-component="dialog">
2445 <div class="md-dialog__inner md-typeset"></div>
2446 </div>
2447 <script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.fb4a9340.min.js", "version": {"provider": "mike"}}</script>
2448
2449
fb88dc6e 2450 <script src="../../assets/javascripts/bundle.5cf3e710.min.js"></script>
0c5338dd
TD
2451
2452
2453 </body>
2454</html>