Deployed 33caa8a to 5.4 with MkDocs 1.1.2 and mike 0.5.5
[GitHub/WoltLab/woltlab.github.io.git] / latest / php / api / form_builder / dependencies / 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>Dependencies - 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="#form-node-dependencies" 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 Dependencies
102
103 </span>
104 </div>
105 </div>
106 </div>
107 <div class="md-header__options">
108
109 </div>
110
a3639e76
WG
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
0c5338dd 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
225
226 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
227
228
229 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
230
231 <label class="md-nav__link" for="__nav_2">
232 PHP API
233 <span class="md-nav__icon md-icon"></span>
234 </label>
235 <nav class="md-nav" aria-label="PHP API" data-md-level="1">
236 <label class="md-nav__title" for="__nav_2">
237 <span class="md-nav__icon md-icon"></span>
238 PHP API
239 </label>
240 <ul class="md-nav__list" data-md-scrollfix>
241
242
243
244
245
246 <li class="md-nav__item">
247 <a href="../../../pages/" class="md-nav__link">
248 Pages
249 </a>
250 </li>
251
252
253
254
255
256
257
258 <li class="md-nav__item">
259 <a href="../../../database-objects/" class="md-nav__link">
260 Database Objects
261 </a>
262 </li>
263
264
265
266
267
268
269
270 <li class="md-nav__item">
271 <a href="../../../database-access/" class="md-nav__link">
272 Database Access
273 </a>
274 </li>
275
276
277
278
279
280
281
282 <li class="md-nav__item">
283 <a href="../../../exceptions/" class="md-nav__link">
284 Exceptions
285 </a>
286 </li>
287
288
289
290
291
292
293
294
295
296
297 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
298
299
300 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" checked>
301
302 <label class="md-nav__link" for="__nav_2_5">
303 API
304 <span class="md-nav__icon md-icon"></span>
305 </label>
306 <nav class="md-nav" aria-label="API" data-md-level="2">
307 <label class="md-nav__title" for="__nav_2_5">
308 <span class="md-nav__icon md-icon"></span>
309 API
310 </label>
311 <ul class="md-nav__list" data-md-scrollfix>
312
313
314
315
316
317 <li class="md-nav__item">
318 <a href="../../caches/" class="md-nav__link">
319 Caches
320 </a>
321 </li>
322
323
324
325
326
327
328
329 <li class="md-nav__item">
330 <a href="../../comments/" class="md-nav__link">
331 Comments
332 </a>
333 </li>
334
335
336
337
338
339
340
341 <li class="md-nav__item">
342 <a href="../../cronjobs/" class="md-nav__link">
343 Cronjobs
344 </a>
345 </li>
346
347
348
349
350
351
352
353 <li class="md-nav__item">
354 <a href="../../events/" class="md-nav__link">
355 Events
356 </a>
357 </li>
358
359
360
361
362
363
364
365
366
367
368 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
369
370
371 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" checked>
372
373 <label class="md-nav__link" for="__nav_2_5_5">
374 Form Builder
375 <span class="md-nav__icon md-icon"></span>
376 </label>
377 <nav class="md-nav" aria-label="Form Builder" data-md-level="3">
378 <label class="md-nav__title" for="__nav_2_5_5">
379 <span class="md-nav__icon md-icon"></span>
380 Form Builder
381 </label>
382 <ul class="md-nav__list" data-md-scrollfix>
383
384
385
386
387
388 <li class="md-nav__item">
389 <a href="../overview/" class="md-nav__link">
390 Overview
391 </a>
392 </li>
393
394
395
396
397
398
399
400 <li class="md-nav__item">
401 <a href="../structure/" class="md-nav__link">
402 Structure
403 </a>
404 </li>
405
406
407
408
409
410
411
412 <li class="md-nav__item">
413 <a href="../form_fields/" class="md-nav__link">
414 Fields
415 </a>
416 </li>
417
418
419
420
421
422
423
424 <li class="md-nav__item">
425 <a href="../validation_data/" class="md-nav__link">
426 Validation and Data
427 </a>
428 </li>
429
430
431
432
433
434
435
436
437
438 <li class="md-nav__item md-nav__item--active">
439
440 <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
441
442
443
444
445 <label class="md-nav__link md-nav__link--active" for="__toc">
446 Dependencies
447 <span class="md-nav__icon md-icon"></span>
448 </label>
449
450 <a href="./" class="md-nav__link md-nav__link--active">
451 Dependencies
452 </a>
453
454
455<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
456
457
458
459
460
461 <label class="md-nav__title" for="__toc">
462 <span class="md-nav__icon md-icon"></span>
463 Table of contents
464 </label>
465 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
466
467 <li class="md-nav__item">
468 <a href="#iformfielddependency" class="md-nav__link">
469 IFormFieldDependency
470 </a>
471
472</li>
473
474 <li class="md-nav__item">
475 <a href="#default-dependencies" class="md-nav__link">
476 Default Dependencies
477 </a>
478
479</li>
480
481 <li class="md-nav__item">
482 <a href="#javascript-implementation" class="md-nav__link">
483 JavaScript Implementation
484 </a>
485
486</li>
487
488 <li class="md-nav__item">
489 <a href="#examples" class="md-nav__link">
490 Examples
491 </a>
492
493</li>
494
495 </ul>
496
497</nav>
498
499 </li>
500
501
502
503 </ul>
504 </nav>
505 </li>
506
507
508
509
510
511
512
513 <li class="md-nav__item">
514 <a href="../../package_installation_plugins/" class="md-nav__link">
515 Package Installation Plugins
516 </a>
517 </li>
518
519
520
521
522
523
524
525 <li class="md-nav__item">
526 <a href="../../user_activity_points/" class="md-nav__link">
527 User Activity Points
528 </a>
529 </li>
530
531
532
533
534
535
536
537 <li class="md-nav__item">
538 <a href="../../user_notifications/" class="md-nav__link">
539 User Notifications
540 </a>
541 </li>
542
543
544
545
546
547
548
549 <li class="md-nav__item">
550 <a href="../../sitemaps/" class="md-nav__link">
551 Sitemaps
552 </a>
553 </li>
554
555
556
557 </ul>
558 </nav>
559 </li>
560
561
562
563
564
565
566
567 <li class="md-nav__item">
568 <a href="../../../code-style/" class="md-nav__link">
569 Code Style
570 </a>
571 </li>
572
573
574
575
576
577
578
579 <li class="md-nav__item">
580 <a href="../../../apps/" class="md-nav__link">
581 Apps
582 </a>
583 </li>
584
585
586
587
588
589
590
591 <li class="md-nav__item">
592 <a href="../../../gdpr/" class="md-nav__link">
593 GDPR
594 </a>
595 </li>
596
597
598
599 </ul>
600 </nav>
601 </li>
602
603
604
605
606
607
608
609
610
611
612
613 <li class="md-nav__item md-nav__item--nested">
614
615
616 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
617
618 <label class="md-nav__link" for="__nav_3">
619 Languages, Templates & CSS
620 <span class="md-nav__icon md-icon"></span>
621 </label>
622 <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1">
623 <label class="md-nav__title" for="__nav_3">
624 <span class="md-nav__icon md-icon"></span>
625 Languages, Templates & CSS
626 </label>
627 <ul class="md-nav__list" data-md-scrollfix>
628
629
630
631
632
633 <li class="md-nav__item">
634 <a href="../../../../view/languages/" class="md-nav__link">
635 Languages
636 </a>
637 </li>
638
639
640
641
642
643
644
645 <li class="md-nav__item">
646 <a href="../../../../view/templates/" class="md-nav__link">
647 Templates
648 </a>
649 </li>
650
651
652
653
654
655
656
657 <li class="md-nav__item">
658 <a href="../../../../view/css/" class="md-nav__link">
659 CSS
660 </a>
661 </li>
662
663
664
665 </ul>
666 </nav>
667 </li>
668
669
670
671
672
673
674
675
676
677
678
679 <li class="md-nav__item md-nav__item--nested">
680
681
682 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
683
684 <label class="md-nav__link" for="__nav_4">
685 JavaScript API
686 <span class="md-nav__icon md-icon"></span>
687 </label>
688 <nav class="md-nav" aria-label="JavaScript API" data-md-level="1">
689 <label class="md-nav__title" for="__nav_4">
690 <span class="md-nav__icon md-icon"></span>
691 JavaScript API
692 </label>
693 <ul class="md-nav__list" data-md-scrollfix>
694
695
696
697
698
699 <li class="md-nav__item">
700 <a href="../../../../javascript/general-usage/" class="md-nav__link">
701 General Usage
702 </a>
703 </li>
704
705
706
707
708
709
710
711
712 <li class="md-nav__item md-nav__item--nested">
713
714
715 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_2" type="checkbox" id="__nav_4_2" >
716
717 <label class="md-nav__link" for="__nav_4_2">
718 New API
719 <span class="md-nav__icon md-icon"></span>
720 </label>
721 <nav class="md-nav" aria-label="New API" data-md-level="2">
722 <label class="md-nav__title" for="__nav_4_2">
723 <span class="md-nav__icon md-icon"></span>
724 New API
725 </label>
726 <ul class="md-nav__list" data-md-scrollfix>
727
728
729
730
731
732 <li class="md-nav__item">
733 <a href="../../../../javascript/new-api_writing-a-module/" class="md-nav__link">
734 Writing a module
735 </a>
736 </li>
737
738
739
740
741
742
743
744 <li class="md-nav__item">
745 <a href="../../../../javascript/new-api_data-structures/" class="md-nav__link">
746 Data Structures
747 </a>
748 </li>
749
750
751
752
753
754
755
756 <li class="md-nav__item">
757 <a href="../../../../javascript/new-api_core/" class="md-nav__link">
758 Core Functions
759 </a>
760 </li>
761
762
763
764
765
766
767
768 <li class="md-nav__item">
769 <a href="../../../../javascript/new-api_dom/" class="md-nav__link">
770 DOM
771 </a>
772 </li>
773
774
775
776
777
778
779
780 <li class="md-nav__item">
781 <a href="../../../../javascript/new-api_events/" class="md-nav__link">
782 Event Handling
783 </a>
784 </li>
785
786
787
788
789
790
791
792 <li class="md-nav__item">
793 <a href="../../../../javascript/new-api_ajax/" class="md-nav__link">
794 Ajax
795 </a>
796 </li>
797
798
799
800
801
802
803
804 <li class="md-nav__item">
805 <a href="../../../../javascript/new-api_dialogs/" class="md-nav__link">
806 Dialogs
807 </a>
808 </li>
809
810
811
812
813
814
815
816 <li class="md-nav__item">
817 <a href="../../../../javascript/new-api_browser/" class="md-nav__link">
818 Browser and Screen Sizes
819 </a>
820 </li>
821
822
823
824
825
826
827
828 <li class="md-nav__item">
829 <a href="../../../../javascript/new-api_ui/" class="md-nav__link">
830 User Interface
831 </a>
832 </li>
833
834
835
836 </ul>
837 </nav>
838 </li>
839
840
841
842
843
844
845
846 <li class="md-nav__item">
847 <a href="../../../../javascript/legacy-api/" class="md-nav__link">
848 Legacy API
849 </a>
850 </li>
851
852
853
854
855
856
857
858 <li class="md-nav__item">
859 <a href="../../../../javascript/helper-functions/" class="md-nav__link">
860 Helper Functions
861 </a>
862 </li>
863
864
865
866
867
868
869
870 <li class="md-nav__item">
871 <a href="../../../../javascript/code-snippets/" class="md-nav__link">
872 Code Snippets
873 </a>
874 </li>
875
876
877
878 </ul>
879 </nav>
880 </li>
881
882
883
884
885
886
887
888
889
890
891
892 <li class="md-nav__item md-nav__item--nested">
893
894
895 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
896
897 <label class="md-nav__link" for="__nav_5">
898 Package Components
899 <span class="md-nav__icon md-icon"></span>
900 </label>
901 <nav class="md-nav" aria-label="Package Components" data-md-level="1">
902 <label class="md-nav__title" for="__nav_5">
903 <span class="md-nav__icon md-icon"></span>
904 Package Components
905 </label>
906 <ul class="md-nav__list" data-md-scrollfix>
907
908
909
910
911
912 <li class="md-nav__item">
913 <a href="../../../../package/package-xml/" class="md-nav__link">
914 package.xml
915 </a>
916 </li>
917
918
919
920
921
922
923
924
925 <li class="md-nav__item md-nav__item--nested">
926
927
928 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
929
930 <label class="md-nav__link" for="__nav_5_2">
931 PIPs
932 <span class="md-nav__icon md-icon"></span>
933 </label>
934 <nav class="md-nav" aria-label="PIPs" data-md-level="2">
935 <label class="md-nav__title" for="__nav_5_2">
936 <span class="md-nav__icon md-icon"></span>
937 PIPs
938 </label>
939 <ul class="md-nav__list" data-md-scrollfix>
940
941
942
943
944
945 <li class="md-nav__item">
946 <a href="../../../../package/pip/" class="md-nav__link">
947 Overview
948 </a>
949 </li>
950
951
952
953
954
955
956
957 <li class="md-nav__item">
958 <a href="../../../../package/pip/acl-option/" class="md-nav__link">
959 aclOption
960 </a>
961 </li>
962
963
964
965
966
967
968
969 <li class="md-nav__item">
970 <a href="../../../../package/pip/acp-menu/" class="md-nav__link">
971 acpMenu
972 </a>
973 </li>
974
975
976
977
978
979
980
981 <li class="md-nav__item">
982 <a href="../../../../package/pip/acp-search-provider/" class="md-nav__link">
983 acpSearchProvider
984 </a>
985 </li>
986
987
988
989
990
991
992
993 <li class="md-nav__item">
994 <a href="../../../../package/pip/acp-template/" class="md-nav__link">
995 acpTemplate
996 </a>
997 </li>
998
999
1000
1001
1002
1003
1004
1005 <li class="md-nav__item">
1006 <a href="../../../../package/pip/bbcode/" class="md-nav__link">
1007 bbcode
1008 </a>
1009 </li>
1010
1011
1012
1013
1014
1015
1016
1017 <li class="md-nav__item">
1018 <a href="../../../../package/pip/box/" class="md-nav__link">
1019 box
1020 </a>
1021 </li>
1022
1023
1024
1025
1026
1027
1028
1029 <li class="md-nav__item">
1030 <a href="../../../../package/pip/clipboard-action/" class="md-nav__link">
1031 clipboardAction
1032 </a>
1033 </li>
1034
1035
1036
1037
1038
1039
1040
1041 <li class="md-nav__item">
1042 <a href="../../../../package/pip/core-object/" class="md-nav__link">
1043 coreObject
1044 </a>
1045 </li>
1046
1047
1048
1049
1050
1051
1052
1053 <li class="md-nav__item">
1054 <a href="../../../../package/pip/cronjob/" class="md-nav__link">
1055 cronjob
1056 </a>
1057 </li>
1058
1059
1060
1061
1062
1063
1064
1065 <li class="md-nav__item">
1066 <a href="../../../../package/pip/event-listener/" class="md-nav__link">
1067 eventListener
1068 </a>
1069 </li>
1070
1071
1072
1073
1074
1075
1076
1077 <li class="md-nav__item">
1078 <a href="../../../../package/pip/file/" class="md-nav__link">
1079 file
1080 </a>
1081 </li>
1082
1083
1084
1085
1086
1087
1088
1089 <li class="md-nav__item">
1090 <a href="../../../../package/pip/language/" class="md-nav__link">
1091 language
1092 </a>
1093 </li>
1094
1095
1096
1097
1098
1099
1100
1101 <li class="md-nav__item">
1102 <a href="../../../../package/pip/media-provider/" class="md-nav__link">
1103 mediaProvider
1104 </a>
1105 </li>
1106
1107
1108
1109
1110
1111
1112
1113 <li class="md-nav__item">
1114 <a href="../../../../package/pip/menu/" class="md-nav__link">
1115 menu
1116 </a>
1117 </li>
1118
1119
1120
1121
1122
1123
1124
1125 <li class="md-nav__item">
1126 <a href="../../../../package/pip/menu-item/" class="md-nav__link">
1127 menuItem
1128 </a>
1129 </li>
1130
1131
1132
1133
1134
1135
1136
1137 <li class="md-nav__item">
1138 <a href="../../../../package/pip/object-type/" class="md-nav__link">
1139 objectType
1140 </a>
1141 </li>
1142
1143
1144
1145
1146
1147
1148
1149 <li class="md-nav__item">
1150 <a href="../../../../package/pip/object-type-definition/" class="md-nav__link">
1151 objectTypeDefinition
1152 </a>
1153 </li>
1154
1155
1156
1157
1158
1159
1160
1161 <li class="md-nav__item">
1162 <a href="../../../../package/pip/option/" class="md-nav__link">
1163 option
1164 </a>
1165 </li>
1166
1167
1168
1169
1170
1171
1172
1173 <li class="md-nav__item">
1174 <a href="../../../../package/pip/page/" class="md-nav__link">
1175 page
1176 </a>
1177 </li>
1178
1179
1180
1181
1182
1183
1184
1185 <li class="md-nav__item">
1186 <a href="../../../../package/pip/pip/" class="md-nav__link">
1187 pip
1188 </a>
1189 </li>
1190
1191
1192
1193
1194
1195
1196
1197 <li class="md-nav__item">
1198 <a href="../../../../package/pip/script/" class="md-nav__link">
1199 script
1200 </a>
1201 </li>
1202
1203
1204
1205
1206
1207
1208
1209 <li class="md-nav__item">
1210 <a href="../../../../package/pip/smiley/" class="md-nav__link">
1211 smiley
1212 </a>
1213 </li>
1214
1215
1216
1217
1218
1219
1220
1221 <li class="md-nav__item">
1222 <a href="../../../../package/pip/sql/" class="md-nav__link">
1223 sql
1224 </a>
1225 </li>
1226
1227
1228
1229
1230
1231
1232
1233 <li class="md-nav__item">
1234 <a href="../../../../package/pip/style/" class="md-nav__link">
1235 style
1236 </a>
1237 </li>
1238
1239
1240
1241
1242
1243
1244
1245 <li class="md-nav__item">
1246 <a href="../../../../package/pip/template/" class="md-nav__link">
1247 template
1248 </a>
1249 </li>
1250
1251
1252
1253
1254
1255
1256
1257 <li class="md-nav__item">
1258 <a href="../../../../package/pip/template-listener/" class="md-nav__link">
1259 templateListener
1260 </a>
1261 </li>
1262
1263
1264
1265
1266
1267
1268
1269 <li class="md-nav__item">
1270 <a href="../../../../package/pip/user-group-option/" class="md-nav__link">
1271 userGroupOption
1272 </a>
1273 </li>
1274
1275
1276
1277
1278
1279
1280
1281 <li class="md-nav__item">
1282 <a href="../../../../package/pip/user-menu/" class="md-nav__link">
1283 userMenu
1284 </a>
1285 </li>
1286
1287
1288
1289
1290
1291
1292
1293 <li class="md-nav__item">
1294 <a href="../../../../package/pip/user-notification-event/" class="md-nav__link">
1295 userNotificationEvent
1296 </a>
1297 </li>
1298
1299
1300
1301
1302
1303
1304
1305 <li class="md-nav__item">
1306 <a href="../../../../package/pip/user-option/" class="md-nav__link">
1307 userOption
1308 </a>
1309 </li>
1310
1311
1312
1313
1314
1315
1316
1317 <li class="md-nav__item">
1318 <a href="../../../../package/pip/user-profile-menu/" class="md-nav__link">
1319 userProfileMenu
1320 </a>
1321 </li>
1322
1323
1324
1325 </ul>
1326 </nav>
1327 </li>
1328
1329
1330
1331
1332
1333
1334
1335 <li class="md-nav__item">
1336 <a href="../../../../package/database-php-api/" class="md-nav__link">
1337 Database PHP API
1338 </a>
1339 </li>
1340
1341
1342
1343 </ul>
1344 </nav>
1345 </li>
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357 <li class="md-nav__item md-nav__item--nested">
1358
1359
1360 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
1361
1362 <label class="md-nav__link" for="__nav_6">
1363 Migration
1364 <span class="md-nav__icon md-icon"></span>
1365 </label>
1366 <nav class="md-nav" aria-label="Migration" data-md-level="1">
1367 <label class="md-nav__title" for="__nav_6">
1368 <span class="md-nav__icon md-icon"></span>
1369 Migration
1370 </label>
1371 <ul class="md-nav__list" data-md-scrollfix>
1372
1373
1374
1375
1376
1377
1378 <li class="md-nav__item md-nav__item--nested">
1379
1380
1381 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" >
1382
1383 <label class="md-nav__link" for="__nav_6_1">
1384 Migrating from WSC 5.3
1385 <span class="md-nav__icon md-icon"></span>
1386 </label>
1387 <nav class="md-nav" aria-label="Migrating from WSC 5.3" data-md-level="2">
1388 <label class="md-nav__title" for="__nav_6_1">
1389 <span class="md-nav__icon md-icon"></span>
1390 Migrating from WSC 5.3
1391 </label>
1392 <ul class="md-nav__list" data-md-scrollfix>
1393
1394
1395
1396
1397
1398 <li class="md-nav__item">
1399 <a href="../../../../migration/wsc53/php/" class="md-nav__link">
1400 PHP API
1401 </a>
1402 </li>
1403
1404
1405
1406
1407
1408
1409
1410 <li class="md-nav__item">
1411 <a href="../../../../migration/wsc53/session/" class="md-nav__link">
1412 Session Handling and Authentication
1413 </a>
1414 </li>
1415
1416
1417
1418
1419
1420
1421
1422 <li class="md-nav__item">
1423 <a href="../../../../migration/wsc53/javascript/" class="md-nav__link">
1424 JavaScript
1425 </a>
1426 </li>
1427
1428
1429
1430
1431
1432
1433
1434 <li class="md-nav__item">
1435 <a href="../../../../migration/wsc53/templates/" class="md-nav__link">
1436 Templates
1437 </a>
1438 </li>
1439
1440
1441
1442
1443
1444
1445
1446 <li class="md-nav__item">
1447 <a href="../../../../migration/wsc53/libraries/" class="md-nav__link">
1448 Third Party Libraries
1449 </a>
1450 </li>
1451
1452
1453
1454 </ul>
1455 </nav>
1456 </li>
1457
1458
1459
1460
1461
1462
1463
1464
1465 <li class="md-nav__item md-nav__item--nested">
1466
1467
1468 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" >
1469
1470 <label class="md-nav__link" for="__nav_6_2">
1471 Migrating from WSC 5.2
1472 <span class="md-nav__icon md-icon"></span>
1473 </label>
1474 <nav class="md-nav" aria-label="Migrating from WSC 5.2" data-md-level="2">
1475 <label class="md-nav__title" for="__nav_6_2">
1476 <span class="md-nav__icon md-icon"></span>
1477 Migrating from WSC 5.2
1478 </label>
1479 <ul class="md-nav__list" data-md-scrollfix>
1480
1481
1482
1483
1484
1485 <li class="md-nav__item">
1486 <a href="../../../../migration/wsc52/php/" class="md-nav__link">
1487 PHP API
1488 </a>
1489 </li>
1490
1491
1492
1493
1494
1495
1496
1497 <li class="md-nav__item">
1498 <a href="../../../../migration/wsc52/templates/" class="md-nav__link">
1499 Templates and Languages
1500 </a>
1501 </li>
1502
1503
1504
1505
1506
1507
1508
1509 <li class="md-nav__item">
1510 <a href="../../../../migration/wsc52/libraries/" class="md-nav__link">
1511 Third Party Libraries
1512 </a>
1513 </li>
1514
1515
1516
1517 </ul>
1518 </nav>
1519 </li>
1520
1521
1522
1523
1524
1525
1526
1527
1528 <li class="md-nav__item md-nav__item--nested">
1529
1530
1531 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" >
1532
1533 <label class="md-nav__link" for="__nav_6_3">
1534 Migrating from WSC 3.1
1535 <span class="md-nav__icon md-icon"></span>
1536 </label>
1537 <nav class="md-nav" aria-label="Migrating from WSC 3.1" data-md-level="2">
1538 <label class="md-nav__title" for="__nav_6_3">
1539 <span class="md-nav__icon md-icon"></span>
1540 Migrating from WSC 3.1
1541 </label>
1542 <ul class="md-nav__list" data-md-scrollfix>
1543
1544
1545
1546
1547
1548 <li class="md-nav__item">
1549 <a href="../../../../migration/wsc31/php/" class="md-nav__link">
1550 PHP API
1551 </a>
1552 </li>
1553
1554
1555
1556 </ul>
1557 </nav>
1558 </li>
1559
1560
1561
1562
1563
1564
1565
1566
1567 <li class="md-nav__item md-nav__item--nested">
1568
1569
1570 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" >
1571
1572 <label class="md-nav__link" for="__nav_6_4">
1573 Migrating from WSC 3.0
1574 <span class="md-nav__icon md-icon"></span>
1575 </label>
1576 <nav class="md-nav" aria-label="Migrating from WSC 3.0" data-md-level="2">
1577 <label class="md-nav__title" for="__nav_6_4">
1578 <span class="md-nav__icon md-icon"></span>
1579 Migrating from WSC 3.0
1580 </label>
1581 <ul class="md-nav__list" data-md-scrollfix>
1582
1583
1584
1585
1586
1587 <li class="md-nav__item">
1588 <a href="../../../../migration/wsc30/php/" class="md-nav__link">
1589 PHP API
1590 </a>
1591 </li>
1592
1593
1594
1595
1596
1597
1598
1599 <li class="md-nav__item">
1600 <a href="../../../../migration/wsc30/javascript/" class="md-nav__link">
1601 JavaScript API
1602 </a>
1603 </li>
1604
1605
1606
1607
1608
1609
1610
1611 <li class="md-nav__item">
1612 <a href="../../../../migration/wsc30/templates/" class="md-nav__link">
1613 Templates
1614 </a>
1615 </li>
1616
1617
1618
1619
1620
1621
1622
1623 <li class="md-nav__item">
1624 <a href="../../../../migration/wsc30/css/" class="md-nav__link">
1625 CSS
1626 </a>
1627 </li>
1628
1629
1630
1631
1632
1633
1634
1635 <li class="md-nav__item">
1636 <a href="../../../../migration/wsc30/package/" class="md-nav__link">
1637 Package Components
1638 </a>
1639 </li>
1640
1641
1642
1643 </ul>
1644 </nav>
1645 </li>
1646
1647
1648
1649
1650
1651
1652
1653
1654 <li class="md-nav__item md-nav__item--nested">
1655
1656
1657 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" >
1658
1659 <label class="md-nav__link" for="__nav_6_5">
1660 Migrating from WCF 2.1
1661 <span class="md-nav__icon md-icon"></span>
1662 </label>
1663 <nav class="md-nav" aria-label="Migrating from WCF 2.1" data-md-level="2">
1664 <label class="md-nav__title" for="__nav_6_5">
1665 <span class="md-nav__icon md-icon"></span>
1666 Migrating from WCF 2.1
1667 </label>
1668 <ul class="md-nav__list" data-md-scrollfix>
1669
1670
1671
1672
1673
1674 <li class="md-nav__item">
1675 <a href="../../../../migration/wcf21/php/" class="md-nav__link">
1676 PHP API
1677 </a>
1678 </li>
1679
1680
1681
1682
1683
1684
1685
1686 <li class="md-nav__item">
1687 <a href="../../../../migration/wcf21/templates/" class="md-nav__link">
1688 Templates
1689 </a>
1690 </li>
1691
1692
1693
1694
1695
1696
1697
1698 <li class="md-nav__item">
1699 <a href="../../../../migration/wcf21/css/" class="md-nav__link">
1700 CSS
1701 </a>
1702 </li>
1703
1704
1705
1706
1707
1708
1709
1710 <li class="md-nav__item">
1711 <a href="../../../../migration/wcf21/package/" class="md-nav__link">
1712 Package Components
1713 </a>
1714 </li>
1715
1716
1717
1718 </ul>
1719 </nav>
1720 </li>
1721
1722
1723
1724 </ul>
1725 </nav>
1726 </li>
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738 <li class="md-nav__item md-nav__item--nested">
1739
1740
1741 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
1742
1743 <label class="md-nav__link" for="__nav_7">
1744 Tutorials
1745 <span class="md-nav__icon md-icon"></span>
1746 </label>
1747 <nav class="md-nav" aria-label="Tutorials" data-md-level="1">
1748 <label class="md-nav__title" for="__nav_7">
1749 <span class="md-nav__icon md-icon"></span>
1750 Tutorials
1751 </label>
1752 <ul class="md-nav__list" data-md-scrollfix>
1753
1754
1755
1756
1757
1758
1759 <li class="md-nav__item md-nav__item--nested">
1760
1761
1762 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" >
1763
1764 <label class="md-nav__link" for="__nav_7_1">
1765 Tutorial Series
1766 <span class="md-nav__icon md-icon"></span>
1767 </label>
1768 <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2">
1769 <label class="md-nav__title" for="__nav_7_1">
1770 <span class="md-nav__icon md-icon"></span>
1771 Tutorial Series
1772 </label>
1773 <ul class="md-nav__list" data-md-scrollfix>
1774
1775
1776
1777
1778
1779 <li class="md-nav__item">
1780 <a href="../../../../tutorial/series/overview/" class="md-nav__link">
1781 Overview
1782 </a>
1783 </li>
1784
1785
1786
1787
1788
1789
1790
1791 <li class="md-nav__item">
1792 <a href="../../../../tutorial/series/part_1/" class="md-nav__link">
1793 Part 1
1794 </a>
1795 </li>
1796
1797
1798
1799
1800
1801
1802
1803 <li class="md-nav__item">
1804 <a href="../../../../tutorial/series/part_2/" class="md-nav__link">
1805 Part 2
1806 </a>
1807 </li>
1808
1809
1810
1811
1812
1813
1814
1815 <li class="md-nav__item">
1816 <a href="../../../../tutorial/series/part_3/" class="md-nav__link">
1817 Part 3
1818 </a>
1819 </li>
1820
1821
1822
1823 </ul>
1824 </nav>
1825 </li>
1826
1827
1828
1829 </ul>
1830 </nav>
1831 </li>
1832
1833
1834
1835 </ul>
1836</nav>
1837 </div>
1838 </div>
1839 </div>
1840
1841
1842
1843 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1844 <div class="md-sidebar__scrollwrap">
1845 <div class="md-sidebar__inner">
1846
1847<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1848
1849
1850
1851
1852
1853 <label class="md-nav__title" for="__toc">
1854 <span class="md-nav__icon md-icon"></span>
1855 Table of contents
1856 </label>
1857 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1858
1859 <li class="md-nav__item">
1860 <a href="#iformfielddependency" class="md-nav__link">
1861 IFormFieldDependency
1862 </a>
1863
1864</li>
1865
1866 <li class="md-nav__item">
1867 <a href="#default-dependencies" class="md-nav__link">
1868 Default Dependencies
1869 </a>
1870
1871</li>
1872
1873 <li class="md-nav__item">
1874 <a href="#javascript-implementation" class="md-nav__link">
1875 JavaScript Implementation
1876 </a>
1877
1878</li>
1879
1880 <li class="md-nav__item">
1881 <a href="#examples" class="md-nav__link">
1882 Examples
1883 </a>
1884
1885</li>
1886
1887 </ul>
1888
1889</nav>
1890 </div>
1891 </div>
1892 </div>
1893
1894
1895 <div class="md-content" data-md-component="content">
1896 <article class="md-content__inner md-typeset">
1897
1898
9b8bddda 1899 <a href="https://github.com/WoltLab/docs.woltlab.com/edit/5.4/docs/php/api/form_builder/dependencies.md" title="Edit this page" class="md-content__button md-icon">
7124f4cb
WG
1900 <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>
1901 </a>
1902
0c5338dd
TD
1903
1904 <h1 id="form-node-dependencies">Form Node Dependencies<a class="headerlink" href="#form-node-dependencies" title="Permanent link">#</a></h1>
1905<p>Form node dependencies allow to make parts of a form dynamically available or unavailable depending on the values of form fields.
1906Dependencies are always added to the object whose visibility is determined by certain form fields.
1907They are <strong>not</strong> added to the form field’s whose values determine the visibility!
1908An example is a text form field that should only be available if a certain option from a single selection form field is selected.
1909Form builder’s dependency system supports such scenarios and also automatically making form containers unavailable once all of its children are unavailable.</p>
1910<p>If a form node has multiple dependencies and one of them is not met, the form node is unavailable.
1911A form node not being available due to dependencies has to the following consequences:</p>
1912<ul>
1913<li>The form field value is not validated. It is, however, read from the request data as all request data needs to be read first so that the dependencies can determine whether they are met or not.</li>
1914<li>No data is collected for the form field and returned by <code>IFormDocument::getData()</code>.</li>
1915<li>In the actual form, the form field will be hidden via JavaScript.</li>
1916</ul>
1917<h2 id="iformfielddependency"><code>IFormFieldDependency</code><a class="headerlink" href="#iformfielddependency" title="Permanent link">#</a></h2>
1918<p>The basis of the dependencies is the <code>IFormFieldDependency</code> interface that has to be implemented by every dependency class.
1919The interface requires the following methods:</p>
1920<ul>
1921<li><code>checkDependency()</code> checks if the dependency is met, thus if the dependant form field should be considered available.</li>
1922<li><code>dependentNode(IFormNode $node)</code> and <code>getDependentNode()</code> can be used to set and get the node whose availability depends on the referenced form field.
1923 <code>TFormNode::addDependency()</code> automatically calls <code>dependentNode(IFormNode $node)</code> with itself as the dependent node, thus the dependent node is automatically set by the API.</li>
1924<li><code>field(IFormField $field)</code> and <code>getField()</code> can be used to set and get the form field that influences the availability of the dependent node.</li>
1925<li><code>fieldId($fieldId)</code> and <code>getFieldId()</code> can be used to set and get the id of the form field that influences the availability of the dependent node.</li>
1926<li><code>getHtml()</code> returns JavaScript code required to ensure the dependency in the form output.</li>
1927<li><code>getId()</code> returns the id of the dependency used to identify multiple dependencies of the same form node.</li>
1928<li><code>static create($id)</code> is the factory method that has to be used to create new dependencies with the given id.</li>
1929</ul>
1930<p><code>AbstractFormFieldDependency</code> provides default implementations for all methods except for <code>checkDependency()</code>.</p>
1931<p>Using <code>fieldId($fieldId)</code> instead of <code>field(IFormField $field)</code> makes sense when adding the dependency directly when setting up the form:</p>
1932<div class="highlight"><pre><span></span><code><span class="nv">$container</span><span class="o">-&gt;</span><span class="na">appendChildren</span><span class="p">([</span>
1933 <span class="nx">FooField</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">),</span>
1934
1935 <span class="nx">BarField</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;b&#39;</span><span class="p">)</span>
1936 <span class="o">-&gt;</span><span class="na">addDependency</span><span class="p">(</span>
1937 <span class="nx">BazDependency</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
1938 <span class="o">-&gt;</span><span class="na">fieldId</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
1939 <span class="p">)</span>
1940<span class="p">]);</span>
1941</code></pre></div>
0c5338dd
TD
1942<p>Here, without an additional assignment, the first field with id <code>a</code> cannot be accessed thus <code>fieldId($fieldId)</code> should be used as the id of the relevant field is known.
1943When the form is built, all dependencies that only know the id of the relevant field and do not have a reference for the actual object are populated with the actual form field objects.</p>
1944<h2 id="default-dependencies">Default Dependencies<a class="headerlink" href="#default-dependencies" title="Permanent link">#</a></h2>
1945<p>WoltLab Suite Core delivers the following two default dependency classes by default:</p>
1946<ul>
1947<li><code>NonEmptyFormFieldDependency</code> can be used to ensure that a node is only shown if the value of the referenced form field is not empty (being empty is determined using PHP’s <code>empty</code> function).</li>
1948<li><code>ValueFormFieldDependency</code> can be used to ensure that a node is only shown if the value of the referenced form field is from a specified list of of values (see methods <code>values($values)</code> and <code>getValues()</code>).
1949 Additionally, via <code>negate($negate = true)</code> and <code>isNegated()</code>, the locic can also be inverted by requiring the value of the referenced form field not to be from a specified list of values.</li>
1950</ul>
1951<h2 id="javascript-implementation">JavaScript Implementation<a class="headerlink" href="#javascript-implementation" title="Permanent link">#</a></h2>
1952<p>To ensure that dependent node are correctly shown and hidden when changing the value of referenced form fields, every PHP dependency class has a corresponding JavaScript module that checks the dependency in the browser.
1953Every JavaScript dependency has to extend <code>WoltLabSuite/Core/Form/Builder/Field/Dependency/Abstract</code> and implement the <code>checkDependency()</code> function, the JavaScript version of <code>IFormFieldDependency::checkDependency()</code>.</p>
1954<p>All of the JavaScript dependency objects automatically register themselves during initialization with the <code>WoltLabSuite/Core/Form/Builder/Field/Dependency/Manager</code> which takes care of checking the dependencies at the correct points in time.</p>
1955<p>Additionally, the dependency manager also ensures that form containers in which all children are hidden due to dependencies are also hidden and, once any child becomes available again, makes the container also available again.
1956Every form container has to create a matching form container dependency object from a module based on <code>WoltLabSuite/Core/Form/Builder/Field/Dependency/Abstract</code>.</p>
1957<h2 id="examples">Examples<a class="headerlink" href="#examples" title="Permanent link">#</a></h2>
1958<p>If <code>$booleanFormField</code> is an instance of <code>BooleanFormField</code> and the text form field <code>$textFormField</code> should only be available if “Yes” has been selected, the following condition has to be set up:</p>
1959<div class="highlight"><pre><span></span><code><span class="nv">$textFormField</span><span class="o">-&gt;</span><span class="na">addDependency</span><span class="p">(</span>
1960 <span class="nx">NonEmptyFormFieldDependency</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;booleanFormField&#39;</span><span class="p">)</span>
1961 <span class="o">-&gt;</span><span class="na">field</span><span class="p">(</span><span class="nv">$booleanFormField</span><span class="p">)</span>
1962<span class="p">);</span>
1963</code></pre></div>
0c5338dd
TD
1964<p>If <code>$singleSelectionFormField</code> is an instance of <code>SingleSelectionFormField</code> that offers the options <code>1</code>, <code>2</code>, and <code>3</code> and <code>$textFormField</code> should only be available if <code>1</code> or <code>3</code> is selected, the following condition has to be set up:</p>
1965<div class="highlight"><pre><span></span><code><span class="nv">$textFormField</span><span class="o">-&gt;</span><span class="na">addDependency</span><span class="p">(</span>
1966 <span class="nx">NonEmptyFormFieldDependency</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;singleSelectionFormField&#39;</span><span class="p">)</span>
1967 <span class="o">-&gt;</span><span class="na">field</span><span class="p">(</span><span class="nv">$singleSelectionFormField</span><span class="p">)</span>
1968 <span class="o">-&gt;</span><span class="na">values</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
1969<span class="p">);</span>
1970</code></pre></div>
0c5338dd
TD
1971<p>If, in contrast, <code>$singleSelectionFormField</code> has many available options and <code>7</code> is the only option for which <code>$textFormField</code> should <strong>not</strong> be available, <code>negate()</code> should be used:</p>
1972<div class="highlight"><pre><span></span><code><span class="nv">$textFormField</span><span class="o">-&gt;</span><span class="na">addDependency</span><span class="p">(</span>
1973 <span class="nx">NonEmptyFormFieldDependency</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;singleSelectionFormField&#39;</span><span class="p">)</span>
1974 <span class="o">-&gt;</span><span class="na">field</span><span class="p">(</span><span class="nv">$singleSelectionFormField</span><span class="p">)</span>
1975 <span class="o">-&gt;</span><span class="na">values</span><span class="p">([</span><span class="mi">7</span><span class="p">])</span>
1976 <span class="o">-&gt;</span><span class="na">negate</span><span class="p">()</span>
1977<span class="p">);</span>
1978</code></pre></div>
1979
4a5c32e1
WG
1980
1981
1982
1983<hr>
1984<div class="md-source-date">
1985 <small>
1986
1987 Last update: 2021-01-15
1988
1989 </small>
1990</div>
1991
1992
0c5338dd
TD
1993
1994
1995
1996
1997
1998
1999 </article>
2000 </div>
2001 </div>
2002 </main>
2003
2004
2005<footer class="md-footer">
2006
2007 <nav class="md-footer__inner md-grid" aria-label="Footer">
2008
2009 <a href="../validation_data/" class="md-footer__link md-footer__link--prev" rel="prev">
2010 <div class="md-footer__button md-icon">
2011 <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>
2012 </div>
2013 <div class="md-footer__title">
2014 <div class="md-ellipsis">
2015 <span class="md-footer__direction">
2016 Previous
2017 </span>
2018 Validation and Data
2019 </div>
2020 </div>
2021 </a>
2022
2023
2024 <a href="../../package_installation_plugins/" class="md-footer__link md-footer__link--next" rel="next">
2025 <div class="md-footer__title">
2026 <div class="md-ellipsis">
2027 <span class="md-footer__direction">
2028 Next
2029 </span>
2030 Package Installation Plugins
2031 </div>
2032 </div>
2033 <div class="md-footer__button md-icon">
2034 <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>
2035 </div>
2036 </a>
2037
2038 </nav>
2039
2040 <div class="md-footer-meta md-typeset">
2041 <div class="md-footer-meta__inner md-grid">
2042 <div class="md-footer-copyright">
2043
2044 <div class="md-footer-copyright__highlight">
2045 Copyright © 2020 WoltLab GmbH
2046 </div>
2047
2048 Made with
2049 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2050 Material for MkDocs
2051 </a>
fb88dc6e 2052
0c5338dd
TD
2053 </div>
2054 <div class="md-footer-copyright">
2055 <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a>
2056 <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a>
2057</div>
2058 </div>
2059 </div>
2060</footer>
2061
2062 </div>
2063 <div class="md-dialog" data-md-component="dialog">
2064 <div class="md-dialog__inner md-typeset"></div>
2065 </div>
2066 <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>
2067
2068
fb88dc6e 2069 <script src="../../../../assets/javascripts/bundle.5cf3e710.min.js"></script>
0c5338dd
TD
2070
2071
2072 </body>
2073</html>