컨텐츠 필드를 다른 영역으로 분할


11

내 상황은 다음과 같습니다. A, B 및 C 필드가있는 컨텐츠 유형 세미나가 있습니다. 헤더, 바닥 글, 컨텐츠 및 사이드 바 왼쪽 영역이 있습니다. 세미나에 내용 영역과 사이드 바 왼쪽 영역에 표시하려는 일부 필드가 있습니다.

이 작업은 어떻게합니까? 이것이 이전에 이미 답변 된 경우 사과드립니다. 저는 개발자이며 후크 및 전 처리기 기능에 대해 망설이지 않습니다. Views 모듈을 설치했지만 사용하지 않았습니다 (이것은 말할 수없는 경우 첫 Drupal 사이트입니다 : P).

건배.

편집 : 이것은 Drupal 7 용 입니다.


어떤 버전의 Drupal?
keva

죄송합니다, Drupal 7에 대한 것입니다. 해당 정보를 내 원래 질문에 추가했습니다.
레스터 피바디

문제를 해결하자마자 답변을 드리겠습니다. 현재 콘텐츠를 적절하게 표시하기 위해 제안을 설정하는 방법을 모색 중입니다.
Lester Peabody

답변:


11

페이지의 다른 영역에 노드의 내용을 쉽게 추가 할 수있는 방법은 없습니다. 이 문제를 해결하는 방법에는 여러 가지가 있습니다.

비 코딩 방식 : 뷰 및 블록

뷰 만들기

  • 유형 : 블록
  • 상황 별 필터 : 내용 : Nid
    • 기본값 : 현재 페이지에서 가져 오기
  • 필드 : 원하는 것
  • 필터:
    • 콘텐츠 유형 : 세미나

(및 원하는 추가 설정)

그런 다음 관리자 블록 페이지로 이동 새로 생성 된 뷰 블록을 표시하려는 영역으로 이동합니다. 세미나 노드 페이지에만 표시되어야합니다.

모든 지역에 대해 반복

theme_preprocess_region ()을 사용한 코딩 방법 :

코드는 다음과 같습니다

MYTHEME_preprocess_region(&$variables) {
  if (isset($node) && ($node->type == 'seminar' )) {
     //add new variable here.     
  }
}

이것은 Drupal 7 전용입니다. 이제 해당 지역에서 사용 가능합니다.


1
보기 / 차단 방식은 실제로 내가 선호하는 방식이지만 일부는 더 접근하기 쉬우므로 Display Suite를 제안했습니다.
jhedstrom

내가 발견하는대로 뷰는 이것에 효과적입니다. 보기는 일반적으로 환상적입니다. 또한 메뉴 블록 모듈을 사용하여 사이트의 현재 위치를 기준으로 메뉴를 분할합니다 (주 메뉴를 분할하여 항상 표시되도록하고 하위 메뉴는 기본 메뉴에 속하는 메뉴를 기반으로 함). 완전히 멋진 모듈, 적극 권장됩니다.
레스터 피바디

거의 한 달 동안이 질문을하고 답변을 수락했지만 지금은이 답변을 적용하고 있습니다. Drupal 7에 대한 뷰 사용에 대해 명확히 설명해 주시겠습니까? Drupal 7의 Views 3에는 Argument : nid가 없습니다. 감사합니다.
레스터 피바디

나는 그것을 알아. 인수 개념은 고급에서 상황 별 필터로 대체되었습니다.
레스터 피바디

D7, 문맥 적합 : 내용 : NID. 편집 : 내가 대답하기 전에 그것을 발견 참조
iStryker

7

디스플레이 스위트 모듈은이 작업을 수행 할 수 있습니다. 테마 영역을 노드 구성 요소의 대상으로 표시하려면 Display Suite Extras 모듈을 사용으로 설정해야합니다. 이를 수행하는 방법에 대한 정보 는 Display Suite 설명서 의 블록에 필드 추가 페이지 에서 찾을 수 있습니다.


5

나는 같은 문제가 있었다. 해결책은 매우 쉽습니다. Drupal 7에서는 FULL 및 TEASER뿐만 아니라 (가장 오래된 버전에서 알 수 있듯이) 자체 view_mode를 정의 할 수 있습니다. 따라서 해당 지역에서 사용할 다른 view_mode를 정의하십시오 (예 : LEFTHAND). Drupal은 컨텐츠 영역에 FULL view_mode를 표시합니다. 따라서 사이드 바 왼쪽 영역에 LEFTHAND를 표시하려면 Drupal에 문의해야합니다.

  1. template_preprocess_page ()에서

    if ($vars['node']) {
    $vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
    }

  2. node.tpl.php에서 왼쪽보기 모드에 대한 새로운 디스플레이 추가

    if ($view_mode == 'lefthand') {
    // render content fields here
    }


1
이 답변은 매우 초자연적이며보기 모드를 정의하는 것 외에 다른 외부 모듈이 필요하지 않습니다. Display Suite의 간단한 대안은 엔터티보기 모드입니다. drupal.org/project/entity_view_mode
paul-m

나는 이것을 정말로 좋아했다. 특정 페이지에만 표시되도록 if 함수로 감싸십시오. 내가 사용 if (array_key_exists('block_14',$vars['page']['main_content'])){}에만 특정 블록을 페이지에 표시되도록 할 수 있습니다.
Dominic Woodman

3

Display Suite가 사용자에게 너무 많은 것처럼 보이는 경우 (훌륭한 모듈이지만 몇 개의 필드를 재배치해야하는 경우 과잉 상태 일 수 있습니다)이 목적-> CCK 블록 전용 모듈이 있습니다 .

나는 그것이 CCK 블록이라고 불리는 것을 알고 있지만 Drupal 7 (CCK의 기능을 핵심으로 가져 왔습니다)과 함께 작동합니다.


1

@Patrik Lucan의 답변을 약간 변경하면 if ($vars['node'])노드가 아닌 페이지 (예 : 차단 또는보기 페이지가있는 사용자 정의 프론트 페이지)에서 문제가 발생했습니다.

로 변경:

if (array_key_exists('node', $vars))

문제를 해결 한 것 같습니다.


0

한편이를위한 모듈이 있습니다. 모듈 페이지에서 :

Field as Block블록 에 현재 노드의 하나 이상의 필드를 표시하는 쉬운 방법을 제공합니다.

이 모듈은 Panels 및 Display Suite와 같은 모듈을 대체하거나보기를 사용하여 하나의 필드 만 검색하는 블록을 정의하는 간단한 대안이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.