Mam problem z obejściem obsługi menu w stanie aktywnym, gdy menu nie jest używane do routingu.
Pochodzę z Drupal, gdzie system menu obsługuje również routing. więc ustawianie stanu aktywnego i stanu aktywnego szlaku jest obsługiwane przez trasę (która działa również jako system renderowania menu).
Teraz wiele frameworków PHP ma klasy routerów, które obsługują routing. To wydaje się być dobrym rozwiązaniem, ponieważ menu nie powinno być świadome testu POST || OPCJE || ... prośby.
Ale pisząc frontend, mocno zakodowałem menu. Lub przechowywanie wszystkiego w bazie danych i przekazywanie tych wartości do widoku. Nie podoba mi się to podejście, ponieważ tworzysz kopię tego, co już napisałeś w routerze, ale teraz używasz klasy Menu.
Przykład:
Route::get('/somewhere','routename.somewhere','showStuffController');
Route::post('/somewhere','routename.somewhere','saveStuffController');
Menu::add('label.somewhere','routename.somewhere');
Rozdzielasz tutaj obawy, więc to miłe. Ale Menu w dużym stopniu zależy od trasy, aby ustawić stan aktywny. Menu będzie musiało również wiedzieć o hierarchii, aby ustawić aktywny ślad.
Tak więc, ustawienie aktywnej ścieżki i aktywnych klas statusu jest w rzeczywistości sprawą widoku. Ale mając
if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; }
wszystkie twoje poglądy wydają się głupie. Następnie dodaj wszystkie te irytujące szlaki aktywne, jeśli to jest prawdziwy wzdęcie. Radzenie sobie z tym, zanim widok zostanie zrenderowany, a ustawienie flagi aktywnego szlaku na prawdę wydaje się tak brzydkie, jak to wiem (foreach zapętla wszystkie dzieci, które przewijają się nad wszystkimi dziećmi ...)
Moje pytanie brzmi:
Czy istnieje wzór lub sprytny sposób na uzyskanie tego czystszego, lepszego, ...? Jak należy poradzić sobie z „problemem” aktywnego szlaku?
Myślałem o renderowaniu dziecka -> rodzica. Więc zacznij od reklamy na najgłębszym poziomie, a potem idź w górę. Ale wtedy dziecko wie o swoim rodzicu, ale rodzic nic nie wie o swoich dzieciach (wydaje się dziwny).