ノード/編集ページのwysiwyg apiプラグインに必要な追加のJavaScriptファイルをどのようにロードしますか?


9

サポートされているエディターのツールバーにボタンを追加するDrupal 7のWYSIWYG APIモジュールを使用してプラグインを構築しています。

私が使用しているhook_wysiwyg_plugin()エディタのツールバーに新しいボタンを作成するためのフックを私はいくつかの他のJavaScriptファイルをロードする必要があります。このhook_wysiwyg_plugin()フックでは、JSファイルとCSSファイルを1つ指定できるようです。

プラグインJavaScriptに必要な追加のJavaScriptファイルをロードするにはどうすればよいですか?

hook_library()ライブラリ、つまりjs / cssファイルを定義するために実装しましたが、それをwysiwyg apiに接続してノード/編集画面にロードする方法がわかりませんか?


声ここにあなたの要求にもdrupal.org/node/1039076
giorgio79

回答:


1

同じことをする私の経験はDrupal 6を通してですが、実際には非常に単純です。そのため、私のコードにはいくつかの小さな違いがあるかもしれません:

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

繰り返しますが、このコードはD6用ですが、基本的な原則は引き続き機能します。

Wysiwyg APIに直接関連付けられているわけではありませんが、Wysiwyg APIはプラグイン(iirc)ごとのJSファイルでのみサポートしているため、おそらくこれが最良のオプションです。

あなたのためのいくつかの野生の/試されていないオプション:

  • プラグインで定義されたJavaScriptファイルのメニューコールバックを作成し、複数のJavaScriptファイルのソースを含む多少キャッシュされたJavaScriptファイルを返します。(Wysiwyg Fieldsは動的に生成されたプラグインのメニューコールバックを行いますが、1つのjavascriptファイルについてのみ、アイデアのソースを参照してください)。

  • http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtmlと同様のJavascript動的JavaScriptロード技術を使用します

お役に立てれば。


まだ試していませんが、うまくいくようです。ありがとう。
Camsoft

2

drupal_add_js

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

追加のファイルは、そのモジュールがWYSIWG領域を作成するときにのみ読み込まれるように、WYSIWYG APIモジュールと関連付ける必要があります。また、hook_library()で定義されたライブラリをロードする必要があります。
Camsoft

1

理論的には、FAPI要素の適切な「#text_format」パラメータを使用し#type textareaて、テキスト形式に関連付けられたwysiwygエディタが自動的に含まれるようにするだけです。

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

ただし、「ノード編集」ページでない限り含まれません。そのため、関数「filter_process_format」または「wysiwyg_pre_render_text_format」に関連するもので強制的に実行できる場合がありますが、魔法の組み合わせはまだ見つかりません。 Wysiwygモジュールを使用して、不足している部分を見つけます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.