it-swarm-eu.dev

Jaké jsou různé typy háčků?

V starý příspěvek na blog Larry Garfield odkazuje na háčky typu „registry-style“ a hook_nodeapi.

Pokud jde o rozebírání různých typů háčků, zdá se, že neexistuje žádná dokumentace. Existuje velký seznam háčků a Tim Plunkett našel dvě skupiny zabývající se háčky, ale nezdá se, že by existovalo formální rozdělení toho, jaké různé typy háčků máme.

Jak by vypadalo takové zhroucení?

7
linclark

Rozdělil bych je do tří, čtyř skupin, ale není mezi nimi žádný technický/vnitřní rozdíl. Všechny jsou jen funkce, které se nazývají kvůli konvencím pojmenování.

  1. Informační háčky. Háčky, které poskytují informace o něčem, typické příklady jsou hook_entity_info () , hook_field_info () , hook_hook_info () , ale také hook_permission ( ) , hook_menu () , hook_theme () atd. Mnoho z nich má příponu _info, ale nemusí ji nutně potřebovat. Tyto háčky lze volat kdykoli a vrácené informace se často ukládají do mezipaměti (statická mezipaměť nebo trvalá mezipaměť) nebo se ukládají do konkrétních tabulek (např. hook_menu()).

  2. Reaktivní/akční háky. Právě jsem vymyslel toto jméno, ale jsou to háčky, které se nazývají, když se stane něco konkrétního, jako je hook_init () , hook_node_save(), hook_user_save(), hook_node_view () a tak dále.

  3. Změňte háčky. Háčky, které lze použít ke změně něčeho, co poskytují jiné moduly, existují pro téměř všechny informační háčky (např. hook_menu_alter () nebo hook_entity_info_alter () ) a také pro některé akční háčky (např. hook_node_view_alter () ).

Existuje také skupina čtyř, ale ve skutečnosti to nejsou háčky a jsou jedním z hlavních důvodů typického zmatku o háčcích. Často se nazývají „zpětná volání“. Jedná se o „háčky“, které jsou požadovány pouze pro jediný modul, který něco vlastní. Typické příklady zahrnují zpětná volání typu uzlu (hook_submit, hook_view, hook_form, ...), mnoho hooků (např. hook_field_load () ), ale také hook_block_view () . Existují plány, jak je odstranit a nahradit něčím jiným (založeným na OOP) nebo je přejmenovat na něco jiného než háčky.

Předpokládám, že existují také některé háčky, které nelze správně vložit do žádné z těchto skupin, nebo jsou směsí těchto skupin. Pokud ano, mohlo by to být známkou toho, že by měly být přepracovány. Pokud někdo zná nějaké příklady, mohu ho přidat zde.

Upozornění: Toto není oficiální, ale jak to vidím. Používejte opatrně. ;)

7
Berdir

Jeden způsob, jak je rozdělit, je, pokud jde o vstup a výstup: 1) pouze vstup, 2) pouze výstup, 3) vstup-výstup a 4) žádný vstup, žádný výstup.

Není mnoho # 1, protože téměř cokoli, co se stane, může mít nějakou reakci. Jediné příklady, na které mohu myslet, jsou háčky na odstranění, např. hook_file_delete (), hook_comment_delete (), kde hook získá odstraněný objekt, ale tento objekt je již odstraněn, takže není důvod k odpovědi.

Háčky ve stylu registru by měly být # 2, pouze výstup. Prostě vkládají data do centrálního registru a neberou žádné vstupy. hook_menu () a hook_help () jsou příklady.

hook_nodeapi () byl # 3, ale nyní je rozdělen na různé funkce jako hook_node_presave () - still # 3 - a hook_node_delete () - což je nyní # 1. Toto je nejběžnější skupina. Mnoho příkladů výslovně obsahuje slovo „změnit“ v názvu háčku, např. hook_form_alter ().

Něco jako hook_init () by bylo # 4. Kromě obecného upozornění na událost neexistuje žádný vstup ani výstup.

To je ale docela svévolné zhroucení. Dalo by se snadno argumentovat pro rozdělení # 3 na háčky, kde výstup má stejnou strukturu jako vstup (změna) vs. háčky, kde výstup má úplně jinou strukturu (call-response). Nebo můžete kombinovat # 1 a # 4, protože samotné volání funkce je druh vstupu, takže rozdíl je pouze v úrovni detailů.

0
Scott Reynen

Když si přečtu Larryho blogový příspěvek, nemyslím si, že chtěl říct, že existují pouze dva druhy háčků (styl registru a styl nodeapi). Pokud vím, nejsou definovány žádné oficiální typy háčků. V podstatě jsou všechny háčky technicky podobné, ale existuje rozdíl v tom, co mají a kdy to dělají.

Háčky lze vyvolat kdekoli mezi počátečním požadavkem http a vrácením výstupu. Většina háčků je určena k tomu, aby ovlivňovala výstup (obvykle html) tak či onak (nazývají se „normální háčky“, pokud se vám líbí), například hook_init .

Některé háčky nejsou určeny k přímému ovlivnění výstupu, ale přidávají nebo mění registr, který je uložen v databázi. Toto Larry nazývá háčky ve stylu registru. Nejsou vyvolávány často, ale vytvářejí trvalý seznam hodnot, které lze znovu a znovu použít. Uložení do databáze jako registru zvyšuje výkon. To je mimo jiné hook_men a hook_theme .

'Nodeapi-style', který je uveden v blogu, se týká háčků, které spojují spoustu podprogramů v implementaci s jedním háčkem. V D6 může implementace hook_nodeapi reagovat na více událostí, jako je uložení uzlu, zobrazení uzlu a odstranění uzlu. Tento typ háku v D7 již neexistuje ; například jeden hook_nodeapi byl nahrazen hook_node_insert, hook_node_view, hook_node_delete a spoustu podobných háčků.

0
marcvangend