Comment chargez-vous les fichiers javascript supplémentaires requis pour le plugin wysiwyg api sur les pages node / edit?


9

Je crée un plugin à l'aide du module API WYSIWYG pour Drupal 7 qui ajoutera un bouton à la barre d'outils des éditeurs pris en charge.

J'utilise le hook_wysiwyg_plugin()crochet pour créer un nouveau bouton sur la barre d'outils de l'éditeur, mais je dois charger quelques autres fichiers javascript. Le hook_wysiwyg_plugin()crochet semble vous permettre de spécifier un fichier JS et CSS.

Comment puis-je charger des fichiers javascript supplémentaires requis pour le plugin javascript?

J'ai implémenté hook_library()pour définir une bibliothèque, c'est-à-dire des fichiers js / css, mais je ne suis pas sûr de savoir comment le connecter à l'api wysiwyg afin qu'ils se chargent sur les écrans de noeud / d'édition?


Réponses:


1

C'est en fait assez simple, bien que mon expérience avec la même chose soit à travers Drupal 6, donc il peut y avoir quelques différences mineures avec mon code:

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  // Only modify node_form's.
  // @TODO - Set a condition for all forms you wish to alter for D7 entities.
  if (isset($form['type']['#value']) && $form_id == "{$form['type']['#value']}_node_form") {
    // We use after build to add JS and CSS to prevent issues caused by form caching.
    $form['#after_build'][] = 'MYMODULE_form_alter_after_build';
  }
}

function MYMODULE_form_alter_after_build($form_element, &$form_state) {
  drupal_add_js(...);
}

Encore une fois, ce code est pour D6, mais le principe de base devrait toujours fonctionner.

Bien qu'il ne soit pas directement lié à l'API Wysiwyg, c'est probablement la meilleure option car l'API Wysiwyg ne prend en charge que le fichier JS par plug-in (iirc).

Quelques options sauvages / non testées pour vous:

  • Faites un rappel de menu pour le fichier Javascript défini dans le plugin et renvoyez un fichier javascript quelque peu mis en cache contenant les sources de plusieurs fichiers javascript. (Wysiwyg Fields effectue le rappel de menu pour les plugins générés dynamiquement, mais uniquement pour un fichier javascript, voir la source des idées).

  • Utilisez une technique de chargement Javascript dynamique Javascript similaire à http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

J'espère que cela t'aides.


Je ne l'ai pas encore essayé mais il semble que cela fonctionnera. Merci.
Camsoft

2

Avec drupal_add_js :

function yourmodule_preprocess_page(&$vars)
{
  $node = $vars['node']; 
  if($node->type == 'yournodetype' AND arg(2) == 'edit')
  {
    drupal_add_js([...]);
  }
}

J'ai vraiment besoin qu'il soit lié au module API WYSIWYG afin que les fichiers supplémentaires ne soient chargés que lorsque ce module crée une zone WYSIWG. J'ai également besoin de charger une bibliothèque définie par hook_library ().
Camsoft

1

En théorie, il vous suffit d'utiliser le bon paramètre " #text_format " sur l' #type textareaélément FAPI pour que l'éditeur wysiwyg associé au format texte soit automatiquement inclus, de cette façon:

function mymodule_menu(){
    return array(
        'mypage' => array(
            'title' => 'A page to test wysiwyg',
            'page callback' => 'drupal_get_form',
            'page arguments' => array('mymodule_page'),
            'access arguments' => array('access content'), 
        )
    );
}

function mymodule_page($form, &$form_state) {
    $element = array(
        '#type' => 'textarea', 
        '#title' => t('Comment'), 
        '#default_value' => 'something',
        '#text_format' => 'full_html',
        '#required' => TRUE,
    );
    $form['mytext'] = $element;
    return $form;
}

Cependant, il n'est pas inclus sauf s'il s'agit d'une page de "modification de nœud", donc quelque chose lié aux fonctions " filter_process_format" ou " wysiwyg_pre_render_text_format" peut être en mesure de le forcer, mais je n'ai pas encore trouvé la combinaison magique, toujours en lisant la source de le module Wysiwyg pour trouver la pièce manquante.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.