Moduł do góry - czyli module weights

W ramach wolnego czasu realizuję projekt na potrzeby którego tworzę bardzo rozbudowany moduł składający się z kilku mniejszych. Pisząc wszystko oczywiście pod Drupala napotkałem ciekawy problemem. Otóż mając dwa moduły, nazwijmy je A oraz Z zakładam że moduł Z jest głównym, wiodącym modułem i np. w nim są zadeklarowane główne ścieżki menu do administracji i ogólnie ważniejsze rzeczy które składają wszystko w całość. Żeby wszystko poprawnie działało hooki modułu A powinny być wykonane po wcześniejszym wykonaniu hooków modułu Z jednak tak się nie dzieje z powodu alfabetycznej – domyślnej kolejności.
Przeprowadźmy małą analizę tworząc dwa proste moduły z hookiem menu(). Kawałek kodu dla modułu Z:
-
/**
-
* Implementation of hook_menu();
-
*/
-
function z_menu() {
-
'title' => t('Z'),
-
'description' => 'Testowy moduł Z.',
-
'position' => 'left',
-
'page callback' => 'system_admin_menu_block_page',
-
'file path' => drupal_get_path('module', 'system'),
-
'file' => 'system.admin.inc',
-
'weight' => -20
-
);
-
-
return $items;
-
}
Zadeklarowaliśmy właśnie nową gałąź w panelu administracyjnym. Teraz w module A dodamy jedną opcję która powinna być elementem podrzędnym wcześniej ustalonego drzewa z modułu Z.
Co się stanie jeżeli włączymy nasze moduły? Oczywiście nasz link admin/z/a będzie dział, również admin/z będzie działał jednak na stronie admin/z nie będziemy widzieli naszej opcji zadeklarowanej w module A. Wszystko przez wcześniej wspomniane wykonywanie kolejnych hooków modułów według kolejności alfabetycznej (wszystkie mają taką samą wagę).
Z pomocą przychodzi moduł o nazwie Utility który pozwala ustalać wagę a tym samym kolejność wykonywania modułów. W skład modułu Utility wchodzą aż 4 moduły:
- Access Permissions Fieldsets Manager
- Module Weights
- System Module
- Util
Do naszych potrzeb wymagane jest włączenie 3 z powyższej listy, moduł Access Permissions Fieldsets Manager nie jest wymagany do ustawiania wag modułów.
Po zainstalowaniu Module Weights na stronie z listą modułów pojawi się dodatkowe pole tekstowe w którym wpisujemy wagę danego modułu. Liczba mniejsza to lżejsza waga i automatycznie wcześniejsze wywołanie modułu, liczba większa to analogicznie późniejsze wywołanie modułu.


Odpowiedzi
Dodaj nową odpowiedź