Système de Hook

http://community.havefnubb.org/hfnu/images/flags/France.gif

Introduction

Le système de Hook permet d'ajouter dans les templates de son choix, les fonctionnalités que l'on souhaite.

Pour exploiter les hooks on écrira dans son template :

{hook 'event', $params}

event est le nom de l'évènement déclenchant la récupération de toutes fonctionnalités et $params est le tableau des paramètres passés au listenener répondant à event.

Exemple :

{hook 'SampleBannerAnnouncement'}

Affichera une bannière d'annonce dans le template de votre choix en répondant à l'event SampleBannerAnnouncement.

Liste des Hooks

  • Category :
    • hfbBeforeCategoryList
    • hfbCategoryList (parm => id_cat)
    • hfbAfterCategoryList
  • Forum :
    • hfbBeforeForumIndex
    • hfbForumIndex (parm => id_forum)
    • hfbAfterForumIndex
  • Posts :
    • hfbBeforePostsEdit (parm => id_posts)
    • hfbPostsEdit (parm => id_posts)
    • hfbAfterPostsEdit (parm => id_posts)
    • hfbBeforePostsReplies (parm => id_posts)
    • hfbPostsReplies (parm => id_posts)
    • hfbAfterPostsReplies (parm => id_posts)
    • hfbBeforePostsList (parm => id_posts)
    • hfbPostsList (parm => id_posts)
    • hfbAfterPostsList (parm => id_posts)
  • Statistiques
    • hfbBeforeStats
    • hfbStats
    • hfbAfterStats
    • hfbBeforeOnlineToday
    • hfbOnlineToday
    • hfbAfterOnlineToday
    • hfbBeforeOnline
    • hfbOnline
    • hfbAfterOnline
  • Flood :
    • hfbBeforeFlood
    • hfbFlood
    • hfbAfterFlood
  • Ban :
    • hfbBeforeBan
    • hfbBan
    • hfbAfterBan
  • Account :
    • hfbAccountShowBefore (parm => login)
    • hfbAccountShowTab (parm => login)
    • hfbAccountShowDiv (parm => login)
    • hfbAccountShowAfter (parm => login)
    • hfbAccountEditBefore (parm => login)
    • hfbAccountEditTab (parm => login)
    • hfbAccountEditDiv (parm => login)
    • hfbAccountEditAfter (parm => login)
  • Membres
    • hfbBeforeMembersList
    • hfbMembersList ( parm => user )
    • hfbAfterMembersList
    • hfbBeforeMemberProfile ( parm => id )
    • hfbMemberProfile ( parm => id )
    • hfbAfterMemberProfile ( parm => id )
  • Search
    • hfbBeforeSearch
    • hfbSearch
    • hfbAfterSearch
  • Main
    • hfbMainInHeader
    • hfbMainInFooter
  • Status (jCommunity)
    • JcommunityStatusConnected (parm = login)

Nomenclature des Hooks

ceci vous permettra de comprendre, en lisant un nom d'event, à quelle page / template se rapporte ce hook.

  • BeforeTemplateName
  • TemplateName
  • AfterTemplateName

où :

  • TemplateName est le nom du template où est utilisé le hook
  • BeforeTemplateName est le nom du hook appelé au debut du template TemplateName
  • TemplateName est egalement l'endroit où est appelé le hook (au milieu du template)
  • AfterTemplateName est le nom du hook appelé à la fin du template TemplateName

Dépôt de Hooks

Où ?

Le dépôt se trouve dans le dossier dédié modules-hook

Pourquoi un dépôt ?

Ceci permet de centraliser les modules ne répondants qu'aux events de ces hooks

Comment répondre aux hooks ?

Il vous faut produire un module (cf le module d'exemple modules-hook/hook ) :

  • un listener
  • une zone
  • un template
  • le Listener se chargera de répondre à l'évènement en appelant une zone
    class hookListener extends jEventListener{
        
       function onhfbSampleBannerAnnouncement ($event) {
            $event->add( jZone::get('hook~samplebanner_accouncement') );
       } 
    }
    
  • fichier events.xml permettant de définir le listener qui répondra à l'évent
    <?xml version="1.0" encoding="iso-8859-1"?>
    <events xmlns="http://jelix.org/ns/events/1.0">
       <listener name="hook">
    		<event name="hfnSampleBannerAnnouncement" />
       </listener>
    </events>
    
  • la zone exploitera les données de votre choix et les fournira à son template
    class samplebanner_accouncementZone extends jZone {
        protected $_tplname='zone.samplebanner_accouncement';
        
        protected function _prepareTpl(){    
            $this->_tpl->assign('text',jLocale::get('hook~main.welcome'));
        }        
    }
    
  • le template affichera les données
    <div class="grid_16">
        <div class="box">
        <h2>Banner</h2>
        {$text}
        </div>
    </div>
    <div class="clear"></div>
    

tout cela sera ensuite retourné au Hook à l'endroit du template voulu.