hook misteriosi
Ciao a tutti,
mi sfugge il meccanismo degli hook di drupal... un vero mistero per me, esempio in /modules/system.api.php:
function hook_hook_info() {
$hooks['token_info'] = array(
'group' => 'tokens',
);
$hooks['tokens'] = array(
'group' => 'tokens',
);
return $hooks;
}dato che si puo fare un nuovo hook in un modulo custom, come fa l'esempio sopra a "collegarsi" alla funzione creata (MYMODULE_info() ) in un file .module ?

Risposte
Ciao, è semplice: all'interno
Ciao, è semplice: all'interno della funzione principale si esegue la funzione module_invoke_all($hook) e questa funzione richiama tutti gli hook di quel tipo/nome all'interno di tutti i moduli.
Ad esempio nella funzione principale con cui drupal crea i form, viene eseguita (anche) questa funzione e questo ti permette di definire nel tuo modulo una funzione MYMODULE_form_alter(&$form, &$form_values, $form_id) dove andrai a fare delle operazioni sui form. Questa funzione viene chiamata in automatico, non sei tu che devi eseguirla in qualche modo.
M.
Ciao, grazie della risposta,
Ciao, grazie della risposta, ho capito che magicamente e/o automaticamente drupal fa tutto, tuttavia non mi è chiaro il sistema degli hook e ti spiego perchè:
Il fatto è ho notato che parecchi moduli di terze parti hanno un file .api.php come ad esempio easy_social.api.php. ebbene la funzione è questa:
function hook_easy_social_widget() { return array( 'my_custom_share_button' => array( 'name' => 'My Custom Share Button', // This apears on admin pages only. 'markup' => '_mymodule_custom_share_button_markup', // Callback function that returns widget markup. 'scripts' => array( array( 'path' => 'http://mycustomshare.com/widget.js', // JavaScript include, if any. 'type' => 'external', // Type of include: 'external', 'module' or 'inline', defaults to 'external'. ), ), 'styles' => array( array( 'path' => drupal_get_path('module', 'easy_social') . '/css/easy_social_twitter.css', // CSS include, if any. 'type' => 'external', // Type of include: 'external', 'module' or 'inline', defaults to 'external'. ), ), ), ); }e infatti nel easy_social.module c'è la funzione:
function easy_social_easy_social_widget() { return array( 'facebook' => array( 'name' => 'Facebook', 'markup' => '_easy_social_widget_facebook_markup', ), .....}
Quindi gli hook non sono solo nel core e cosi inutilizzabili.... Gli esempi che potrei farti sono molti e io potrei usarli senza sapere perchè... ma preferisco chiedere e approfondire.
Infatti, anch'io potrei fare un modulo con un .api che rende disponibile il mio hook agli altri moduli ma.... come fa la funzione del modulo a collegarsi alla funzione dichiarata nel file .api.php ?
Grazie scusa per la pignoleria :)
Ciao, il file *.api.php serve
Ciao, il file *.api.php serve per documentare le API del modulo (tra cui gli hook disponibili). Non è un file che viene utilizzato all'interno del sistema.
Ed io non ho detto che gli jook sono solo nel core e sono inutilizzabili, anzi la forza di Drupal sta proprio in questi HOOK che ti permettono di andare a modificare i dati senza dover andare a cambiare il core di Drupal.
M.