Wie lade ich zusätzliche Javascript-Dateien, die für das wysiwyg-API-Plugin erforderlich sind, auf Knoten- / Bearbeitungsseiten?


9

Ich erstelle ein Plugin mit dem WYSIWYG-API-Modul für Drupal 7, das der Symbolleiste der unterstützten Editoren eine Schaltfläche hinzufügt.

Ich verwende den hook_wysiwyg_plugin()Hook, um eine neue Schaltfläche in der Editor-Symbolleiste zu erstellen, muss aber einige andere Javascript-Dateien laden. Der hook_wysiwyg_plugin()Hook scheint es Ihnen zu ermöglichen, eine JS- und CSS-Datei anzugeben.

Wie kann ich zusätzliche erforderliche Javascript-Dateien laden, die für das Plugin Javascript erforderlich sind?

Ich habe implementiert hook_library(), um eine Bibliothek zu definieren, dh js / css-Dateien, bin mir aber nicht sicher, wie ich das mit wysiwyg api verbinde, damit sie auf den Knoten- / Bearbeitungsbildschirmen geladen werden?


Antworten:


1

Es ist eigentlich ganz einfach, obwohl ich Erfahrung mit Drupal 6 habe, sodass es einige geringfügige Unterschiede zu meinem Code geben kann:

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

Auch dieser Code ist für D6, aber das Grundprinzip sollte immer noch funktionieren.

Obwohl es nicht direkt an die Wysiwyg-API gebunden ist, ist es wahrscheinlich die beste Option, da die Wysiwyg-API nur JS-Dateien pro Plugin (iirc) unterstützt.

Ein paar wilde / ungetestete Optionen für Sie:

  • Führen Sie einen Menü-Rückruf für die im Plugin definierte Javascript-Datei durch und geben Sie eine etwas zwischengespeicherte Javascript-Datei zurück, die die Quellen mehrerer Javascript-Dateien enthält. (Wysiwyg Fields führt den Menü-Rückruf für dynamisch generierte Plugins durch, jedoch nur für eine Javascript-Datei. Ideen finden Sie in der Quelle.)

  • Verwenden Sie eine dynamische Javascript-Ladetechnik, die http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml ähnelt

Hoffe das hilft.


Ich habe es noch nicht ausprobiert, aber es klingt so, als würde es funktionieren. Vielen Dank.
Camsoft

2

Mit drupal_add_js :

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

Ich brauche es wirklich, um mit dem WYSIWYG-API-Modul verbunden zu sein, damit die zusätzlichen Dateien nur geladen werden, wenn dieses Modul einen WYSIWG-Bereich erstellt. Außerdem muss ich eine durch hook_library () definierte Bibliothek laden.
Camsoft

1

Theoretisch müssten Sie lediglich den richtigen Parameter " #text_format " für das #type textareaFAPI-Element verwenden, damit der mit dem Textformat verknüpfte wysiwyg-Editor automatisch aufgenommen wird:

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

Es wird jedoch erst aufgenommen, wenn es sich um eine "Knotenbearbeitungs" -Seite handelt, sodass etwas, das mit Funktionen " filter_process_format" oder " wysiwyg_pre_render_text_format" zusammenhängt, es möglicherweise erzwingen kann, aber ich habe die magische Kombination noch nicht gefunden und lese immer noch die Quelle von das Wysiwyg-Modul, um das fehlende Stück zu finden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.