Bagaimana Anda memuat file javascript tambahan yang diperlukan untuk plugin api wysiwyg pada halaman node / edit?


9

Saya sedang membangun plugin menggunakan modul API WYSIWYG untuk Drupal 7 yang akan menambahkan tombol ke bilah alat editor yang didukung.

Saya menggunakan hook_wysiwyg_plugin()pengait untuk membuat tombol baru pada bilah alat editor, tetapi saya perlu memuat beberapa file javascript lainnya. The hook_wysiwyg_plugin()kait tampaknya memungkinkan Anda untuk menentukan satu JS dan file CSS.

Bagaimana saya bisa memuat file javascript tambahan yang diperlukan untuk javascript plugin?

Saya sudah menerapkan hook_library()untuk mendefinisikan perpustakaan yaitu file js / css tetapi saya tidak yakin bagaimana saya menghubungkan itu ke wysiwyg api sehingga mereka memuat pada layar node / edit?


Suara permintaan Anda di sini juga drupal.org/node/1039076
giorgio79

Jawaban:


1

Ini sebenarnya cukup sederhana, meskipun pengalaman saya melakukan hal yang sama adalah melalui Drupal 6, jadi mungkin ada beberapa perbedaan kecil dengan kode saya:

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

Sekali lagi, kode ini untuk D6, tetapi prinsip dasarnya tetap bekerja.

Meskipun tidak terikat langsung ke Wysiwyg API, itu mungkin pilihan terbaik karena Wysiwyg API hanya mendukung pada file JS per plugin (iirc).

Beberapa opsi liar / belum teruji untuk Anda:

  • Buat panggilan balik menu untuk file Javascript yang ditentukan dalam plugin dan kembalikan file javascript yang agak di-cache berisi sumber dari beberapa file javascript. (Wysiwyg Fields memang melakukan callback menu untuk plugin yang dihasilkan secara dinamis, tetapi hanya untuk satu file javascript, lihat sumber untuk ide-ide).

  • Gunakan teknik pemuatan Javascript dinamis Javascript yang mirip dengan http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

Semoga ini membantu.


Saya belum mencobanya tetapi sepertinya itu akan berhasil. Terima kasih.
Camsoft

2

Dengan drupal_add_js :

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

Saya benar-benar membutuhkannya untuk diikat dengan modul API WYSIWYG sehingga file tambahan hanya dimuat ketika modul itu menciptakan area WYSIWG. Saya juga perlu memuat perpustakaan yang didefinisikan oleh hook_library ().
Camsoft

1

Secara teori, yang perlu Anda lakukan adalah menggunakan parameter " #text_format " yang tepat pada #type textareaelemen FAPI untuk editor wysiwyg yang terkait dengan Format Teks untuk dimasukkan secara otomatis, dengan cara ini:

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

Namun, itu tidak disertakan kecuali itu adalah halaman "edit node", jadi sesuatu yang berhubungan dengan fungsi " filter_process_format" atau " wysiwyg_pre_render_text_format" mungkin dapat memaksanya, tapi saya belum menemukan kombinasi ajaib, masih membaca sumber dari modul Wysiwyg untuk menemukan bagian yang hilang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.