Làm thế nào để bạn tải thêm các tệp javascript cần thiết cho plugin wysiwyg api trên các trang nút / chỉnh sửa?


9

Tôi đang xây dựng một plugin sử dụng mô-đun API WYSIWYG cho Drupal 7 sẽ thêm một nút vào thanh công cụ của các biên tập viên được hỗ trợ.

Tôi đang sử dụng hook_wysiwyg_plugin()hook để tạo một nút mới trên thanh công cụ biên tập nhưng tôi cần tải một vài tệp javascript khác. Các hook_wysiwyg_plugin()móc dường như cho phép bạn chỉ định một JS và file CSS.

Làm cách nào tôi có thể tải thêm các tệp javascript cần thiết cho plugin javascript?

Tôi đã triển khai hook_library()để xác định thư viện tức là các tệp js / css nhưng không chắc chắn làm cách nào tôi nối nó với wysiwyg api để chúng tải trên nút / chỉnh sửa màn hình?


Nói yêu cầu của bạn ở đây cũng như drupal.org/node/1039076
giorgio79

Câu trả lời:


1

Nó thực sự khá đơn giản, mặc dù kinh nghiệm của tôi khi làm điều tương tự là thông qua Drupal 6, vì vậy có thể có một số khác biệt nhỏ với mã của tôi:

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

Một lần nữa, mã này là dành cho D6, nhưng nguyên tắc cơ bản vẫn hoạt động.

Mặc dù nó không được liên kết trực tiếp với API Wysiwyg, nhưng đây có lẽ là tùy chọn tốt nhất vì API Wysiwyg chỉ hỗ trợ trên tệp JS trên mỗi plugin (iirc).

Một vài lựa chọn hoang dã / chưa được kiểm tra cho bạn:

  • Tạo một cuộc gọi lại trình đơn cho tệp Javascript được xác định trong plugin và gửi lại một tệp javascript được lưu trong bộ nhớ cache có chứa các nguồn của nhiều tệp javascript. (Trường Wysiwyg thực hiện gọi lại trình đơn cho các plugin được tạo động, nhưng chỉ với một tệp javascript, hãy xem nguồn cho ý tưởng).

  • Sử dụng kỹ thuật tải Javascript động Javascript tương tự như http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

Hi vọng điêu nay co ich.


Tôi chưa thử nhưng có vẻ như nó sẽ hoạt động. Cảm ơn.
Camsoft

2

Với drupal_add_js :

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

Tôi thực sự cần nó được gắn với mô-đun API WYSIWYG để các tệp bổ sung chỉ được tải khi mô-đun đó tạo ra một khu vực WYSIWG. Ngoài ra tôi cần tải một thư viện được xác định bởi hook_l Library ().
Camsoft

1

Về lý thuyết, tất cả các bạn sẽ cần phải làm là sử dụng quyền " #text_format " tham số trên #type textareayếu tố FAPI cho trình soạn thảo WYSIWYG gắn liền với Text Format để được tự động bao gồm, theo cách này:

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

Tuy nhiên, nó không được bao gồm trừ khi đó là trang "chỉnh sửa nút", do đó, một cái gì đó liên quan đến chức năng " filter_process_format" hoặc " wysiwyg_pre_render_text_format" có thể buộc nó, nhưng tôi chưa tìm thấy sự kết hợp kỳ diệu nào, vẫn đọc được nguồn của mô-đun Wysiwyg để tìm phần còn thiếu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.