2009-11-03 2 views
1

많은 CCK 필드가있는 노드가 있습니다. 익명 사용자로부터 필드를 숨기고 싶습니다. 나는 http://www.lullabot.com/articles/modifying-forms-5-and-6에서 약 두 가지 방법을 발견했습니다. 먼저 아래 코드로 theme_theme()을 시도했습니다hook_theme()은 노드의 표시 순서에 영향을줍니다.

function ssaa_theme1(&$existing, $type, $theme, $path) { 
    return array(
     'volunteer_node_form' => array(
      'arguments' => array('form' => null), 
     ), 
    ); 
} 


function ssaa_volunteer_node_form($form) { 
    $out = ''; 
    if (user_is_anonymous()) { 
     unset($form['field_active']); 
    } 
    $out .= drupal_render($form); 
    return $out; 
} 

이 간단한 코드는 예상대로 작동했지만 이상한 결과를 만들어 냈습니다. 저장/미리보기 버튼이 양식의 맨 위에 나타나고 맨 아래로 이동할 수 없습니다. 처음에는 drupal_render() 함수를 의심했지만 명령에 대해서는 아무 것도하지 않았습니다. ssaa_volunteer_node_form() 함수가 비어있을 때와 동일한 결과를 생성합니다.

그래서 hook_form_alter()를 사용하고 성공한 두 번째 옵션을 시도했습니다. 하지만 첫 번째 접근 방식이 제대로 작동하지 않는 이유를 파악하고 싶습니다. 나는 내가하고 싶은 일을하는 것이 더 쉽고 가벼운 방법이라고 생각한다.

아이디어가 있으십니까?

답변

1

이 필드를 사용자에게만 거부하려면 form_alter를 사용하는 것이 좋습니다. 그렇지 않으면 콘텐츠 권한을 사용하는 것이 좋습니다. 텍스트 편집기를 사용하지 않고도 모든 필드에 대해 이러한 설정을 전환 할 수 있습니다.

CCK 필드 입력 양식은 hook_form_alter()을 매우 잘 수락하지 않습니다. 그들은주기 말기에 노드 편집 폼에 삽입됩니다.

This example은 CCK 양식 요소를 비활성화하는 방법을 보여 주며 사용자의 요구에 맞출 수 있습니다.

매우 구체적인 요구 사항이 있으므로 새로운 Field Permissions 모듈을 살펴볼 수 있습니다. 아직 개발 중입니다 (및 시도한 적이 없으며). 그러나 개별 필드를 콘텐츠 권한으로 옵트 인하도록 허용합니다. 이렇게하면 권한 화면이 복잡해지고 새로운 필드는 모두 액세스 할 수 없게됩니다.

+0

와우 필드 권한 모듈을 알지 못했습니다. "Edit own field permission"과 같은 몇 가지 장점이 그럴 가치가있는 것 같습니다. – theunraveler

+0

제안한 필드 사용 권한 모듈을 사용하면 완벽하게 수행됩니다. 해당 CCK 필드의 기본값도 작동합니다. 나는 디폴트 값 작동이 정말로 필요하다. Content Permissions 모듈을 사용해 보았지만 체크 할 수있는 체크 박스가 너무 많습니다 (시스템에 약 20 개의 콘텐츠 유형과 8 개의 역할이 있습니다). 고마워요! – user201563

0

CCK와 함께 번들로 제공되는 콘텐츠 권한 모듈을 사용하여 필드 수준 권한을 설정할 수 있습니다. 해당 모듈을 활성화하면 모든 필드가 권한 영역에 표시되고 익명 사용자에게는 해당 권한을 거부 할 수 있습니다. 나는 이것이 이것을 달성하는 훨씬 쉬운 방법이라고 생각한다.

+0

form_alter에 있어야했다() 내 hook_form에 무게를 설정할 수 없습니다,하지만 난 수백 체크 포기 체크 박스. 답변 감사합니다. – user201563

0

최근 Drupal 6에서 같은 문제가 발생하여 질문이 유효합니다.

I는 $ 형태 오브젝트 표시

Devel의 DSM() 함수를 사용하여 (template.php부터), I는 버튼 든 0.0111의 플로트 무게를 나타내는 것으로 나타났다.

hook_theme() 다음 hook_form() template.php의 잘못된 행동 것으로 보인다. hook_form 사용 $ form 객체를 변경하지 않고 drupal_render ($ form)를 반환하면 Save/Preview 버튼이 맨 위에 표시됩니다.

이러한 후크를 사용해야하는 사람은 누구나 단추의 무게를 설정하는 form_alter도 만들어야합니다. 이렇게하면 버그가 해결되고 단추를 맨 아래쪽으로 다시 가져옵니다.

$form['buttons']['#weight'] = 100; 

참고 : 나는 코드, 그것은 내가 전에 컨텐츠 권한 모듈을 시도한