Comment pouvez-vous charger des fichiers javascript supplémentaires requis pour WYSIWYG plug-in sur les pages api noeud / modifier?

drupal.stackexchange https://drupal.stackexchange.com/questions/24

  •  16-10-2019
  •  | 
  •  

Question

Je construis 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 crochet hook_wysiwyg_plugin() pour créer un nouveau bouton sur la barre d'outils de l'éditeur mais je dois charger quelques autres fichiers javascript. Le crochet de hook_wysiwyg_plugin() semble vous permet de spécifier un fichier JS et CSS.

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

Je l'ai mis en œuvre hook_library() pour définir une bibliothèque à savoir les fichiers js / css mais je suis pas sûr que je crochet jusqu'à api WYSIWYG afin qu'ils se chargent sur les écrans node / modifier?

Était-ce utile?

La solution

Il est en fait assez simple, bien que mon expérience avec faire la même chose est par 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 fonctionner.

Bien qu'il soit pas lié directement à l'API Wysiwyg, il est probablement la meilleure option que l'API Wysiwyg prend uniquement en charge le fichier JS par plugin (IIRC).

A quelques options sauvages / non testé pour vous:

  • Faire un rappel de menu pour le fichier Javascript défini dans le plug-in et passer d'un fichier javascript peu mis en cache contenant les sources de plusieurs fichiers javascript. (Les champs Wysiwyg fait le rappel de menu pour les plugins générés dynamiquement, mais seulement pour un fichier javascript, voir la source pour des idées).

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

Hope this helps.

Autres conseils

drupal_add_js :

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

En théorie, tout ce que vous devez faire est d'utiliser le droit « # TEXT_FORMAT " paramètre sur l'élément REATB de #type textarea pour l'éditeur wysiwyg associé au format de texte pour être 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 ne soit pas inclus à moins d'une page « modifier noeud », 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, lire encore la source du module Wysiwyg pour trouver la pièce manquante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à drupal.stackexchange
scroll top