Submitted by Deelight on
Salut,
J'ai un petit petit probleme avec un module que je suis en train de développer. Il s'agit d'un filtre d'entrée qui nécessite le chargement d'un fichier JavaScript pour l'affichage.
En simplifiant, la saisie donne :
[Mon tag]
Et une fois filtré, cela donne quelquechose du style :
<span onClick="ma_fonction_javascript();">Bidule</span>
L'inclusion du fichier .js contenant la fonction "ma_fonction_javascript();" doit se faire au moment de l'affichage. J'ai donc utilisé hook_nodeapi(), et j'inclus mon fichier .js (via drupal_add_js()) au niveau de l'opération "view" si un node contenant un champ utilisant mon filtre est sur le point d'être affiché.
Problème : celà marche nickel pour l'affichage des nodes, mais pas si j'utilise mon filtre dans un block. En effet, l'affichage des blocks ne déclenche pas hook_nodeapi().
Connaissez-vous une méthode pour que je puisse effectuer l'inclusion de mon fichier .js si un block utilisant mon filtre d'entrée est sur le point d'être affiché ?
Help :)
Merci !
C'est très difficile à
Permalien Soumis par Damien Tournoud le 4 Juillet, 2007 - 12:12
C'est très difficile à faire dans le cas général. En effet, les filtres d'entrées peuvent être utilisés dans autre chose que les noeuds et les blocs (par exemple le pied de page).
Pour faire ce que tu veux faire, des concessions sont nécessaires. Je vois deux approches :
L'inconvénient de la première approche est que le javascript sera chargé même sur les pages qui ne le nécessite pas (la charge porte sur le client). Celui de la deuxième approche est que cela desactive le cache sur tout les filtres de ton format d'entrée (la charge porte ainsi sur le serveur).
Merci de ta réponse. Je
Permalien Soumis par Deelight le 4 Juillet, 2007 - 14:40
Merci de ta réponse.
Je pense que je vais plutôt opter pour la première solution (inclusion inconditionnelle du .js), car elle ne nécessite pas de désactiver le cache pour mon filtre (qui apporte un important gain de performances).
Au final, cela simplifie aussi pas mal mon code (même si c'est moins propre que ce que j'imaginais idéalement).