2011-09-30 3 views
1

드루팔 (Drupal 6)에는 사용자 정의 블록이 있습니다.이 블록은 사용자 정의 오른쪽 사이드 바 영역에 이름을 지정하고 배치했습니다. 이 블록의 ID는 ($block_id 도우미 변수 인 에서 발견되었습니다.)영역간에 이동하면 블록의 ID가 변경됩니까?

이 블록의 출력을 무시하고보기를 표시하므로 마크 업을 변경해야합니다. 이제

myTheme_preprocess_block(&$vars) { 

    $this_block_id = $vars['id']; /* region-independent ID (for reliability) */ 
    $vars['template_files'] = array(); 

    switch ($this_block_id) { 

     case 7: 
      $vars['template_files'][] = 'block-my-override-template'; 
      break; 
     default: 
      /* take no action */ 
    } 
} 

, 나는 사용자 지정 지역이 아닌 기본입니다 오른쪽 사이드 바 지역이 블록을 (이동했습니다 나는 따라서 블록의 고유 한 ID를 검색 myTheme_preprocess_block()라는 template.php의 전처리 기능이 있습니다 하나는 Garland와 함께 제공)을 사용자 정의 이름이있는 바닥 글 영역으로 가져옵니다. 갑자기 내 우선 적용 템플릿 파일 block-my-override-template.tpl.php이 더 이상 참조되지 않습니다.

에서 고유 한 블록 ID를 출력하고 마술처럼이 블록에 이 변경되었습니다.의 ID가 7에서 13으로 변경되었습니다. 똑 바른 얼굴로, 더 적은! 이 블록을 오른쪽 사이드 바 영역으로 되 돌리면 블록이 ID 7로 반환되고 모든 코드가 다시 작동하기 시작합니다.

내 질문은 : 한 지역에서 다른 지역으로 이동할 때 고유 ID가 변경되면 어떻게 블록을 고유하게 식별 할 수 있습니까?

+0

현재 Drupal의 블록 내부에 고유 한 텍스트 태그를 생성하고 있습니다. '{JD_MY_BLOCKNAME}'을 호출 한 다음 위와 유사한 함수를 사용하여 블록 ID 대신이를 감지하십시오. 그러나 그것은 매우 성가신 것처럼 보입니다. –

답변

1

보기를 사용하는 경우 실제 블록을 사용하는 대신보기의 블록 표시를 무시 하시겠습니까?

모듈에서 사용자 정의 블록을 간단하게 선언 할 수 있습니까? 이렇게하면 블록의 테마 측면을보다 쉽게 ​​관리 할 수 ​​있습니다.

+0

제안 해 주셔서 감사합니다. 다음 번에 이러한 대체 방법을 시도해 보겠습니다. 나는 template.php에서 오버 라이딩하여 "올바른"일을 시도하고있었습니다. Drupal의 일반적인 문서는 너무 끔찍해서 플로트없이 효과적으로 끝까지 말할 수 있습니다. ;) –