Jaka jest podstawowa koncepcja haczyków?


120

Jestem pośrednikiem w PHP. Szlifować swoje umiejętności zacznę naukę Drupal 7. Podczas nauki Drupal architektury koncepcje, pojęcia haki i ładującego zastanawiało mnie wiele. Przeczytałem książkę „Opracowanie Pro Drupal” i trochę dokumentacji na drupal.org, ale jest dla mnie tak zaawansowany, aby dowiedzieć się, jak działają haki w Drupal, aby wyświetlić stronę internetową.

Czy ktoś może mi powiedzieć, czym są haczyki w prostych słowach?

Odpowiedzi:


107

Inne odpowiedzi są świetne, dokładne, szczegółowe, ale nie jestem pewien, czy są to „proste słowa” wyjaśniające gołe kości koncepcji, której szukał pytający.

Myślę o hakach jako punkcie, w którym kod zatrzymuje się i krzyczy: „ Czy ktoś jeszcze ma coś do dodania? ”. Każdy moduł może mieć funkcję, która odpowiada na to i jest wyzwalana odpowiednimi danymi przekazywanymi do niego w tym punkcie kodu.

Dobrym prostym przykładem jest hook_node_delete () . Każdy moduł może go użyć, aby za każdym razem usuwać węzeł. Dokumenty mówią ci, że ten haczyk przekazuje moduł obiektu usuniętego węzła do pracy i przedstawia inne przydatne informacje, takie jak dokładny czas jego wywołania (np. Że jest to zanim dane węzła zostaną faktycznie usunięte z bazy danych) i gdzie w kodzie Drupala nazywa się hak (który może być więcej niż jednym miejscem).

Możesz zbadać, jakie haki istnieją i dowiedzieć się, jakie dane są do nich przekazywane, badając rzeczy zaczynające się od „hook_” w interfejsie Drupal .

Haki działają według konwencji nazw: hook_node_deletena naszym przykładzie, gdy proces usuwania węzła osiąga punkt, w którym wywoływany jest hak, dla każdego modułu z funkcją taką jak ta, w [modulename]_node_delete()której słowo hook w nazwie haka jest zastępowane nazwą modułu (np. my_amazing_module_node_delete()), wywoływane są te funkcje.

Dlaczego? Tak więc każdy moduł może zrobić wszystko w tych kluczowych punktach: na przykład możesz spojrzeć na usunięty węzeł i robić rzeczy, które spełniają określony warunek (powiedz, napisz do administratora lub uruchom jakiś długi proces).

Niektóre zaczepy pozwalają zmieniać rzeczy, które zostały wygenerowane tuż przed ich przetworzeniem. Na przykład hook_menu_alter () przekazuje ci bieżące pozycje menu wygenerowane przez system. Każdy moduł może zdefiniować funkcję some_modulename_menu_alter () i spojrzeć na nich, opcjonalnie je zmienić (usunąć niektóre, dodać niektóre, posortować je ...) i przekazać ponownie zmienione menu.

To proste, naprawdę potężne i stanowi sedno tego, jak Drupal działa jako system modułowy. Implementacje haków są sercem większości modułów Drupal.

Przeglądając kod modułu Drupal, możesz zauważyć, które funkcje pochodzą z haków (w przeciwieństwie do funkcji, które są po prostu wywoływane z samego kodu modułu), ponieważ społeczność Drupal egzekwuje konwencję, w której każda implementacja haka ma komentarz przed nim w ten sposób (zwróć uwagę na bit „Implements hook _...”):

/**
 * Implements hook_some_hook().
 *
 * Some descriptive summary of what this does
 */
