노드 / 편집 및 기타 양식에 JS 및 CSS를 추가하는 올바른 방법


10

JS가 많은 사이트를 만들고 있는데 JS 코드를 어디에 넣을지 궁금합니다. 최적으로 테마 레이어가 아닌 각 모듈에 JS를 유지하고 싶습니다. 일부 콘텐츠는 블록 등으로 노출 될 수 있습니다.

그러나 캐시에 문제가 있습니다. 이 예에서는 노드 편집 양식에 JS & CSS를 추가해야합니다. hook_block_view를 사용했지만 캐시되었습니다. 따라서 노드 편집 양식에 오류가 있으면 drupal_add_js & drupal_add_css 함수가 호출되지 않습니다. hook_node_prepare의 경우에도 마찬가지입니다.

JS & CSS 레이어는 어디에 입력 하시겠습니까? 노드 편집 양식에 오류가 있어도 호출되는 후크가 있습니까?

답변:


6

JS 및 CSS를 특히 노드 편집 페이지 (또는 일반적으로 모든 양식)에 추가하려는 경우 가장 적합한 올바른 위치는 hook_form_alter ()이며 사용해야하는 속성은 #after_build입니다.

DO에 대한이 의견은 정확히 무엇을해야하는지 알려줍니다-http: //drupal.org/node/1253520#comment-4881588

도움이 되었기를 바랍니다 :-)


고마워, 내가 필요한 것만 그가 기본보다 훨씬 좋은 지금 좋은 형태를 얻었다. 그러한 사이트의 아키텍처에 대한 의견이 있습니까?
Jens

다행이다. 그렇다면 답변을 '답변 됨'으로 표시해야 답변되지 않은 질문 목록에 질문이 표시되지 않으며 도움을주는 사람이 "카르마"가됩니다. 나는 당신이 여기 새로운 것을 봅니다. 나도 있지만 다른 StackOverflow 서비스에 대해 더 활발한 계정이 있으며 이곳을 좋아합니다.
Sumeet Pareek

그리고 오 .. 단지 당신이 양식에 JS CSS가 필요하다는 것을 알고 사이트의 아키텍처에 대해 논평하려고하는 것은 범죄에
지나지 않을 것입니다 :-p

물론 지금 대답했다.
Jens

1
@SumeetPareek #attached거의 모든 경우에 사용하는 것이 좋습니다. 또한 drupal_add_js / css는 Drupal 8에서 더 이상 사용되지 않습니다.
AyeshK

6

JS / CSS가 항상 다른 렌더링 요소와 함께 올바르게로드되도록 하려면 #attached 속성을 사용해야합니다 .


나는 이것이 사용 방법의 예 #attached와 피하는 문제에 대한 추가 정보 로부터 실제로 도움이 될 것이라고 생각했습니다 .
Michael Greisman 2016 년

@MichaelGreisman 여기에 코드를 인라인으로 추가하는 가치를 즉시 보지 못한다고 말해야합니다. 내가 제공 한 링크에서 더 잘 유지 관리 될 것입니다.이 링크는 수행 방법에 대한 공식 문서입니다. 내 대답은 무엇해야하는지 설명 하지만 양식 api 문서는 올바른 방법 입니다.
Letharion

3

이 답변과 의견에는 필연적으로 @AyeshK와 @Letharion의 예제 코드가 필요하다고 느꼈습니다. 의견이 너무 깁니다. 답변을 용서해주세요. 도움이된다면 Sumeet 또는 Letharion의 답변을 투표하십시오. 또한 다음 예제는 분명히 CSS를 추가하지만 Javascript를 추가하는 것과 거의 동일합니다.

@Sumeet의 답변을 사용하지만 #attached대신 속성을 사용하면 drupal_add_css다음과 같습니다.

/* Implements hook_form_FORM_ID_alter() */
function MY_MODULE_form_MY_FORM_ID_alter(&$form, &$form_state, $form_id) {
  $form['#after_build'][] = 'MY_MODULE_some_function_name_after_build';
}

function MY_MODULE_some_function_name_after_build($form, &$form_state) {
  $style_path = drupal_get_path('module','MY_MODULE') . '/css/my_css.css';
  // drupal_add_css('file', $style_path);
  $form['#attached']['css'][] = $style_path;
  return $form;
}

마지막 으로이 게시물drupal_add_css 에서 더 이상 사용되지 않는 것을 찾을 수 있습니다 . 그것은 drupal_add_xxx가 저와 마찬가지로 잘 작동하는 많은 사람들에게 뉴스 일 수 있습니다.


#after_build비트 내 지식 말도 최선이다, 간단하게 제거해야합니다. ( #after_build솔루션을 제공하는 답변에 대한 비슷한 의견이 있습니다.) 이것이 저의 간단한 대답이 좋은 이유를 설명한다고 생각합니다. 내가 제공 한 링크를 간단하게 살펴보면 동일한 코드를 찾을 수 있지만 불필요한 비트는 없습니다.
Letharion

0

Drupal 8의 경우이 기사 를 살펴 보는 것이 좋습니다.

라이브러리 .yml

something: 
  version: VERSION
  js: 
    js/something.js: {}
  dependencies: 
    - core/jquery

.구성 단위

function MODULE_page_attachments(array &$page) {
  $page['#attached']['library'][] = MODULE/something;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.