Je fais un site avec beaucoup de JS, et je me demande où je dois mettre le code JS. Idéalement, je voudrais conserver le JS avec chaque module et non la couche de thème. Certains contenus peuvent être exposés sous forme de blocs, etc.
Mais j'ai des problèmes avec le cache. Dans mon exemple, je dois ajouter JS & CSS au formulaire d'édition de nœud. J'ai utilisé hook_block_view, mais il est mis en cache. Donc, s'il y a une erreur dans le formulaire d'édition de nœud, les fonctions drupal_add_js et drupal_add_css ne sont pas appelées. La même chose semble être vraie pour hook_node_prepare.
Où saisiriez-vous la couche JS & CSS? et y a-t-il des hooks qui sont appelés même s'il y a une erreur dans le formulaire d'édition du nœud?
#attached
est recommandée dans presque tous les cas. De plus, drupal_add_js / css sera déprécié dans Drupal 8.Vous devez utiliser la propriété #attached pour vous assurer que JS / CSS est toujours correctement chargé avec un autre élément de rendu.
la source
#attached
, et peut-être de quelques informations supplémentaires sur le problème que vous évitez.J'ai senti que ces réponses et commentaires avaient désespérément besoin d'un exemple de code, en particulier ceux de @AyeshK et @Letharion. C'est trop long pour un commentaire, veuillez donc pardonner la réponse. Si cela vous est utile, veuillez voter pour la réponse de Sumeet ou de Letharion. De plus, l'exemple suivant ajoute évidemment CSS, mais serait presque identique pour l'ajout de javascript.
Utiliser la réponse de @ Sumeet, mais en utilisant la
#attached
propriété à la place dedrupal_add_css
, ressemble à ceci:Enfin, la dépréciation de
drupal_add_css
peut être trouvée dans ce post . Cela peut être une nouvelle pour beaucoup pour qui drupal_add_xxx fonctionnait très bien, comme pour moi.la source
#after_build
bit est, à ma connaissance un non-sens, et devrait simplement être supprimé. (Il y a un commentaire similaire sur la réponse apportant la#after_build
solution) Je pense que cela en soi explique pourquoi ma brève réponse est bonne. Si vous regardiez simplement le lien que j'ai fourni, vous trouveriez le même code, mais sans les bits inutiles.Pour Drupal 8, je vous conseille de lire cet article
la source