web-dev-qa-db-ja.com

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

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

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

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

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

9
Camsoft

実際には非常に単純ですが、同じことをする私の経験は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ロードテクニックを使用します

お役に立てれば。

1
Decipher

drupal_add_js の場合:

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

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

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モジュールのソースを読んで、欠けている部分を見つけます。

1
wildpeaks