function my_amazing_module_some_hook() {

Niektóre moduły działające jako interfejsy API definiują własne zaczepy. Na przykład Widoki definiują wiele zaczepów, które pozwalają dodawać, odczytywać i edytować dane w różnych punktach procesu tworzenia lub wyświetlania widoku. Informacje o zaczepach utworzonych w niestandardowych modułach można znaleźć z dwóch miejsc (zakładając, że moduł jest zgodny z konwencjami itp.):

Bootstrapping jest, jak wyjaśnili inni, w zasadzie uruchamianiem - nie powielę innych dobrych jasnych wyjaśnień.


53

Haki, są głównie implementacjami wzorców Gość i Obserwator .

Jedną z najczęstszych implementacji hooków jest hook_menu , które pozwala modułom rejestrować nowe ścieżki w systemie Drupal.

function my_module_menu() {
  return array('myawesomefrontpage' => array(
    'page callback' => 'function_that_will_render_frontpage'
  ));
}

Bardzo częstym wzorem w Drupal jest posiadanie [DATATYPE]_infohaka i [DATATYPE]_info_alterhaka. Jeśli chcesz utworzyć nowy typ pola, można wdrożyć odpowiednie field_info -hook, a jeśli chcesz manipulować istniejącego, można wdrożyć odpowiednie field_info_alter -hook.

Edit: Jak Chx Punkty w komentarzach, wzór obserwator jest obiektem zorientowanych, który Drupal 7 jest nadal, w większości nie. Istnieje jednak strona wiki, programowanie Drupal z perspektywy obiektowej (Utworzona przez JonBob 4 kwietnia 2005 r.), Która wyjaśnia, w jaki sposób Drupal używa wzorców kodu obiektowego pomimo tego. Warto zauważyć, że wspomina o obserwatorach, ale nie o gościach.

Uwaga na temat Drupala 8 Jest to wciąż dość wcześnie i może ulec zmianie, ale chcę dodać, że podczas gdy haki były de facto standardem w dodawaniu funkcjonalności do Drupala, koncepcja wtyczek stanie się znacznie bardziej widoczna w Drupal 8 i da nam nowe sposoby interakcji z Core. Odpowiedni problem i dokumentacja .


2
Nie daj się zwieść wzorom projektowym OOP. To nie jest jedno. Haki Drupal są AOP. Patrz poniżej.

@chx, chociaż swobodnie przyznam, że wiesz lepiej ode mnie :) a twoja odpowiedź jest poprawna (głosowałem za nią), nie interpretuję tego jako mojej błędnej odpowiedzi. :) Jeśli się nie zgadzasz, chciałbym dowiedzieć się, jak źle zrozumiałem wzorce ich wdrażania.
Letharion

4
Wikipedia: „Wzorzec obserwatora to wzorzec projektowania oprogramowania, w którym obiekt, zwany podmiotem, utrzymuje listę osób na nim zależnych, zwanych obserwatorami”, tutaj nie ma obiektu trzymającego obserwatorów. Odwiedzający jest mroczny, ale obowiązuje ta sama ogólna zasada: to, co nie jest OOP, nie może mieć wzorów OOP.

33

Mówiąc w skrócie, haki są rodzajem mostów, które umożliwiają modułom interakcję ze sobą, zmianę ich struktury i danych, dostarczanie nowych danych itp.

W większości przypadków słowo hook_w nazwach funkcji jest zastępowane nazwą Twojego modułu, co zapewnia modułowi dostęp do operacji innego modułu. Na przykład moduł rdzenia drupal zwany „węzłem” wywołuje różne haki. Jedną z nich jest hook_node_updatewywoływana za każdym razem, gdy istniejący węzeł jest aktualizowany. Po wywołaniu tego hooka wywoływana jest mymoduleimplementacja twojego modułu (powiedzmy, że go nazywamy ) hook_node_update, co w tym przypadku będzie funkcją w pliku .module modułu o nazwie mymodule_node_update(Oczywiście ta funkcja może znajdować się w dowolnym pliku w folderze modułu, o ile jest również zawarty w pliku .module). Do tego zaczepu zostaną również przekazane niezbędne parametry (zmienne), których może użyć, zmodyfikować i / lub wrócić do funkcji, która wywołała zaczep.

