Construction of menu system

Poniższe krótkie opracowanie wyjaśnia budowę stosowanego systemu menu, powinno być pomocne dla osób chcących ręcznie zmienić konfigurację, bez użycia Edytora menu (wtyczka dołączona do skryptu).

^ Wprowadzenie

System menu został znacząco zmodernizowany w stosunku do używanego w wersjach sprzed 4.5. Budowa tablicy jest teraz znacznie czytelniejsza, dzięki zastosowaniu pod tablic z kluczami. Ponadto, konfiguracja została wydzielona do własnego pliku (conf/menu.php). Nowością jest także możliwość stworzenia podmenu (na chwilę obecną tylko jednego poziomu) oraz oddzielne definiowanie pozycji menu dla każdego z poziomów użytkownika (niezalogowany, użytkownik oraz administrator).

Niewłaściwa edycja pliku może spowodować dziwne wyświetlanie się pozycji menu lub nawet niewyświetlenie się całej strony. Dlatego zaleca się bardzo ostrożną edycję i stworzenie kopii zapasowej oryginalnej konfiguracji!

^ Budowa

Plik conf/menu.php zawiera tablicę $Menu składającą się z trzech elementów (indeks liczbowy odpowiada oznaczeniu poziomu użytkownika), przykład:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
$Menu = array (
    array (
        'general' => array (
            'dynamicsubmenu' => 1,
            ),
        'technical' => array (
            'dynamicsubmenu' => 1,
            ),
        'geoip' => array (
            'dynamicsubmenu' => 1,
            ),
        'time' => array (
            'dynamicsubmenu' => 1,
            ),
        'detailed' => array (
            ),
        'admin' => array (
            ),
        ),
    array (
        'general' => array (
            'dynamicsubmenu' => 1,
            ),
        'technical' => array (
            'dynamicsubmenu' => 1,
            ),
        'geoip' => array (
            'dynamicsubmenu' => 1,
            ),
        'time' => array (
            'dynamicsubmenu' => 1,
            ),
        'detailed' => array (
            ),
        'admin' => array (
            ),
        ),
    array (
        'general' => array (
            'dynamicsubmenu' => 1,
            ),
        'technical' => array (
            'dynamicsubmenu' => 1,
            ),
        'geoip' => array (
            'dynamicsubmenu' => 1,
            ),
        'time' => array (
            'dynamicsubmenu' => 1,
            ),
        'detailed' => array (
            ),
        'admin' => array (
            'submenu' => array (
                'main' => array (),
                'configuration' => array (),
                'advanced' => array (),
                'blacklist' => array (),
                'backups' => array (),
                'reset' => array (),
                'logs' => array (),
                'plugins' => array (),
                'documentation' => array (
                    'link' => 'http://estats.emdek.cba.pl/index.php/pl/docs'
                    ),
                'forum' => array (
                    'link' => 'http://estats.emdek.cba.pl/forum/'
                    ),
                ),
            ),
        ),
    );
?>

Każda pod tablica posiada klucze będące identyfikatorami podstron (dla każdej pod tablicy muszą być unikalne i powinny być takie same jak identyfikatory podstron jeśli mają być linkami do nich). Tablica przypisana do klucza może zawierać następujące elementy (nie są obowiązkowe, jeśli pominiemy je, a strona jest "zwykłą" podstroną statystyk lub panelu administratora, to zostaną automatycznie wygenerowane):

  • text - krótki tekst wyświetlany w menu;
  • link - adres, pod który prowadzi link w menu;
  • submenu - zawiera definicję opcjonalnego podmenu (budowa taka sama jak menu dla danego poziomu użytkownika, ale bez zagnieżdżania kolejnych poziomów podmenu);
  • dynamicsubmenu - wartość 1 oznacza, że dla elementu zostanie wygenerowane dynamiczne podmenu (dla wybranych podstron);

Nie deklaruj pustych kluczy jeśli nie chcesz ich użyć.

^ Działanie

Menu jest wyświetlane tylko jeśli nie wystąpił błąd krytyczny i nie jest aktywny instalator.

Wybór ustawień menu jest zależny od wartość stałej ESTATS_USERLEVEL (jest używana do wyboru pozycji tablicy w zależności od jej wartości).

Każda z pozycji tablicy jest przygotowywana za pomocą funkcji e_menu_entry, która używa elementu motywu menuentry, oraz udostępnia dla nich następujące zmienne motywu:

  • text - tekst pozycji w menu, używa klucza text, jeśli dostępny, w pozostałych przypadkach generuje go na podstawie tablicy $Titles;
  • link - link pozycji menu, używa klucza link, jeśli dostępny, w pozostałych przypadkach generuje link w postaci:
    1
    
    $GLOBALS['Theme']['path'].($Parent?$Parent.'/':'').$Key
  • class - zawiera wartość active jeśli dana pozycja menu ma być ustawiona jako aktywna (jednocześnie może być aktywna pozycja głównego menu i pozycja jego podmenu);
  • id - identyfikator pozycji (budowa: [identyfikator_pozycji_nadrzędnej_]identyfikator_pozycji);
  • accesskey - wybrany znak skrótu dla atrybutu accesskey;
  • tabindex - numer linku dla atrybutu tabindex;
  • submenu - podmenu, jeśli dostępne (jego wyświetlanie jest regulowane przełącznikiem o budowie: submenu-id);

Ostatnim krokiem jest ustawienie zmiennej motywu menu (przy użyciu elementu menu, do którego wstawiane są wygenerowane pozycje menu). Wyświetlanie menu jest także regulowane przełącznikiem menu. Dodatkowo elementy menu dostępne są jako zmienne motywu, o nazwach o budowie: menu-id oraz submenu-id.

^ Zakończenie

Obecny system menu daje wystarczające możliwości (w końcu to nie CMS ;-)) więc prawdopodobnie nie doczeka się większych zmian w najbliższej przyszłości (być może później zostanie dodane także wsparcie dla wielopoziomowych menu). Jeśli masz jakieś pytania lub propozycje, to pisz na forum :-).

^ Patrz także

Ostatnia modyfikacja: 2008-02-16 16:42:15 CET

Falling in love is not at all the most stupid thing that people do — but gravitation cannot be held responsible for it.

Albert Einstein