Przejdź do głównej zawartości

"Waga" modułów w Drupal 7

Problem:
Potrzebujesz aby Twój  moduł wywoływał hook_form_alter jako ostatni - ma operować na formularzu już gotowym, przetworzonym przez wszystkie inne moduły.

Rozwiązaniem jest ustawienie kolejności wywołań danego hooka.
w D6 dało się to zrobić edytując bazę danych, co nie było zbyt elastycznym i eleganckim rozwiązaniem. Na szczęście w D7 stworzono hook_module_implements_alter który pozwala na kontrolę kolejności wywołań danego hooka przez określone przez programistę  moduły.
W najprostszej wersji wystarczy podać tylko nasz moduł i będzie on wtedy ustawiony na końcu kolejki.

Ponieważ sama dokumentacja hooka nie jest zbyt bogata polecam świetny tutorial na ten temat.

Rozwiązanie to działa w moim przypadku, gdzie musiałem wywołać hook_form_alter()  swojego modułu  po tym jak  Profile2 dodał swoje pola do formularza rejestracji użytkownika.


/**
* Implements hook_module_implements_alter()
*/
function alter_register_worker_module_implements_alter(&$implementations, $hook) {
  //Any change here requires Caches to be cleared.
//dpm($implementations);
  switch ($hook) {
    case 'form_alter':
      $m1 = $implementations['mojmodul'];
      unset($implementations['mojmodul']);

      $implementations['mojmodul'] = $m1;
      break;
  }
//dpm($implementations);
}



Jeśli odkomentujesz funkcje dpm() wyswietli się kolejność modułów - przed i po naszej implementacji.

Komentarze

Popularne posty z tego bloga

Praca z domu - subiektywne spojrzenie szarego programisty.

Siednij ze se na gronicku W lesie albo przy strumycku I posłuchoj co ci w kodzie gro

Zbuduj sobie zespół. Z klocków Lego.

Najlepsze architektury, wymagania i projekty powstają w samoorganizujących się zespołach. 

Potworne debugowanie Actionscript

Przyznam się do czegoś... nie ogarniam debuggera Flasha do Actionscript3... Na pewno nie ma tam okienka z wylistowanymi instancjami obiektów? Ze zmiennymi? Jeśli jest i ktoś mi to udowodni, to będę szczęśliwszym człowiekiem, ale i tak dalej będę korzystał z wynalazku o wesołej nazwie De MonsterDebugger . Jest to zewnętrzna aplikacja napisana w AIR , która jest takim samobieżnym   Firebugiem dla deweloperów flashowych. Ogólna zasada działania opiera się na zaimportowaniu klasy MonsterDebugger i stworzeniu jej obiektu. Potem możemy się już bawić używając jej różnorakich metod, z których podstawową jest oczywiście trace(). Nie jest ona potrzebna we Flash IDE, ale okazuje się być bezcenna, gdy piszemy w samym FlashDevelop . Polecam przejrzeć szczegółowy i ładnie przedstawiony spis ficzerów DeMonstera.