Salve a tutti,
al momento non è una cosa essenziale ma mi chiedevo come fosse possibile creare un "nuovo Hook" per drupal. Chiarisco per chi magari non mi ha capito, ho un modulo che fa determinate cose, sarebbe utile attraverso un particolare hook poter dare l'opportunità ad altri moduli di sfruttare sue funzioni integrando negli altri moduli un hook che permetta per esempio di aggiungere dinamicamente un 'informazione nel modulo in questione...
ho cercato un po' ma non ho trovato gran chè, solitamente se non trovo qualche cosa è solo perchè sbaglio nella ricerca quindi se riuscite a damri qualche dritta su come realizzare nuovi hook sarebbe di grande aiuto...
Views2 è un buon esempio di hook aggiunti non-Drupal. Vedi http://drupalcontrib.org/api/group/views_hooks/6, e poi il codice
views/views.module
, riga 530 circa:/**
* Get a list of modules that support the current views API.
*/
function views_get_module_apis() {
static $cache = NULL;
if (!isset($cache)) {
$cache = array();
foreach (module_implements('views_api') as $module) { // <= module_implements fa tutto il vero lavoro...
$function = $module . '_views_api';
$info = $function(); // <= chiama il hook - per raccogliere altri info in questo esempio
if (isset($info['api']) && $info['api'] == 2.000) {
if (!isset($info['path'])) {
$info['path'] = drupal_get_path('module', $module);
}
$cache[$module] = $info;
}
}
}
return $cache;
}
Probabilmente puoi trovare altri esempi cercando (grepando) "module_implements" al di fuori del core di Drupal
John
Più imparo, più dubito.
Grazie jOhn :D
come al solito dai consigli utili, comincerò da subito cercare nell'implementazione degli hook di Views2.
Thanks
ti tengo aggiornato su nuovi sviluppi in merito
Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.
WeBrain Solution | Pillsofbits Of Bits
Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.
WeBrain Solution | Pillsofbits Of Bits
Esatto
views_get_module_apis()
e una funzione che chiama ogni modulo che implementahook_views_api
. E se vuolevi passare dei parametri all'implementazione del hook basta cambiare la riga$info = $function();
in$info = $function($param1, $param2);
. Vedi questo codice inmodules/node.module
, riga 657:/**
* Invoke a hook_nodeapi() operation in all modules.
*
* @param &$node
* A node object.
* @param $op
* A string containing the name of the nodeapi operation.
* @param $a3, $a4
* Arguments to pass on to the hook, after the $node and $op arguments.
* @return
* The returned value of the invoked hooks.
*/
function node_invoke_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
$return = array();
foreach (module_implements('nodeapi') as $name) {
$function = $name .'_nodeapi';
$result = $function($node, $op, $a3, $a4); // <= chiamata con parametri
if (isset($result) && is_array($result)) {
$return = array_merge($return, $result);
}
else if (isset($result)) {
$return[] = $result;
}
}
return $return;
}
Più imparo, più dubito.
aggiungerei anche
che è un pò più pulito di come fa le cose nell'hook views (ma solo perchè li hanno esigenze un pò particolari). Inoltre non so se è una cosa conveniente avere un hook che dichiari che ci si interfaccia con il tuo modulo e poi gli hook che fanno lo sporco lavoro, nel caso di views (o comunque di moduli che devono includere file esterni) non ci sono altre strade, ma se il tuo modulo non richiede questo non è necessario (e IMHO anche sconsigliato).
Ciao
Marco
--
My blog
Working at @agavee