7
votes

Ajout de JS à un formulaire de nœud drupal

dans Drupal Vous pouvez créer votre propre NodeType dans un module personnalisé. Faire cela, vous devez créer votre propre forme qui est très agréable.

Toutefois, si vous voulez ajouter JS, les choses sont un peu plus difficiles. Si vous ajoutez le JS sous la forme, le JS ne sera ajouté que le formulaire lorsqu'il est chargé. Si l'utilisateur publierait le formulaire avec des erreurs de validation, la fonction de formulaire ne fonctionne pas à nouveau et que le JS n'est pas ajouté. Normalement, vous ne créeriez que créer un rappel de menu et ajouter le JS là-bas, mais pour le formulaire Ajouter un noeud, cela ne sera pas une solution possible.

Quelle est la meilleure solution pour ajouter de JS dans un noeud Ajouter un formulaire, pour le garder persistant lorsque le formulaire ne validait pas?


1 commentaires

La même chose sur les réponses drupes: drupal.stackexchange.com/questions/70015/...


3 Réponses :


2
votes

J'ai posté un patch sur le SMILIES Module qui corrige ce problème: Les smilies ne sont pas sélectionnables lors de la résoumission d'une page

Le patch ajoute une fonction Hook_NodeapI () pour vérifier si l'opération de nœud est "Vérifiez" et si elle vérifie si le nœud est censé avoir des smileys et si cela appelle la fonction pour ajouter le fichier smileys.js javascript qui crée le formulaire de sélection.

Vous devez juste avoir besoin de faire la même chose dans votre cas. Cela vous obligera à écrire un module très simple qui implémente la fonction Hook_NodeAppi et vérifie les mises à jour de la même manière que le module de smileys corrigé le fait.


1 commentaires

Merci pour le conseil. J'ai fini par utiliser une fonction de thème pour faire l'affaire car elle est un peu plus propre dans ce cas particulier.



13
votes

Essayer des hacks différents, j'ai trouvé une solution assez simple à ce problème, créez une fonction de thème pour le formulaire et ajoutez le JS là-bas. Cela ressemblerait à quelque chose comme ceci: xxx

Cela appelle simplement la fonction de thème par défaut du noeud Ajouter un formulaire après ajout du JS. Comme la fonction thématique est appelée même la forme est mise en cache, cela fonctionne bien. Vous devez également implémenter Hook_theme pour effectuer ce travail.

Mise à jour de Drupal 7.

Drupal 7 rend cela beaucoup plus facile car il est possible de faire cela possible xxx

Un exemple d'utilisation de cela pourrait être: xxx


4 commentaires

Intéressant - je suis surpris que cela fonctionne sans créer une boucle infinie, comme l'appel à thème ("node_form") pourrait finir à nouveau à invoquer votre substitution à nouveau. Ne serait-il pas préférable de mettre le drupal_add_js appeler dans un fonction theme_preprocess fonctionner?


@HENRIK OPEL: Je suppose qu'une fonction theme_preprocess ferait l'astuce ASWELL, je n'y ai pas pensé à l'époque. La fonction theme_node_form est la fonction qui serait appelée si le contenu_type_node_form n'existe pas, donc je ne pense pas qu'une boucle infinie est de tout danger. Mais je suppose que c'est un peu plus pirate que d'utiliser la fonction de préprocession de thème S.


Vous pouvez faire revenir theme_node_form ($ formulaire); au lieu de retourner le thème ('node_form', $ formulaire); pour éviter une boucle infinie.


Au lieu d'ajouter cela au thème, j'ajouterais cela à un module et dans le module que vous utilisez simplement la fonction d'implication (add) nommée _Form_ _alter .



0
votes

Vous pouvez utiliser harok_nodeapi avec affaire préparer :

Exemple: xxx

Vous pouvez maintenant ajouter votre code JavaScript dans votre module Dossier, par exemple myscript.js .


0 commentaires