it-swarm-ko.tech

노드 / 편집 페이지에서 wysiwyg API 플러그인에 필요한 추가 자바 스크립트 파일을 어떻게로드합니까?

지원되는 편집기의 툴바에 버튼을 추가하는 Drupal 7)에 대해 WYSIWYG API 모듈을 사용하여 플러그인을 작성하고 있습니다.

hook_wysiwyg_plugin() 후크를 사용하여 편집기 도구 모음에 새 버튼을 만들지 만 다른 자바 스크립트 파일을로드해야합니다. hook_wysiwyg_plugin() 후크를 사용하면 하나의 JS 및 CSS 파일을 지정할 수 있습니다.

플러그인 자바 스크립트에 필요한 추가 자바 스크립트 파일을로드하려면 어떻게해야합니까?

라이브러리 (예 : 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는 동적으로 생성 된 플러그인에 대한 메뉴 콜백을 수행하지만 하나의 자바 스크립트 파일에 대해서만 아이디어 소스를 참조하십시오).

  • 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

이론적으로, 필요한 wysiwyg 편집기의 #type textarea FAPI 요소에 올바른 "# text_format"매개 변수를 사용하기 만하면됩니다. 다음과 같이 자동으로 포함되는 텍스트 형식 :

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