Come si fa a caricare i file JavaScript supplementari necessari per WYSIWYG plugin API sulle pagine nodo / modificare?

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

  •  16-10-2019
  •  | 
  •  

Domanda

Sto costruendo un plugin utilizzando il modulo API WYSIWYG per Drupal 7 che aggiunge un pulsante alla barra degli strumenti di editor supportati.

Sto usando il gancio hook_wysiwyg_plugin() per creare un nuovo pulsante sulla barra degli strumenti dell'editor ma ho bisogno di caricare un paio di altri file javascript. Il gancio hook_wysiwyg_plugin() sembra permettere di specificare un file JS e CSS.

Come posso caricare aggiuntivo richiesto file JavaScript necessari per il plugin di javascript?

Ho implementato hook_library() per definire una libreria ossia js file / css, ma sono sicuro di come ho gancio che fino ad api wysiwyg in modo che caricano sul nodo / schermate di modifica?

È stato utile?

Soluzione

In realtà è abbastanza semplice, anche se la mia esperienza con il fare la stessa cosa è attraverso Drupal 6, così ci possono essere alcune differenze minori 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 funzionare.

Mentre non è legato direttamente alle API Wysiwyg, è probabilmente l'opzione migliore in quanto l'API Wysiwyg solo supporti su file di JS per plug-in (IIRC).

Alcuni selvaggio / opzioni non testati per voi:

  • Fare un callback di menu per il file JavaScript definiti nel plugin e passare di nuovo un file javascript in qualche cache contenente le fonti di più file javascript. (Wysiwyg Campi fa fare la richiamata menù per i plugin generati dinamicamente, ma solo per un file javascript, vedere la fonte di idee).

  • L'uso di una tecnica di caricamento Javascript dinamica Javascript simile a http: //www.javascriptkit. com / javatutors / loadjavascriptcss.shtml

Spero che questo aiuti.

Altri suggerimenti

drupal_add_js :

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

In teoria, tutto ciò che avrebbe bisogno di fare è utilizzare il diritto " # text_format " parametro sull'elemento #type textarea FAPI per l'editor wysiwyg associato con il formato testo da includere automaticamente, 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 ottiene incluso a meno che non si tratta di una pagina "nodo di modifica", in modo da qualcosa legato a funzioni "filter_process_format" o "wysiwyg_pre_render_text_format" può essere in grado di forzare, ma non ho ancora trovato la combinazione magica, ancora leggendo la fonte del modulo Wysiwyg per trovare il pezzo mancante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a drupal.stackexchange
scroll top