Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Menu panelu admina - warstwa prezentacji, Kiedy nie wszystkie linki są dostępne dla każdego
WebCM
post 3.07.2013, 18:13:35
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


Jest panel admina. Aby uniezależnić warstwę logiki od prezentacji, menu powinno być wyświetlane w szablonach. Jednak nie wszystkie moduły są dostępne dla każdego użytkownika - to zależy od jego uprawnień. Jeśli gdzieś nie ma dostępu, po prostu nie pokazujmy mu linku. Jak to rozwiązać?

1. Sposób. Pozycje zależą od warstwy logiki
Warstwa logiki narzuca budowę menu.

Kod PHP:
  1. #Build module list
  2. $modules = array(
  3. array($lang['cats'], 'cats', 'C'),
  4. array($lang['polls'], 'polls', 'Q'),
  5. array($lang['ipages'], 'pages', 'P'),
  6. array($lang['users'], 'users', 'U'),
  7. array($lang['groups'], 'groups', 'G'),
  8. array($lang['log'], 'log', 'L'),
  9. array($lang['mailing'], 'mailing', 'M'),
  10. array($lang['config'], 'config', 'CFG'),
  11. array($lang['nav'], 'menu', 'N'),
  12. array($lang['dbcopy'], 'db', 'DB'),
  13. array($lang['plugs'], 'plugins', 'E')
  14. );
  15.  
  16. #Pobierz wpisy menu dla rozszerzeń
  17. $res = $db->query('...zapytanie...');
  18. foreach($res as $x)
  19. {
  20. $modules[] = array($x['text'],$x['file'],$x['ID']);
  21. }
  22.  
  23. #Zbuduj menu tak, aby pojawiły się tylko wpisy, do jakich admin ma dostęp
  24. $menu = array();
  25. foreach($modules as $x)
  26. {
  27. if(ma_dostep($x[2])) $menu[] = array('text'=>$x[0],'url'=>url($x[1],null,'admin'),'class'=>$x[1]);
  28. }
  29.  
  30. #Dodaj do szablonu zmienną $menu
  31. $szablon->dodaj('menu', $menu);
Szablon:
  1. <!-- START menu -->
  2. <a href="{url}" class="A{class}">{text}</a>
  3. <!-- STOP -->

+ Po dodaniu lub usunięciu modułu nie trzeba edytować szablonu skórki
+ Można wprowadzić możliwość zmiany kolejności elementów w menu
- Zmiana układu menu jest praktycznie niemożliwa
- W przypadku podziału na bloki wpłynie negatywnie na wydajność

Można posegregować linki w grupy, co ułatwia zmianę układu menu (np. na rozwijane menu), ale wciąż są duże ograniczenia (np. rozwijane menu wielopoziomowe), więcej obliczeń w warstwie logiki i podwójna pętla w szablonie:
  1. <!-- START blok_menu -->
  2. <!-- START link_menu -->
  3. <a href="{url}" class="A{class}">{text}</a>
  4. <!-- STOP -->
  5. <!-- STOP -->

2. Sposób. Wszystko w szablonach.
Nie budujemy menu w warstwie logiki. Wszystkim zajmują się szablony:
  1. <div id="menu">
  2. <!-- IF ma_dostep(C) -->
  3. <a href="url(kategorie)">{lang.kategorie}</a>
  4. <!-- END -->
  5. <!-- IF ma_dostep(G) -->
  6. <a href="url(grupy)">{lang.grupy}</a>
  7. <!-- END -->
  8. <!-- IF link_menu --> <!-- można wcześniej zdefiniować dodatkowe zmienne -->
  9. <a href="{link_menu}">{lang.menu}</a>
  10. <!-- END -->
  11. </div>

+ Można dowolnie zmodyfikować układ menu w szablonie
+ Warstwa logiki nie narzuca nam konkretnego układu i kolejności
- Trudniejsza edycja szablonu - elementy warstwy logiki w szablonie
- Kiedy dodamy lub usuniemy moduł panelu admina, trzeba poprawić szablon wszystkich skórek!

Jak widać, oba rozwiązania mają swoje wady. Które jest najbardziej optymalne i elastyczne według was?


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:20