Sebbene inizialmente il concetto di hook possa sembrare difficile da capire, una volta compreso come funziona e quali sono le sue possibilità lo amerete e non potrete più farne a meno. Gli hooks sono infatti una delle caratteristiche più utili, potenti e versatili di Zikula.
Nello specifico gli hook sono dei moduli, infatti sono contenuti nella cartela modules e vengono installati/attivati esattamente come tutti i moduli di Zikula, che si differenziano per lo scopo. Un hook, come il nome stesso indica (la traduzione italiana di hook è gancio/agganciare ndr), è una componente creata con lo scopo di agganciarsi ad un altro modulo e tipicamente non ha nessuna pagina propria, fatta eccezione per l'eventuale parte amministrativa.
Lo scopo di un hook è quindi quello di modificare o aggiungere qualcosa ad un modulo esistente.
Vediamo meglio il funzionamento degli hooks e la loro utilità con un esempio pratico.
Volete creare un portale che implementi un sistema di notizie, recensioni, foto e dare all'utente la possibilità di commentarli e dargli un voto; individuate quindi un CMS che abbia questi 3 moduli e le caratteristiche richieste ed iniziate a lavorarci. Qui sorgono però i primi problemi perchè ogni modulo implemente i commenti con una grafica diversa, spendete quindi del tempo a rendere uguali i vari template. Vi accorgete poi che solo uno dei 3 moduli implementa gli smiles nei commenti, o che tutti e 3 i moduli utilizzano un codice di formattazione diverso, o che i moduli accettano in situazioni simili comportamenti diversi dall'utente, ecc.
Una situazione del genere è molto deleteria sia per l'utente, che si trova spaesato da pagine apparentemente uguali che funzionano però in modo differente, sia per l'amministratore, che dovrà spendere parecchio tempo nel tentativo di rendere il più simile possibile delle cose potenzialmente molto differenti.
Questo è un esempio inventato ma chi ha già utilizzato CMS si sarà trovato quasi sicuramente in situazioni simili, soprattutto per i progetti più ambiziosi che utilizzano diversi moduli.
L'idea che sta dietro al concetto di hook è quindi che le funzioni comuni a più moduli non debbano essere implementate nei moduli stessi ma bensì come modulo a parte da agganciare ad essi quando necessario. Un approccio di questo tipo è chiaramente vantaggioso per tutti:
- l'utente dovrà imparare un solo comportamento comune a tutte le pagine e non sarà disorientato;
- l'amministratore non dovrà perdere tempo a rendere simili i vari moduli e non dovrà preoccuparsi che uno di essi non abbia, ad esempio, i commenti;
- lo sviluppatore non dovrà perdere tempo a riscrivere sempre le stesse cose (che senso ha reinventare tutte le volte la ruota? Se già esiste un sistema di commenti, e non si hanno esigenze particolari, è meglio utilizzare quello ed investire il tempo risparmiato in altro)
E' da aggiungere che questa è una visione semplificata degli hooks, in realtà la loro funzione non si limita ad aggiungere un qualcosa ma può anche modificare l'output (es. censurare determinate parole del testo del modulo) o eseguire un azione al verificarsi di un evento (es. inviare una mail all'amministratore ogni volte che un nuovo utente si registra). Come avrete capito gli hooks sono uno strumento veramente formidabile e potente. Se invece cercate informazioni su quali tipi di hooks esistano e come crearne di nuovi passate alla sezione hooks della guida per lo sviluppatore.
In generale è già possibile, utilizzando gli hooks disponibili, aggiungere ad un modulo:
- commenti;
- voto dell'utente;
- bbcode;
- bbsmiles;
- autolinks;
- censura;
e molto altro!
Ad esempio grazie agli hooks le notizie di Zikula.it possono essere commentate e valutate sebbene il modulo News non abbia queste funzioni.
Importante: data la natura degli hooks, è necessario che il modulo utilizzi correttamente le API di Zikula per attivarli su di esso.
Installazione e configurazione
Come già specificato precedentemente, tecnicamente l'hook è un modulo. Di conseguenza gli hook si installano, aggiornano e configurano esattamente come tutti gli altri moduli. Per evitare ripetizioni vi rimandiamo alla sezione moduli.
Personalizzazione
La grafica degli hook è uguale in ogni modulo in cui vengono utilizzati, tuttavia grazie al template overriding è possibile specificare un diverso template per ogni modulo.
I template presenti in:
themes/TEMA/templates/modules/MODULO/HOOK/ avranno la precedenza su tutti gli altri. Per avere un particolare template per i commenti del modulo News li metteremo in:
themes/TEMA/templates/modules/News/EZComments/
Attivare un hook
L'attivazione degli hook, intesa come l'utilizzo di un hook su un determinato modulo, viene gestita dalla sezione amministrativa Moduli. A fianco di ogni modulo installato e attivato trovate l'icona della graffetta, simbolo degli hook.
Cliccando sulla graffetta vi verrà chiesto quali hooks, tra quelli installati, vorrete aggangiare a quel modulo.
Impostazioni Avanzate
Le impostazioni avanzate permettono di modificare l'ordine in cui gli hook vengono applicati.
In alcuni casi l'ordine è puramente una questione grafica (ad esempio noi abbiamo inverito l'ordine di commenti e ratings perchè volevamo che la valutazione comparisse prima), mentre in altri casi l'ordine può influenzare il funzionamento (soprattutto quando gli hook modificano il contenuto del modulo è possibile vi siano dei conflitti)
In generale si consiglia di non modificare l'ordine in cui vengono applicati, salvo si abbiano esigenze particolari e si conoscano bene le possibili conseguenze.