11<?php
22
33/**
4- * Nette Forms & Bootstap v3 rendering example.
4+ * Nette Forms & Bootstap v5 rendering example.
55 */
66
77declare (strict_types=1 );
1818Debugger::enable ();
1919
2020
21- function makeBootstrap3 (Form $ form ): void
21+ function makeBootstrap5 (Form $ form ): void
2222{
2323 $ renderer = $ form ->getRenderer ();
2424 $ renderer ->wrappers ['controls ' ]['container ' ] = null ;
25- $ renderer ->wrappers ['pair ' ]['container ' ] = 'div class=form-group ' ;
26- $ renderer ->wrappers ['pair ' ]['.error ' ] = 'has-error ' ;
25+ $ renderer ->wrappers ['pair ' ]['container ' ] = 'div class="mb-3 row" ' ;
26+ $ renderer ->wrappers ['label ' ]['container ' ] = 'div class="col-sm-3 col-form-label" ' ;
2727 $ renderer ->wrappers ['control ' ]['container ' ] = 'div class=col-sm-9 ' ;
28- $ renderer ->wrappers ['label ' ]['container ' ] = 'div class="col-sm-3 control-label" ' ;
29- $ renderer ->wrappers ['control ' ]['description ' ] = 'span class=help-block ' ;
30- $ renderer ->wrappers ['control ' ]['errorcontainer ' ] = 'span class=help-block ' ;
31- $ form -> getElementPrototype ()-> class ( ' form-horizontal ' ) ;
28+ $ renderer ->wrappers ['control ' ]['description ' ] = 'span class=form-text ' ;
29+ $ renderer ->wrappers ['control ' ]['errorcontainer ' ] = 'span class=invalid-feedback ' ;
30+ $ renderer ->wrappers ['control ' ]['.error ' ] = 'is-invalid ' ;
31+ $ renderer -> wrappers [ ' error ' ][ ' container ' ] = ' div class="alert alert-danger" ' ;
3232
3333 foreach ($ form ->getControls () as $ control ) {
3434 $ type = $ control ->getOption ('type ' );
3535 if ($ type === 'button ' ) {
36- $ control ->getControlPrototype ()->addClass (empty ($ usedPrimary ) ? 'btn btn-primary ' : 'btn btn-default ' );
36+ $ control ->getControlPrototype ()->addClass (empty ($ usedPrimary ) ? 'btn btn-primary ' : 'btn btn-secondary ' );
3737 $ usedPrimary = true ;
3838
39- } elseif (in_array ($ type , ['text ' , 'textarea ' , 'select ' ], true )) {
39+ } elseif (in_array ($ type , ['text ' , 'textarea ' , 'select ' , ' datetime ' , ' file ' ], true )) {
4040 $ control ->getControlPrototype ()->addClass ('form-control ' );
4141
4242 } elseif (in_array ($ type , ['checkbox ' , 'radio ' ], true )) {
43- $ control ->getSeparatorPrototype ()->setName ('div ' )->addClass ($ type );
43+ if ($ control instanceof Nette \Forms \Controls \Checkbox) {
44+ $ control ->getLabelPrototype ()->addClass ('form-check-label ' );
45+ } else {
46+ $ control ->getItemLabelPrototype ()->addClass ('form-check-label ' );
47+ }
48+ $ control ->getControlPrototype ()->addClass ('form-check-input ' );
49+ $ control ->getContainerPrototype ()->setName ('div ' )->addClass ('form-check ' );
50+
51+ } elseif ($ type === 'color ' ) {
52+ $ control ->getControlPrototype ()->addClass ('form-control form-control-color ' );
4453 }
4554 }
4655}
4756
4857
4958$ form = new Form ;
50- $ form ->onRender [] = 'makeBootstrap3 ' ;
59+ $ form ->onRender [] = 'makeBootstrap5 ' ;
5160
5261$ form ->addGroup ('Personal data ' );
5362$ form ->addText ('name ' , 'Your name ' )
54- ->setRequired ('Enter your name ' );
63+ ->setRequired ('Enter your name ' )
64+ ->setOption ('description ' , 'Name and surname ' );
65+
66+ $ form ->addDate ('birth ' , 'Date of birth ' );
5567
5668$ form ->addRadioList ('gender ' , 'Your gender ' , [
5769 'male ' , 'female ' ,
@@ -67,6 +79,8 @@ function makeBootstrap3(Form $form): void
6779
6880$ form ->addCheckbox ('send ' , 'Ship to address ' );
6981
82+ $ form ->addColor ('color ' , 'Favourite colour ' );
83+
7084$ form ->addGroup ('Your account ' );
7185$ form ->addPassword ('password ' , 'Choose password ' );
7286$ form ->addUpload ('avatar ' , 'Picture ' );
@@ -87,14 +101,12 @@ function makeBootstrap3(Form $form): void
87101?>
88102<!DOCTYPE html>
89103<meta charset="utf-8">
90- <title>Nette Forms & Bootstrap v3 rendering example</title>
104+ <title>Nette Forms & Bootstrap v5 rendering example</title>
91105
92- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/ css/bootstrap.min.css">
106+ <link rel="stylesheet" href="https://
cdn.jsdelivr.net/npm/[email protected] /dist/ css/bootstrap.min.css
" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous ">
93107
94108<div class="container">
95- <div class="page-header">
96- <h1>Nette Forms & Bootstrap v3 rendering example</h1>
97- </div>
109+ <h1>Nette Forms & Bootstrap v5 rendering example</h1>
98110
99111 <?php $ form ->render () ?>
100112</div>
0 commit comments