Düğüm / düzenleme sayfalarında wysiwyg api eklentisi için gereken ekstra javascript dosyalarını nasıl yüklersiniz?


9

Drupal 7 için desteklenen düzenleyicilerin araç çubuğuna bir düğme ekleyecek olan WYSIWYG API modülünü kullanarak bir eklenti oluşturuyorum.

hook_wysiwyg_plugin()Editör araç çubuğunda yeni bir düğme oluşturmak için kanca kullanıyorum ama birkaç javascript dosyası yüklemeniz gerekiyor. hook_wysiwyg_plugin()Kanca tek JS ve CSS dosyası belirtmek için izin görünüyor.

Eklenti javascript için gereken ekstra gerekli javascript dosyalarını nasıl yükleyebilirim?

hook_library()Bir kitaplık yani js / css dosyaları tanımlamak için uyguladım ama nasıl düğüm / düzenleme ekranlarında yük böylece wysiwyg api kadar kanca nasıl emin değilim?


İsteğinizi buraya da
iletin

Yanıtlar:


1

Aynı şeyi yapma deneyimim Drupal 6'dan geçmesine rağmen aslında oldukça basit, bu yüzden kodumla bazı küçük farklılıklar olabilir:

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

Yine, bu kod D6 içindir, ancak temel prensip yine de çalışmalıdır.

Doğrudan Wysiwyg API'sine bağlı olmasa da, muhtemelen en iyi seçenek, Wysiwyg API'sinin sadece eklenti başına JS dosyasında (iirc) desteklemesidir.

Sizin için birkaç vahşi / test edilmemiş seçenek:

  • Eklentide tanımlanan Javascript dosyası için bir menü geri çağrısı yapın ve birden çok javascript dosyasının kaynaklarını içeren biraz önbelleğe alınmış bir javascript dosyasını geri iletin. (Wysiwyg Fields, dinamik olarak oluşturulan eklentiler için menü geri araması yapar, ancak yalnızca bir javascript dosyası için fikirler için kaynağa bakın).

  • Http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml benzeri bir Javascript dinamik Javascript yükleme tekniği kullanın

Bu yardımcı olur umarım.


Henüz denemedim ama işe yarayacak gibi görünüyor. Teşekkürler.
Camsoft

2

İle drupal_add_js :

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

Gerçekten WYSIWYG API modülü ile bağlı olması gerekir böylece ek dosyalar sadece bu modül bir WYSIWG alanı oluşturduğunda yüklenir. Ayrıca hook_library () tarafından tanımlanan bir kütüphane yüklemeniz gerekir.
Camsoft

1

Teorik olarak, tek yapmanız gereken , Metin Formatıyla ilişkili wysiwyg düzenleyicisinin FAPI öğesinde doğru " #text_format " parametresini #type textareabu şekilde otomatik olarak dahil edilmesi için kullanmaktır:

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

Ancak, bir "düğüm düzenleme" sayfası olmadıkça dahil edilmez, bu nedenle " filter_process_format" veya " wysiwyg_pre_render_text_format" işlevleriyle ilgili bir şey onu zorlayabilir, ancak henüz sihirli kombinasyonu bulamadım, hala kaynağını okudum Wysiwyg modülünü bulun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.