@@ -292,10 +292,9 @@ public function checkAccess(array $options)
292292 * This method will called itself if an item has a 'submenu' key.
293293 *
294294 * @param array $items
295- * @param array|null $parentItem
296295 * @return array
297296 */
298- protected function generateItems ($ items, & $ parentItem = null )
297+ protected function generateItems ($ items )
299298 {
300299 foreach ($ items as $ id => &$ values ) {
301300 $ values = $ this ->setDefaultValues ($ id , $ values );
@@ -309,13 +308,22 @@ protected function generateItems($items, &$parentItem = null)
309308
310309 $ values ['url ' ] = $ this ->generateUrl ($ values );
311310
312- if ($ this ->isActiveUrl ($ values )) {
313- $ this ->markAsActive ($ values , $ parentItem );
314- $ this ->currentId = $ id ;
311+ if (isset ($ values ['submenu ' ])) {
312+ $ values ['submenu ' ] = $ this ->generateItems ($ values ['submenu ' ]);
315313 }
316314
317- if (isset ($ values ['submenu ' ])) {
318- $ values ['submenu ' ] = $ this ->generateItems ($ values ['submenu ' ], $ values );
315+ if ($ this ->isActiveUrl ($ values )) {
316+ $ values ['active ' ] = true ;
317+ $ this ->currentId = $ id ;
318+ } elseif (isset ($ values ['submenu ' ])) {
319+ // Check if there is an active item in the submenu, if
320+ // so it'll mark the current item as active as well.
321+ foreach ($ values ['submenu ' ] as $ subitem ) {
322+ if ($ subitem ['active ' ]) {
323+ $ values ['active ' ] = true ;
324+ break ;
325+ }
326+ }
319327 }
320328
321329 if ($ values ['active ' ]) {
@@ -377,22 +385,6 @@ protected function isActiveUrl(array $values)
377385 return strpos ($ this ->activeUrl , $ values ['url ' ]) === 0 ;
378386 }
379387
380- /**
381- * Marks an item an it's optional parent item as active
382- *
383- * @param array $values
384- * @param array|null $parentItem
385- */
386- protected function markAsActive (&$ values , &$ parentItem = null )
387- {
388- // Set this item as active
389- $ values ['active ' ] = true ;
390- // If this is a submenu, set the parent's item as active as well
391- if ($ parentItem != null ) {
392- $ parentItem ['active ' ] = true ;
393- }
394- }
395-
396388 /**
397389 * Returns the menu's title. The title is determined following this order:
398390 *
0 commit comments