유기 그룹에 대한 group_audience와 같은 양식의 필드에 대한 액세스를 숨기거나 방지하는 방법


9

이것은 그룹 문제 필드 또는 양식에서 게시 설정과 같은 필드를 숨기려고 할 때 defaut 값이더라도 필드의 두 세트를 모두 null 값으로 유효성을 검사 할 때 올바르게 선언되었습니다.

보이지 않는, #access, unset hidden 아무것도 작동하지 않았습니다! 현재 프로젝트 사용자의 경우 주소 또는 그림과 같이 당시의 일부 프로필 만 편집 할 수 있기 때문에 매우 문제가됩니다. 따라서 그룹 청중을 숨기면 사용자가 모든 그룹에 속하게됩니다. 편집하다.

아래 코드를 사용 하여이 필드를 숨기고 사용자를 그룹에 유지했습니다.

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

누구든지 이것을 달성하는 더 좋은 방법을 생각할 것입니까?

감사


이 답변은 사용이 여전히 DOM 조작으로 값을 변경할 수 있기 때문에 완벽하지 않습니다
— iStryker

답변:


6

편집하다:

알았어. 알아 냈어. 이것을 사용자 정의 모듈에 넣으십시오.

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

그러면 스토리 노드의 제목이 '핫 스터프 (hot stuff)'로 설정되며 #access = FALSE; 때문에 페이지에 렌더링되지 않습니다.

hook_form_alter () 안에 더 세분화 제어를 추가 할 수 있습니다

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

이것은 Drupal 6 & 7에서 작동합니다.

기존 답변 (무시) ​​:

내가 이런 식으로한지 오래되었으므로 잘못했을 수 있습니다. [#value]양식 항목 을 설정하면 양식에 표시되지 않습니다.

Drupal 6 hook_form_alter()에서 사용자 정의 모듈 로이 작업을 수행했습니다 . Drupal 7에서 작동하는지 모르겠으며 전처리 기능으로 수행 할 수 있는지 모르겠습니다.


귀하의 답변에 감사드립니다. 불행히도 제 경우에는 작동하지 않았지만 양식 필드는 이미 편집 양식이므로 사전에 # 값이 있습니다
— silkAdmin

@silkAdmin 새로운 편집 내용을 참조하십시오
— iStryker

Stryker는 시간을내어 시간을내어 주셔서 감사합니다. 위의 기술자가 작동하지만 필드를 숨길 수는 있지만 제출시 기본값도 고려되지 않는 것 같습니다. 그래서 나는 모든 프로파일 편집시 사용자가 여전히 그룹에서 쫓겨납니다. 지금까지는 #prefix # 접미사 트릭 만 정상적으로 작동하는 것 같습니다.
— silkAdmin

$ form [ 'title'] [ '# value'] = $ form [ 'title'] [ '# default_value']
— iStryker

5

'element-hidden'CSS 클래스를 양식 요소에 추가 할 수도 있습니다.

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

iStryker가 이전에 언급했듯이 DOM 조작을 통해 값을 변경할 수 있습니다. 그러나 이것은 양식 필드 (또는 다른 렌더링 요소)를 숨길 수있는 좋은 방법입니다. element-hidden클래스에 정의되어 있습니다 system.base.css.


버디, 날 구해 줬어 감사. 내가 본 다른 모든 방법은 양식 자체의 요소를 출력하지 않습니다. 제 경우에는 해당 요소가 형식이 될 것으로 예상하는 contrib 모듈에서 양식 요소를 숨기고 싶습니다. 그렇지 않으면 제대로 작동하지 않습니다. CSS 수정은 원하지 않는 요소를 숨기지 만 모든 것이 여전히 작동합니다. 또한 이것이 "해커 방지"가 아니며 필요한 모든 경우에만 신뢰할 수있는 편집기 사용자에게 제공하는 인터페이스를 단순화하기 만하면됩니다.
— Mario Awad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.