Kiedy po raz pierwszy zacząłem uczyć się Drupala, byłem na tej samej łodzi, co ty, na początku trochę trudno jest pojąć, ale kiedy go zdobędziesz, to takie proste i intuicyjne. Powodzenia.


1
dzięki za odpowiedź. bardzo mi pomóż. czy możesz wyjaśnić, czym jest koncepcja bootstrapu w Drupal i jak haczyki traktowane są w bootstrapie prostymi słowami, kiedy wyjaśnisz poprzednią odpowiedź.
GiLL

@Bayasa, proszę tutaj wpisać własne przemyślenia. Po prostu dodaję własne. Możesz myśleć o buczeniu jako uruchamianiu komputera. Drupal ma wiele interfejsów API, w tym bazę danych, pliki i formularze. Opierają się one na „platformie”. Podczas ładowania Drupal definiuje te funkcje i inne ustawienia (połączenie z bazą danych, foldery plików itp.), Aby reszta systemu mogła kontynuować pracę od reszty.
AyeshK

32

Jeden z głównych programistów napisał jakiś czas temu artykuł zatytułowany „Programowanie Drupal z perspektywy obiektowej” . Wyjaśnia, jak haczyki można traktować jako implementację wielu typowych wzorców projektowych . Najlepsze wyjaśnienie haczyków pochodzi z artykułu:

System haczyków Drupala stanowi podstawę dla abstrakcji interfejsu. Haki określają operacje, które można wykonać na module lub przez moduł. Jeśli moduł implementuje hak, zawiera umowę o wykonanie określonego zadania lub zwrócenie określonego rodzaju informacji po uruchomieniu haka. Kod wywołujący nie musi wiedzieć nic o module ani o sposobie implementacji hooka, aby uzyskać użyteczną pracę wykonaną przez wywołanie hooka.


1
Naprawiłem autorstwo tego artykułu zgodnie z drupal.org/node/19964

@chx, dzięki. Zastanawiam się teraz nad usunięciem tej odpowiedzi. Zamieściłem go b / c Zwykle wykonywałem dużo pracy OO w zwykłym C i przyzwyczaiłem się do koncepcji OO bez rzeczywistych obiektów. Masz jednak rację co do relacji punkt / tkacz. Nie jestem jednak pewien, czy cytat jest dokładnym opisem aspektu (ignorując część „abstrakcja interfejsu”).
mpdonadio

21

Bootstrap jest procesem, przez który Drupal buduje stronę, w zasadzie po kolei w całym rdzeniu, motywie i kodzie modułu.
Zasadniczo uruchamia się Drupal i przygotowuje się do pracy jako CMS.

Jest sprytny, ponieważ pozwala nam umieścić haczyki w dowolnym miejscu w naszych modułach i motywach, a proces ładowania początkowego zapewnia, że ​​zostaną uruchomione w odpowiednim momencie.
Na przykład, jeśli użyjesz „hook_form_alter”, aby dodać niestandardowe pole wyboru do formularza, bootstrap Drupala upewni się, że uruchamia ten kod, tuż przed jego renderowaniem.

Jednym z problemów z bootstrap jest to, że cały proces wymaga czasu, nawet jeśli zwracasz tylko niewielką ilość danych. Gdy używasz Drupala z modułem usług jako API i zwraca wiele małych odpowiedzi XHTML lub JSON, uruchamianie całego bootstrapu nie jest zbyt wydajne. Niektórzy sprytni ludzie szukają w Drupal 8 sprytnych rozwiązań.

Ale do renderowania normalnych stron Drupala proces ładowania początkowego działa świetnie, używa systemu buforowania Drupals, aby przyspieszyć i daje całkowitą kontrolę nad każdą częścią witryny. Jeśli uważasz, że Twoja strona jest powolna, zawsze możesz użyć czegoś takiego jak APC lub MemCached, aby przyspieszyć działanie.

