คุณจะโหลดไฟล์จาวาสคริปต์พิเศษที่จำเป็นสำหรับปลั๊กอิน wysiwyg api บนโหนด / แก้ไขหน้าได้อย่างไร


9

ฉันกำลังสร้างปลั๊กอินโดยใช้โมดูล WYSIWYG API สำหรับ Drupal 7 ที่จะเพิ่มปุ่มลงในแถบเครื่องมือของโปรแกรมแก้ไขที่รองรับ

ฉันใช้hook_wysiwyg_plugin()เบ็ดเพื่อสร้างปุ่มใหม่บนแถบเครื่องมือตัวแก้ไข แต่ฉันต้องโหลดไฟล์จาวาสคริปต์อื่น ๆ hook_wysiwyg_plugin()ตะขอดูเหมือนว่าจะช่วยให้คุณสามารถระบุ JS และ CSS ไฟล์

ฉันจะโหลดไฟล์จาวาสคริปต์ที่จำเป็นต้องใช้เพิ่มเติมสำหรับปลั๊กอินจาวาสคริปต์ได้อย่างไร

ฉันใช้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 รองรับเฉพาะไฟล์ JS ต่อปลั๊กอิน (iirc) เท่านั้น

ตัวเลือกเสริม / ไม่ผ่านการทดสอบบางอย่างสำหรับคุณ:

  • สร้างเมนูเรียกกลับสำหรับไฟล์ Javascript ที่กำหนดไว้ในปลั๊กอินและส่งกลับไฟล์ javascript ที่ค่อนข้างแคชซึ่งมีแหล่งที่มาของไฟล์ javascript หลายไฟล์ (ฟิลด์ Wysiwyg ทำเมนูเรียกกลับสำหรับปลั๊กอินที่สร้างขึ้นแบบไดนามิก แต่สำหรับไฟล์ javascript เพียงไฟล์เดียวให้ดูแหล่งที่มาของแนวคิด)

  • ใช้เทคนิคการโหลด Javascript แบบไดนามิก Javascript คล้ายกับhttp://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

หวังว่านี่จะช่วยได้


ฉันยังไม่ได้ลองเลย แต่ดูเหมือนว่าจะใช้ได้ ขอบคุณ
Camsoft

2

ด้วยdrupal_add_js :

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

ฉันต้องการให้มันเชื่อมโยงกับโมดูล WYSIWYG API เพื่อให้ไฟล์เพิ่มเติมถูกโหลดเมื่อโมดูลนั้นสร้างพื้นที่ WYSIWG เท่านั้น นอกจากนี้ฉันต้องโหลดห้องสมุดที่กำหนดโดย hook_library ()
Camsoft

1

ในทางทฤษฎีสิ่งที่คุณต้องทำคือใช้พารามิเตอร์ " #text_format " ที่ถูกต้องใน#type textareaองค์ประกอบ FAPI สำหรับเครื่องมือแก้ไข 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.