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


9

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

내가 사용하고 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는 플러그인 (iirc) 당 JS 파일 만 지원하므로 최상의 옵션 일 것입니다.

당신을위한 몇 가지 야생 / 미개척 옵션 :

  • 플러그인에 정의 된 Javascript 파일의 메뉴 콜백을 작성하고 여러 javascript 파일의 소스를 포함하는 다소 캐시 된 javascript 파일을 다시 전달하십시오. (Wysiwyg Fields는 동적으로 생성 된 플러그인에 대해 메뉴 콜백을 수행하지만 하나의 자바 스크립트 파일에 대해서만 아이디어 소스를 참조하십시오).

  • http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml 과 유사한 Javascript 동적 Javascript 로딩 기술을 사용 하십시오.

도움이 되었기를 바랍니다.


아직 시도하지 않았지만 작동하는 것처럼 들립니다. 감사.
Camsoft

2

drupal_add_js :

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

추가 모듈이 WYSIWG 영역을 생성 할 때만 추가 파일이로드되도록 WYSIWYG API 모듈과 연결해야합니다. 또한 hook_library ()로 정의 된 라이브러리를로드해야합니다.
Camsoft

1

이론적으로 텍스트 형식과 관련된 wysiwyg 편집기 에 대해 FAPI 요소 에 올바른 " #text_format "매개 변수를 사용하면 다음 #type textarea과 같이 자동으로 포함됩니다.

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.