Mam nadzieję, że moja odpowiedź była dokładna i wyjaśnia po prostu dla ciebie, nie jestem ekspertem, ale myślę, że tak to działa.


15

Bootstrap to proces, podczas którego Drupal inicjuje się; proces faktycznie obejmuje:

  • Ustawienie błędu i procedury obsługi wyjątków
  • Inicjalizacja wartości niektórych spec-globalnych zmiennych zawartych w $_SERVER
  • Inicjowanie niektórych zmiennych za pomocą init_set()
  • Znajdowanie buforowanej wersji strony do wyświetlenia
  • Inicjowanie bazy danych
  • Ustawianie procedur ładujących pliki, gdy klasa lub interfejs nie zostanie znaleziony
  • Inicjalizacja zmiennych Drupal
  • Inicjowanie sesji PHP
  • Inicjowanie zmiennej językowej
  • Ładowanie włączonych modułów

Niektóre operacje, które opisałem, są specyficzne dla Drupala 7 lub nowszego, ale większość operacji jest niezależna od wersji Drupal.

Hak to funkcja PHP, którą można wywołać z Drupala lub modułów innych firm, gdy jest to konieczne do wykonania zadania. Zamiast mieć prefiksowaną listę funkcji do wywołania, lista jest budowana sprawdzając włączone moduły i funkcje, które implementują.
Na przykład wykorzystuje Drupal hook_node_update(); gdy węzeł jest zapisywany za pomocą node_save () , wykonywany jest następujący kod.

// Call the node specific callback (if any). This can be
// node_invoke($node, 'insert') or
// node_invoke($node, 'update').
node_invoke($node, $op);

To, co robi node_invoke () , to:

  • Uzyskiwanie listy wszystkich włączonych modułów
  • Sprawdzanie, czy włączone moduły mają funkcję, której nazwa kończy się na „_node_update” i zaczyna się od krótkiej nazwy modułu
  • Wywołanie tej funkcji, przekazanie $nodejako parametr

Haki mogą zapisywać własne dane w bazie danych lub zmieniać wartość zwracaną z funkcji. Ostatnim przypadkiem jest na przykład to, co dzieje się z hook_form_alter () , która zmienia wartość $formprzekazywaną jako odwołanie do drupal_prepare_form () .

Haki Drupal są zwykle wywoływane przy użyciu trzech funkcji:

drupal_alter()jest funkcją używaną do wywoływania określonych haków, których celem jest zmiana danych przekazywanych jako odniesienie, takich jak hook_form_alter () , hook_hook_info_alter () i hook_tokens_alter () .

Istnieją inne funkcje, które są używane do wywoływania przechwyceń, takie jak node_invoke(), ale funkcje te zasadniczo wykorzystują jedną z wymienionych wcześniej funkcji.


12

Haki są punktami i module_invoke_allsą tkaczem (niestety nie jesteśmy jednoznaczni w implementacji i istnieją inne funkcje tkania). O ile mi wiadomo, Drupal jest jedynym systemem implementującym AOP z funkcjami PHP.

Zobacz inne wyjaśnienie dotyczące sposobu działania AOP w Drupal?


Czy uważasz, że artykuł Jhodgdona (wspomniany w mojej odpowiedzi) jest dokładny?
mpdonadio

2
To jest artykuł Jonboba z 2005 roku. Uznanie autorstwa jest błędne. Omówiłbym to, tak.

6

Jeśli chcesz zobaczyć haki, do których Drupal pozwala ci dzwonić, przejdź do api.drupal.org , przejdź do pola wyszukiwania i wpisz „hook_”. To da ci dużą listę większości haków zdefiniowanych przez Drupala. Zrób to samo dla „_alter” i zobacz jeszcze więcej.

