문제

Drupal 6의 특정 노드에 대한 CSS 또는 Javascript 파일을 포함하는 가장 좋은 방법은 무엇입니까?

내 사이트에 작은 자바스크립트 애플리케이션이 실행되는 페이지를 만들고 싶습니다. 따라서 CSS와 자바스크립트는 해당 페이지에만 적용되며 다른 페이지 로드에는 전혀 포함되기를 원하지 않습니다.

도움이 되었습니까?

해결책 4

지금까지 제가 생각해낸 최고의 솔루션은 PHP 입력 모드를 활성화한 다음 다음을 호출하는 것입니다. drupal_add_css 그리고 drupal_add_js 노드 본문 시작 부분의 PHP 블록에 적절하게 추가하세요.

다른 팁

나는 사용하지 않는 것이 좋습니다 hook_nodeapi 그에 대한.CSS와 Javascript를 추가하는 것은 레이아웃과 관련이 있으므로 hook_nodeapi 그럴 만한 곳이 아니야:테마를 사용하세요.이렇게 하면 당신은 ~할 수 있다 새 테마를 개발할 때 해당 파일을 재정의하세요.nodeapi 접근 방식으로 이를 수행하는 것은 조금 더 어려울 것입니다(파일에 대한 js/css 목록을 검색하고 제거한 후 자신의 파일로 바꿔야 합니다).

그래도:당신이 해야 할 일은 해당 파일을 추가하는 노드 전처리 기능을 추가하는 것입니다.모듈이나 사용자 정의 테마에서 이 작업을 수행할 수 있습니다.모듈의 경우 다음과 같습니다.

function mymodule_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . "/file.js", "module");
    drupal_add_css(drupal_get_path('module', 'mymodule') . "/file.css", "module");
  }
}

또는 테마의 경우:

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
  }
}

먼저 캐시를 지우는 것을 잊지 마세요.

이러한 함수는 노드에 테마가 지정되기 전에 호출됩니다.거기에 js/css를 지정하면 계단식 접근 방식이 허용됩니다.모듈에 일반/기본 항목을 포함하고 테마에 향상된 기능이나 특정 기능을 제공할 수 있습니다.

전처리 기능을 사용하지만 여기에는 몇 가지 문제가 있습니다. $variables['styles'] 일반적으로 설정되어 있습니다 ~ 전에 노드 전처리 함수가 호출됩니다.다시 말해서 drupal_get_css 이미 호출되었으므로 전화를 걸게 됩니다. drupal_add_css 쓸모 없는.마찬가지다 drupal_add_js.나는 재설정하여 이 문제를 해결합니다. $variables['styles'] 값.

function mytheme_preprocess_node(&$variables) {
  $node = $variables['node'];
  if (!empty($node) && $node->nid == $the_specific_node_id) {
    drupal_add_js(path_to_theme() . "/file.js", "theme");
    drupal_add_css(path_to_theme(). "/file.css", "theme");
    $variables['styles'] = drupal_get_css();
    $variables['script'] = drupal_get_js();
  }
}

이것은 대부분의 경우에 작동하는 것 같습니다.

추신테마 문제를 해결하기 위해 모듈을 만들 필요가 거의 없습니다.

건배.

이것은 좋은 해결책인 것 같습니다.

http://drupal.org/project/js_injector그리고http://drupal.org/project/css_injector

기술적으로 노드가 아닌 다른 항목에 인라인 코드를 삽입하려는 경우 작동하므로 노드 ID가 없고 사용 가능한 PHP 입력 옵션이 없습니다.내가 그것을 사용하여 몇 개의 관리 페이지에 작은 jQuery 조정을 주입한 것처럼.노드 ID가 아닌 경로로 작동합니다.

이것은 트릭을 수행해야 합니다 - 다음을 사용하는 빠른 모듈입니다. Hook_nodeapi 노드가 표시될 때 JS/CSS를 삽입합니다.

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  // the node ID of the node you want to modify
  $node_to_modify = 6;

  // do it!
  if($op == 'view' && $node->nid == $node_to_modify) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css');
  }
}

이렇게 하면 PHP 입력 필터 활성화와 관련된 보안 문제가 방지되며, 기본 노드 템플릿을 업데이트하고 사용자 정의 템플릿을 잊어버린 경우 오래된 것이 될 수 있는 별도의 노드 템플릿 파일이 필요하지 않습니다.

javascript를 호출하는 해당 노드(node-needsjs.tpl.php)에 대한 사용자 정의 템플릿을 가질 수 있습니다.이는 노드 본문에서 바로 PHP를 사용하는 것보다 조금 더 깨끗하며 향후 콘텐츠 변경을 더 쉽게 만듭니다.

편집하다: 나는 위에서 매우 명확하지 않았다고 생각합니다.템플릿 파일 이름을 node-(nodeid).tpl.php로 지정하려고 합니다.따라서 노드 1인 경우 node-1.tpl.php 파일을 호출합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top