@@ -118,30 +118,66 @@ public function getPreparedItems($disabledItems = null)
118118 {
119119 $ items = [];
120120 foreach ($ this ->items as $ key => $ item ) {
121- if (!($ item instanceof Nette \Utils \Html)) {
122- $ el = Nette \Utils \Html::el ('option ' )->value ($ key )->setText ($ item );
123-
124- } else {
125- $ el = $ item ;
121+ $ elements = [];
122+ if (is_array ($ item )) {
123+ $ groupItems = [];
124+ foreach ($ item as $ innerKey => $ innerItem ) {
125+ $ el = $ this ->getPreparedElement ($ innerKey , $ innerItem , $ disabledItems );
126+ $ this ->addElementToItemsList ($ groupItems , $ el );
127+
128+ }
129+ $ items [$ key ] = [
130+ 'key ' => $ key ,
131+ 'value ' => $ groupItems ,
132+ ];
126133 }
127-
128- // disable element
129- if (is_array ($ disabledItems ) && array_key_exists ($ key , $ disabledItems ) && $ disabledItems [$ key ] === true ) {
130- $ el ->disabled (true );
134+ else {
135+ $ el = $ this ->getPreparedElement ($ key , $ item , $ disabledItems );
136+ $ this ->addElementToItemsList ($ items , $ el );
131137 }
138+ }
139+ return $ items ;
140+ }
132141
133- $ items [$ key ] = [
134- 'key ' => $ el ->getValue (),
135- 'value ' => $ el ->getText (),
136- ];
137142
138- end ($ items );
139- $ lKey = key ($ items );
140- foreach ($ el ->attrs as $ attr => $ val ) {
141- $ items [$ lKey ]['attributes ' ][$ attr ] = $ val ;
142- }
143+ /**
144+ * @param string $key
145+ * @param mixed $item
146+ * @param array|null $disabledItems
147+ * @return Nette\Utils\Html
148+ */
149+ private function getPreparedElement ($ key , $ item , $ disabledItems = null )
150+ {
151+ if (!($ item instanceof Nette \Utils \Html)) {
152+ $ el = Nette \Utils \Html::el ('option ' )->value ($ key )->setText ($ item );
153+
154+ } else {
155+ $ el = $ item ;
143156 }
144157
145- return $ items ;
158+ // disable element
159+ if (is_array ($ disabledItems ) && array_key_exists ($ key , $ disabledItems ) && $ disabledItems [$ key ] === true ) {
160+ $ el ->disabled (true );
161+ }
162+
163+ return $ el ;
164+ }
165+
166+
167+ /**
168+ * @param array &$items
169+ * @param Nette\Utils\Html $el
170+ */
171+ private function addElementToItemsList (&$ items , $ el )
172+ {
173+ $ items [$ el ->getAttribute ('value ' )] = [
174+ 'key ' => $ el ->getValue (),
175+ 'value ' => $ el ->getText (),
176+ ];
177+ end ($ items );
178+ $ lKey = key ($ items );
179+ foreach ($ el ->attrs as $ attr => $ val ) {
180+ $ items [$ lKey ]['attributes ' ][$ attr ] = $ val ;
181+ }
146182 }
147183}
0 commit comments