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:

  1. /**
  2. * Implementation of hook_menu();
  3. */
  4. function z_menu() {
  5.   $items['admin/z'] = array(
  6.     'title' => t('Z'),
  7.     'access arguments' => array('access administration pages'),
  8.     'description' => 'Testowy moduł Z.',
  9.     'position' => 'left',
  10.     'page callback' => 'system_admin_menu_block_page',
  11.     'file path' => drupal_get_path('module', 'system'),
  12.     'file' => 'system.admin.inc',
  13.     'weight' => -20
  14.   );
  15.  
  16.   return $items;
  17. }

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.

  1. /**
  2. * Implementation of hook_menu();
  3. */
  4. function a_menu() {
  5.   $items['admin/z/a'] = array(
  6.     'title' => t('A - Z'),
  7.     'access arguments' => array('access administration pages'),
  8.     'description' => 'Opcja A dla testowego modułu Z.',
  9.     'page callback' => 'a_admin',
  10.   );
  11.  
  12.   return $items;
  13. }

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ź

Zawartość pola nie będzie udostępniana publicznie.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Znaki końca linii i akapitu dodawane są automatycznie.
  • Dostępne jest formatowanie fragmentów kodu źródłowego używając tagów: <code>, <blockcode>, <bash>, <c>, <cpp>, <css>, <drupal5>, <drupal6>, <html>, <java>, <js>, <perl>, <php>, <python>, <ruby>, <sql>.

Więcej informacji na temat formatowania

  ___   ___    ___    _____  __  __
/ __| | \ | \ |_ _| \ \/ /
\__ \ | |) | | |) | | | > <
|___/ |___/ |___/ |_| /_/\_\
Proszę wpisać litery (tylko wielkie litery) z napisu w stylu ASCII.