표시에서 제외 할 $ form 요소를 지정 하시겠습니까?


20

form_alter 또는 템플릿 파일을 사용하여 특정 요소를 양식에 숨기고 싶습니다. Drupal 7에서 $ form 요소를 지정하여 양식으로 표시되지 않지만 기억할 수는 없습니다. unset () 아니라 다른 함수!

답변:


29

unset()제출 / 유효성 처리기가 처리 될 때 설정되지 않은 요소가 존재할 것으로 예상 할 수있는 것을 알지 못하므로 양식을 사용 하는 것은 좋은 해결책이 아닙니다. 이로 인해 원치 않는 오류가 발생할 수 있습니다.

양식 요소를 '숨기기'위해 안전하게 사용할 수있는 세 가지 방법이 있습니다

  • '#type' => 'value'요소에 사용 하면 요소의 값이 #value정상적으로 정상적으로 제출 / 확인 함수에 전달됩니다 . 이것이 내가 선호하는 방법입니다.
  • 사용 '#access' => FALSE이 화면에 출력되어서는 안 나타 내기 위해 요소.
  • 사용 '#type' => 'hidden'(이것의 사용은 사용 사례에 달려 있지만, 그렇지는 숨겨진 입력으로 형태로 출력하고자 당신이 할 양식 요소의 값을 숨기려고하는 경우 내가 상상) 바트 등을 제안했다.

hide ()를 잊어 버렸습니다 .
유세프

2
@zhilevan hide()은 양식 요소에 사용 하면 안되며 유효성 검사기가 요소에 대해 여전히 실행되므로 전체 양식 제출 프로세스를 쉽게 망칠 수 있습니다. 예를 들어, hide($form['title']);노드 양식 인 경우 제목 필드가 필요하므로 양식을 제출할 수 없지만 값은 제공되지 않습니다. 위의 3 가지 방법은 순서대로 사용하는 것이 가장 좋습니다. :
Clive

@Clive 덕분에 위의 방법을 알고 있습니다. 제 질문은 hide ()와 관련이 있다고 생각합니다. (여전히 함수를 기억할 수 없습니다.) 어쨌든 첫 번째 답변에서 내 의견을 참조하십시오 drupal_render($form['base']['prices']['sell_price']).
Serjas

양식을 테마로하는 템플릿 파일의 코드입니까? 그렇지 않은 경우 작동하지 않는 이유는으로 렌더 요소를 화면에 인쇄 할 수 있지만 drupal_render()태그 / 토큰 등의 양식을 얻지 못하기 때문입니다. 전체 $form배열 을 출력하지 않는 한
Clive

나는 후크 테마와 print_r ($ form)을 사용했고 심지어 drupal_render ($ form [ 'title'])가 작동하고 있는데 문제는 수직 탭 아래의 요소입니다!
Serjas

4

템플릿 파일을 사용하는 경우 hide ()를 사용하여 물건을 숨길 수 있습니다 .

에서 양식 요소를 숨기려면 최선의 선택 hook_form_alterunset()수 있습니다.

값을 저장하는 경우 '#type'=> 'hidden' 도 사용할 수 있습니다.


숨기기는 요소를 배제하는 더 좋은 방법입니다.
유세프

내가 달성하려고했던 것은 사용자 정의 Ubsercart 제품 노드 양식이었습니다. 내가 표시하고 싶은 것은 sell_price이며 배송, 무게 등과 같은 다른 요소를 숨기고 drupal_render($form['base']['prices']['sell_price'])있지만 form을 표시 하지만 저장하지는 않습니다!
Serjas

4

제출 버튼이나 이와 유사한 경우 #access를 false로 사용하면 일부 양식이 손상 될 수 있습니다. 이 경우 CSS를 사용하여 요소를 숨겼습니다.

$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';

또 다른 옵션입니다.

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