Hook-ok. Nem értem.

fox mulder képe

Sziasztok!

Hogy van ez a hook dolog (hadd nevezzem a továbbiakban huroknak)?

Ha jól sejtem, egy hurok sehol sincs előre definiálva, egyszerűen attól válik hurokká egy függvény, hogy valahol meg lesz hívva egy module_invoke(), vagy egy module_invoke_all() által. Vagyis amikor nézegetem a Contributions API-t és azt látom, hogy egy modul biztosít néhány hurkot, akkor ez a gyakorlatban azt jelenti, hogy szerepel a modulban néhány module_invoke[_all]() hívás és az adott modul ezáltal teszi lehetővé más moduloknak azt, hogy a module_invoke() hívás helyére "rácsimpaszkodhassanak"?

Jól értem?

Drupal verzió: 
Sweetchuck képe

A hook megvalósítások 3 leggyakoribb fajtája az amikor az egyik modulnak információra van szüksége a többi modultól. Ilyen például a hook_perm(), a hook_menu() vagy a hook_node_info().
A másik amikor az egyik modulban olyan esemény következik be amiről szeretné értesíteni a többi modult. Például a hook_cron().
A harmadik pedig amikor az egyik modul előállít valamilyen adatot(tartalmat) és lehetőséget ad a többi modulnak, hogy ezt az adatot megváltoztathassák. pl.: hook_form_alter()

Persze ezeket a függvények paraméterezésével lehet variálni.
A trigger modullal az együtt működés egy kicsit összetettebb.
http://api.drupal.org/api/function/hook_hook_info/6

0
0
Bálint képe

Nekem is lenne egy hook-okkal kapcsolatos kérdésem, ha már így előjött ez. Ha több modul is megvalósít egy hurkot egy adott funkcióra, akkor hogyan alakul a sorrend? Mi alapján dől el, hogy milyen sorrendben futnak le?
Pl. a hook_menu-t szinte majdnem minden minden modul megvalósítja, és itt nem is lényeges a sorrend, de egy hook_form_alter-nél már érdekes lehet.

0
0
fox mulder képe

system tábla: weight

0
0

Fox Mulder

lovranits képe

az lenne a kérdésem, hogy egy saját magam általam készített modult, amibe található egy hook_noodapi függvény azt, hogyan tudom aktiválni, amikor is azt szeretném elérni, hogy az egyes case esetekben, például delete nél az én kódsoraim lépjenek életbe (a többi case esetben) az alap node jelen esetben delete függvénye helyett. Modult bekapcsoltam (sajátomat) és nem jelez ki rá hibát.

0
0
Sweetchuck képe

amibe található egy hook_noodapi függvény

Ha azt mondod hogy "amiben implementáltam a hook_nodeapi()-t" akkor mindenkinek egyértelmű hogy miről beszélsz.

A mymodule_nodeapi() függvényt majd a rendszer aktiválja a megfelelő időben.

Az utolsó mondatod kivételével egyik mondatodat sem értem. Bár az is igaz, hogy az utolsó mondatod előtt csak egy mondat van.

0
0
lovranits képe

Szóval van ugye a modules/node mappán belül egy egy node.module fájl. Ennek van egy load,insert,delete függvénye, amiket én bővítettem, de ezt a három bővített függvényt egy külön modulba szeretném kitenni, hogy az illetőnek ne kelljen programozni az alap node.module fájlt, hanem modulként behozni.

Olvastam, hogy ehhez a külön modulba, amit én fejlesztetem ezt a függvényt kell használni
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {

case 'load':

és így tovább, ahol a load jelenti ugye a beteöltést.

A gondom az, hogy nem ez fut le, hanem az alapdrupal rendszer szerinti node. module fájlnak a load függvénye és nem az amit én külön modulba megírtam, az előbb említett kód segítségével.

Röviden hogy kell ugy modult fejleszteni, hogy az én függvényeim éljenek, és ne az alaprendszerbeli

0
0
Pasqualle képe

azt szeretném elérni, hogy az egyes case esetekben, például delete nél az én kódsoraim lépjenek életbe (a többi case esetben) az alap node jelen esetben delete függvénye helyett

van ugye a modules/node mappán belül egy egy node.module fájl. Ennek van egy load,insert,delete függvénye, amiket én bővítettem

hogy kell ugy modult fejleszteni, hogy az én függvényeim éljenek, és ne az alaprendszerbeli

nem, ezt nem igy kell. Rossz a cel is amit kituztel, es az is amit eddig megvalositottal. Szerencsere te is latod, hogy maskepp kell. A Drupal forraskodban nem kell atirni semmit, es a sajat moduljaidban implementalt hookok kiegeszitik az alap kodot nem felulirjak (vagy lecserelik)..

node_example Ezt a peldat probald meg megerteni, es ha valami nem vilagos, kerdezz..

0
0
lovranits képe

Olvastam, amit írtál a példával együtt. Annyit sikerült kiokoskodnom belőle, hogy ha például a modulomat valaminek nevezem el, akkor valami_load (&$node) {} függvényt kellem használni a valami.module- omban. A kérdésem az lenne, amit így nemigazán sikerült kihámoznom, hogy mi kell még ahhoz hogy ez a függvény meg is hívodjon. A valami.info fájlba ugye kell, name,description,core és version kötelező jellegel.

0
0
aboros képe

myinsert.info:

name = MyInsert
description = Demonstrate hook_nodeapi() 'insert' op.
core = 6.x
version = 6.x-1.0-dev

myinsert.module:

/* implementation of hook_nodeapi() */
function myinsert_nodeapi($node, $op) {
	switch($op) {
	case 'insert':
		drupal_set_message('myinsert: new node created, yahoo, it works!');
		break;
	}
}

ez a modul, miután bekapcsoltad egy üzenetet jelenít meg minden node beküldésekor. ennyi.

ha nem szupertitkos nasa fejlesztés, ide is másolhatnád akár a modulfilet és akkor talán előbb megtalálnánk a problémát.

0
0

-
clear: both;

lovranits képe

Köszi a segítséget, sikerült összhoznom azóta

Ennyi kellet csak

function morelanguages_nodeapi(&$node,$op) {
case stb....

Így már rendesen működnek az általam megírt kódsorok is. Csak a caseknél az aktuális delete,insert stb kulcsszót kellem használni:)

0
0