Come si caricano i file javascript extra richiesti per il plug-in Wysiwyg API nelle pagine nodo / modifica?


9

Sto creando un plugin utilizzando il modulo API WYSIWYG per Drupal 7 che aggiungerà un pulsante alla barra degli strumenti degli editor supportati.

Sto usando l' hook_wysiwyg_plugin()hook per creare un nuovo pulsante sulla barra degli strumenti dell'editor, ma devo caricare alcuni altri file javascript. L' hook_wysiwyg_plugin()hook sembra consentire di specificare un file JS e CSS.

Come posso caricare file javascript extra richiesti per il plugin javascript?

Ho implementato hook_library()per definire una libreria, cioè i file js / css, ma non sono sicuro di come collegarlo a Wysiwyg API in modo che vengano caricati sulle schermate del nodo / modifica?


Risposte:


1

In realtà è abbastanza semplice, anche se la mia esperienza con la stessa cosa è attraverso Drupal 6, quindi potrebbero esserci alcune piccole differenze con il mio codice:

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(...);
}

Ancora una volta, questo codice è per D6, ma il principio di base dovrebbe ancora funzionare.

Sebbene non sia collegato direttamente all'API Wysiwyg, è probabilmente l'opzione migliore poiché l'API Wysiwyg supporta solo il file JS per plugin (iirc).

Alcune opzioni wild / non testate per te:

  • Effettuare una richiamata del menu per il file Javascript definito nel plug-in e restituire un file javascript in qualche modo memorizzato nella cache contenente le origini di più file javascript. (Wysiwyg Fields esegue la richiamata del menu per i plugin generati dinamicamente, ma solo per un file javascript, vedere la fonte per le idee).

  • Utilizza una tecnica di caricamento JavaScript dinamica Javascript simile a http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

Spero che sia di aiuto.


Non l'ho ancora provato ma sembra che funzionerà. Grazie.
Camsoft

2

Con drupal_add_js :

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

Ho davvero bisogno che sia collegato al modulo API WYSIWYG in modo che i file aggiuntivi vengano caricati solo quando quel modulo crea un'area WYSIWG. Inoltre ho bisogno di caricare una libreria definita da hook_library ().
Camsoft

1

In teoria, tutto ciò che dovresti fare è usare il giusto parametro " #text_format " sull'elemento #type textareaFAPI affinché l'editor wysiwyg associato al Formato testo sia automaticamente incluso, in questo modo:

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;
}

Tuttavia, non viene incluso a meno che non sia una pagina di "modifica nodo", quindi qualcosa in relazione alle funzioni " filter_process_format" o " wysiwyg_pre_render_text_format" potrebbe essere in grado di forzarlo, ma non ho ancora trovato la combinazione magica, ancora leggendo la fonte di il modulo Wysiwyg per trovare il pezzo mancante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.