Strona węzłów interfejsu API węzła oferuje chronologiczną listę wszystkich zaczepów wywołanych podczas operacji węzła. Możesz zobaczyć moduł Node oraz systemy Entity i Field, które nawzajem się nawracają przy wywoływaniu haków.

Na przykład, jeśli przewiniesz w dół i spojrzysz na sekcję node_load(): Moduł Node da ci hook_load (), a następnie przekaże kontrolę systemowi encji, który ładuje niektóre pola. Istnieje cały szereg haczyków polowych, których nie ma na liście, a następnie, gdy to się kończy, system wywołuje system hook_entity_load(), zanim przekaże kontrolę z powrotem do węzła, który wywołuje hook_node_load().

Daje to Twojemu kodowi szansę działania na dany węzeł, gdy jest on ładowany, kawałek po kawałku. Nauczenie się tych haków oraz kiedy i dlaczego się je nazywa, jest częścią przygody kodowania Drupal. :-)

Inne systemy również mają haczyki. Takich jak hook_init()i hook_boot(). To prowadzi do części twojego pytania dotyczącej bootstrapu. hook_boot()jest wywoływany przez Drupala przed załadowaniem systemu buforowania. Więc jeśli moduł musi coś zrobić, zanim Drupal naprawdę się uruchomi, a chcesz, aby Twój kod działał niezależnie od buforowania, to zaimplementuj hook_boot(). W przeciwnym razie, jeśli zależy Ci tylko na stronach, które nie są buforowane, zaimplementujesz hook_init().

Daje to możliwość implementacji czegoś na wczesnym etapie procesu ładowania, zanim Drupal w pełni się uruchomi, a jednocześnie daje pewną elastyczność co do tego, który punkt w procesie chcesz przechwycić.

Jeśli musisz się upewnić, że Drupal uruchomił się do pewnego momentu, zanim przejdziesz dalej, możesz zadzwonić drupal_bootstrap(). Jeśli przejdziesz do tej dokumentacji, zobaczysz dostępne poziomy ładowania początkowego, od zera do wszystkiego.

I wreszcie, w projekcie przykładów możesz zobaczyć obszernie udokumentowany kod dla dowolnego podsystemu .


OP prosi o definicję haka, a nie listę haków używanych przez Drupala.
kiamlaluno

6

Haki to funkcje php, bloki konstrukcyjne oparte na konwencjach nazewnictwa „twoja_nazwa_modulu”, mają ułatwić programistom tworzenie modułów .

Moduły to prawdziwa okazja, ponieważ umożliwiają zarówno CORE, jak i niestandardowe funkcje w twoim systemie Drupal. Zatem moduły są wykonane z haków, a kiedy moduł jest aktywowany w twojej instalacji Drupala, jego funkcje haków można wywoływać z innych modułów dzięki funkcji module.inc module_invoke_all ($ hook) lub module_invoke.

Dlatego, aby właściwie zrozumieć, czym są haczyki, powinieneś naprawdę ubrudzić sobie ręce i wypróbować rozwój modułu. W tym celu zacznij od pobrania i wypróbowania niektórych przykładów Drupala dla programistów , powinieneś również zapoznać się z tworzeniem modułów .

Oto kilka przydatnych przykładów Drupala dla programistów wspomnianych powyżej:

Przykład implementacji hook_block_view () w module block_example

/**
 * @file examples/block_example/block_example.module line 127
 *
 * Implements hook_block_view().
 *
 * This hook generates the contents of the blocks themselves.
 */
