2011-03-15 6 views
0

여기서는 노드보기에서 필드 그룹이 표시되는 방식을 제어하려고합니다. 이 노드 수준의 사용 권한이 될 것이므로 이러한 사용 권한이 동일한 콘텐츠 형식의 다른 노드에 영향을 미치기를 원하지 않기 때문에 사용자 역할별로 제어하지 않으려합니다.특정 필드의 값을 기준으로 Drupal 7 필드를 표시하고 숨기는 방법

예를 들어 ROLEA, ROLEB 및 ROLEC의 세 가지 역할이 있다고 상상해보십시오. 각 역할에는 필드에 액세스하기위한 권한이 설정되어 있습니다. 노드가 처음 생성 될 때 역할이 ROLEA 인 사용자는 몇 개의 필드를 볼 수 있으며 해당 필드의 값을 편집 할 수 있습니다. 노드가 게시되면 규칙 모듈을 통해 규칙/작업이 호출되고 해당 노드의 상태 필드가 STAGE1로 설정됩니다. 이 이벤트 (새 노드 작성)가 끝나면 사용자 (ROLEA)가 방금 작성한 노드로 이동하면 이전에 편집 가능했던 필드는 이제 읽기 전용이어야합니다. 이것은 규칙 모듈이 상태 필드의 값을 STAGE1로 설정했을 때 노드가 Drupal에 의해로드되기를 원할 때 상태 값을 확인해야하고, 예를 들어 STAGE1 인 경우이를 기반으로 다른 필드를 수정합니다. 그 특정 노드는 읽기 전용이거나 편집 가능하거나 어떤 경우 사용자로부터 숨길 수 있습니다. 그래서 내 생각 엔 그 유형의 노드가로드 될 때마다 모듈을 생성하여 상태 필드 (우리가 그 노드 유형에서 생성 한 필드)를 확인하고 해당 필드의 값에 따라 어느 노드 나타나거나 숨겨야합니다. 이것은 특정 노드 유형의 해당 필드에 대해 설정된 사용 권한보다 우선합니다.

내가하려고하는 것은 Roules 모듈에 의해 설정된 해당 콘텐츠 형식의 특정 필드 값을 기준으로 어떤 필드가 읽기 전용인지/편집 가능/숨김인지를 제어하는 ​​방법을 만드는 것입니다 다른 사용자 그룹에 의해 그 노드에서 작업하는 다른 단계에서. 나는 Organic Group을 사용하지 않고있다. 나는 Drupal 7과 규칙 모듈과 다른 권한 관련 모듈을 사용한다. 그러나 사용자 역할과는 별도로 노드 수준에서 필드 가시성을 처리 할 수있는 방법이 없다는 것을 알았습니다.

동일한 결과를 얻을 수있는 다른 방법이 있다고 생각하십니까? 그런 모듈을 만드는 방법에 대한 아이디어를 알려 주시면 감사하겠습니다.

정말 감사드립니다.

답변

3

당신은 모듈을 만들고 사용하여 노드 양식에 후크를 추가 할 수 있습니다 hook_form_alter 또는 hook_form_FORM_ID_alter

을 쉽게 노드 양식을 수정할 수 있습니다 후크의이 종류를 사용하고 숨기거나 당신이 무엇을 기반으로 특정 필드를 읽게 (사용자 역할, 필드 값 ...)

+1

소주 감사합니다. 페이지 뷰에는 hook_page_alter()를, 페이지 편집에는 hook_form_alter를 사용했습니다. – Mehr

0

노드가 렌더링되기 전에 렌더 배열을 수정할 수있는 hook_node_view_alter() 후크 및 hook_entity_view_alter() 후크가 있습니다. 여기서 필드 배열을 '#access' = FALSE으로 설정하여 숨겨 지도록하거나 '#access' = TRUE을 표시하도록 설정할 수 있습니다.

노드의 다른 필드에있는 날짜가 과거의 시간 ("구독 만료"필드) 인 경우 일부 필드를 숨기려면이 방법을 사용하고 있습니다. 그래서 편집 폼을 변경하지 않고 필드 디스플레이 만 변경할 수있었습니다.