function block_example_block_view($delta = '') {
  //The $delta parameter tells us which block is being requested.
  switch ($delta) {
    case 'example_configurable_text':
      // The subject is displayed at the top of the block. Note that it
      // should be passed through t() for translation. The title configured
      // for the block using Drupal UI supercedes this one.
      $block['subject'] = t('Title of first block (example_configurable_text)');

Ten hak umożliwia dostęp do tworzenia bloków Drupala w celu wyświetlania niestandardowych bloków w witrynie. Jest to możliwe, ponieważ block.module ma funkcję _block_render_block, która umożliwia wszystkim modułom zdefiniowanie ich widoku hook_block (zwróć uwagę na ostatnią linię module_invoke):

/**
 * @file modules/block/block.module, line 838
 *
 * Render the content and subject for a set of blocks.
 *
 * @param $region_blocks
 *   An array of block objects such as returned for one region by _block_load_blocks().
 *
 * @return
 *   An array of visible blocks as expected by drupal_render().
 */
function _block_render_blocks($region_blocks) {
  ...
  foreach ($region_blocks as $key => $block) {
    ...
    $array = module_invoke($block->module, 'block_view', $block->delta);

Przykład implementacji hook_menu () w module render_example

/**
 * @file examples/render_example/render_example.module line 22
 * 
 * Implements hook_menu().
 */
function render_example_menu() {
  ...
  $items['examples/render_example/arrays'] = array(
    'title' => 'Render array examples',
    'page callback' => 'render_example_arrays',
    'access callback' => TRUE,
  );

Ten hak jest połączony z systemem routingu adresów URL Drupala i definiuje wzorce adresów URL z powiązanymi wywołaniami zwrotnymi renderowania używanymi przez moduł. Jest wywoływany z system.module .

Jeśli chodzi o bootstrap, to po prostu musisz wiedzieć, że jest wykonywany przy każdym żądaniu strony. Naprawdę radzę przeczytać tę odpowiedź dotyczącą przepełnienia stosu , wyjaśnia ona, w jaki sposób bootstrap i zaczepy są powiązane, ale oddzielone.

Jeśli chodzi o wyświetlanie strony internetowej, wyświetlanie html w witrynie Drupala jest najczęściej uzyskiwane za pomocą tablic renderujących i tematów.


3

Gdziekolwiek moduł wywołuje moduł_implements () http://api.drupal.org/api/drupal/includes%21module.inc/function/module_implements/7 Drupal uruchomi wszystkie poprawnie nazwane funkcje w odpowiedniej kolejności na podstawie ich wagi. Są to tak zwane funkcje przechwytujące, ponieważ w dokumentacji modułów wykorzystujących moduły_implementacyjne widzisz takie rzeczy, jak hook_menu (gdy menu wywołuje wszystkie funkcje zaprojektowane do zwracania pozycji menu). Słowo „hook” musi zostać zastąpione nazwą modułu wdrażającego go, a Drupal zajmie się resztą.

Istnieje również funkcja drupal_alter (), która uruchamia wszystkie poprawnie nazwane funkcje alter, z zamiarem umożliwienia ci zmiany rzeczy, które zostały wcześniej zarejestrowane przez inny hook.

Zasadniczo zmienne przekazują argumenty przez referencję, dzięki czemu można edytować obiekt bezpośrednio, podczas gdy „normalne” haki zwykle powodują zwrot nowych rzeczy.

Chodzi o to, że każdy moduł (w tym własny) można łatwo rozszerzyć, prosząc Drupala o wywołanie wszystkich wymaganych funkcji przechwytujących i odzyskanie tego, co wracają do przetworzenia. Moduł wywołujący funkcje przechwytujące nie musi nic wiedzieć o modułach, które implementują przechwytywanie, a moduły wdrażające przechwytywanie tak naprawdę nie muszą wiedzieć nic o module wywołującym przechwytywanie. Jedyne, co oba moduły muszą wiedzieć, to struktura zwracanych lub zmienianych danych.

W praktyce najczęściej stosuje się haczyki do:

  • reagować na zdarzenia, np. wywoływanie hook_user_login podczas logowania użytkownika
  • zarejestruj coś nowego, co można wykorzystać do rozszerzenia systemu, np. hook_menu
  • kompozycja / renderowanie HTML lub budowanie / sprawdzanie poprawności / przesyłanie formularzy

1

Masz wiele odpowiedzi powyżej, ale chcę dać odpowiedź w znacznie prostszy sposób, aby zrozumieć bardzo podstawową koncepcję haków. Haki są tak naprawdę wbudowane w funkcje drupala, aby zarządzać różnymi rzeczami i wykonywać różne zadania w rdzeniu, możesz zsynchronizować własne funkcje z tymi wbudowanymi funkcjami drupala, aby dodać ich funkcjonalność do własnych funkcji, wywołując różne haki.

Mam nadzieję, że zrozumiesz!


1

Dla mnie chodzi przede wszystkim o funkcję module_implements, jeśli chodzi o hooks and core (D7). Jedną rzeczą, którą uważam za kluczową do zrozumienia jest to, że pisząc hak, aby coś zmodyfikować, w żadnym wypadku nie masz ostatniego słowa na temat tego, co dzieje się ze strukturami danych, z którymi masz do czynienia. Twój haczyk po prostu dostaje się do linii (kolejki) funkcji, które RÓWNIEŻ działają na tych samych strukturach danych, niezależnie od tego, czy są to menu, łącza_menu, bloki, węzły, użytkownicy lub jakakolwiek jednostka lub element renderujący.

Aby naprawdę zobaczyć, jak haczyki są wykorzystywane w oczekiwany sposób, musisz wiedzieć lub wiedzieć, gdzie jesteś (twój hak) w linii. Jest to określane na podstawie masy twojego mule. Rdzeń Drupala po prostu wywołuje odpowiednio nazwane haki w porządku rosnącym i wszystko, co dzieje się z danymi, ma miejsce.

Wcześniej pisałem haczyki, które nie przyniosły żadnego efektu, ale po godzinach walenia głową dowiedziałem się, że masa mojego modułu była zbyt lekka, a kolejne haki skutecznie nie robiły tego, co zrobiłem, lub całkowicie ignorowały to wszystko razem.

Dobrze napisany haczyk nie „poradzi sobie” ani „nie zmusi” do bycia ostatnim, ale „umieści się z innymi”, upewniając się, że zachowują struktury danych zgodnie z oczekiwaniami reszty haczyków wzdłuż linii.

A mówiąc o „linii” haków. Przez lata trollowałem google dla Drupala, ten obraz wydaje się być dobrą reprezentacją listy możliwych procesów wstępnych i procesów.
wprowadź opis zdjęcia tutaj


1

W znacznie prostszy sposób haki pomagają programistom zmienić istniejącą funkcjonalność zgodnie z wymaganiami bez wprowadzania zmian w istniejącym kodzie. Bardziej jak funkcja abstrakcyjna w php.

Przykład: Utworzyłeś moduł rezerwacji biletu autobusowego. Zgodnie z Twoim kodem, jeśli bilet jest raz zarezerwowany, nie można edytować lokalizacji odbioru, co było twoim wymaganiem dla tego projektu. Załóżmy, że twój przyjaciel potrzebuje tego samego modułu dla podobnych wymagań, z tym wyjątkiem, że użytkownik może zmienić lokalizację odbioru. Jakoś musi użyć twojego modułu, a ty nie chcesz, żeby wprowadzał zmiany w kodzie. Udostępniasz interfejs (w naszym przypadku podpięcie), w którym mógłby wprowadzić zmiany bez wprowadzania zmian w module.

W drupal do drupal-7 mamy haczyki na moduły i motywy. Aby dowiedzieć się, jak działa hook, sprawdź haki drupal.org, aby utworzyć niestandardowy hook, sprawdź ten link


0

Haki Zezwól modułom na interakcję z rdzeniem Drupala. System modułowy Drupala opiera się na koncepcji „haków”. Hak to funkcja PHP o nazwie foo_bar (), gdzie „foo” to nazwa modułu (którego nazwa pliku to foo.module), a „bar” to nazwa haka.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.