콘텐츠 유형 또는 사용자 역할별로 세로 탭을 사용하지 않도록 설정


10

일부 사용자는 노드 편집 양식의 세로 탭에 표시되는 필드 세트 중 하나만 편집 할 수 있습니다. 이 경우 선택할 수있는 세로 탭이 하나뿐이므로 세로 탭을 사용하는 것이 다소 어리석은 것처럼 보입니다. 스크린 샷보기 :

스크린 샷

그렇다면 사용자 역할별로 세로 탭을 비활성화 할 수 있습니까? 아니면 특정 콘텐츠 유형에 대해 모두 사용 중지 하시겠습니까? 내 유스 케이스의 경우 위치가 세로 탭에 표시되지 않기를 원합니다.

Renderable Fields와 Field Group을 함께 시도했지만 양식을 잘못 관리했습니다 (버기, 생각합니다). 필드 정렬은 세로 탭을 분리 할 수 ​​없습니다.


이 문제를 해결 한 적이 있습니까? ubercart 제품 탭으로 동일한 작업을 시도합니다.
Dee

답변:


7

이를 수행하는 몇 가지 방법이 있습니다.

  1. 위에서 언급 한대로 렌더링 가능 요소 모듈을 사용할 수 있습니다 . 설치시 빌드를 등록하고 필드 UI를 통해 디스플레이를 관리 할 수 ​​있습니다. 관리 양식 / 디스플레이 화면에서 기존 엔터티에 (추가) 요소를 제공하거나 예를 들어 연락처 양식을 등록하고 필드 UI를 통해 필드를 재 배열 할 수 있습니다. 현재 양식에서 잘 작동하며 다른 지원은 두 번째 반복으로 제공됩니다.

  2. 또는 사용자 정의 모듈에 다음을 추가하십시오.

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
  3. 수직 탭을 비활성화 하는 샌드 박스 모듈

문제 를 언급하는 핵심 문제 는 다음과 같습니다 .


질문에서 말했듯이 Renderable Elements가 작동하지 않습니다. 여전히 알파 단계이며 Location에 알려진 버그가 있습니다. 따라서 내 상황에서는 작동하지 않습니다. 그렇지 않으면 예, 이것이 효과가 있다고 생각합니다. 나중에 해당 버그가 수정되면 Renderable Elements가 가장 좋은 방법 일 것입니다.
Jay

죄송합니다. 방금 질문을 감추고 렌더링 가능한 요소 모듈에 대한 언급을 완전히 놓쳤습니다. 즉, dev 버전은 매력처럼 작동합니다. 가자.

음 알았어. 다른 대안이 없으면 dev 버전을 사용해보십시오. 지금은 열어두고
Jay

더 많은 옵션으로 위의 답변을 수정했습니다.

1
네 말이 맞아 방금 시도했지만 D6에서와 같이 D7에서 작동하지 않습니다. 불행히도 렌더링 가능한 요소가 작동하지 않고 자신의 모듈이나 샌드 박스 모듈을 사용하는 것이 불편하다면 다른 것이 확실하지 않습니다.

6

#access 확인을 사용하여 사람들이 세로 탭을 보지 못하게 할 수도 있습니다.

$form['additional_settings']['#access'] = FALSE;

후크 양식 변경에 또는 양식의로드와 렌더링 사이에 간단히 추가하십시오. 그런 다음 render ($ form)를 호출하여 마크 업을 얻을 수 있습니다.


2

이미 언급 한 스레드에서 간단한 가능한 솔루션을 작성했습니다 : https://drupal.org/node/1048644#comment-7822687 . 편의상 여기에 붙여 넣습니다.

hook_form_alter () 또는 hook_form_FORM_ID_alter () 의 구현에서 $form['additional_settings']['#type']변수의 값을 동일 하게 변경하면 양식에서 세로 탭을 비활성화하는 간단한 방법 이 있습니다. 액세스 설정을 변경하거나 전체 어레이를 재귀 적으로 걸을 필요가 없으며 , 후자는 불필요하게 너무 많은 리소스를 소비합니다. (Drupal 7.23 에서 테스트되었습니다 .)'fieldset''vertical_tabs'
$form

/**
 * Disable Vertical tabs on a form with simply changing the value of $form['additional_settings']['#type']
 * @see https://drupal.org/node/1048644
 */
function form_disable_vertical_tabs(&$form){
  // originally $form['additional_settings']['#type'] equals to 'vertical_tabs'
  if(isset($form['additional_settings']['#type']) && ($form['additional_settings']['#type'] === 'vertical_tabs')){
    $form['additional_settings']['#type'] = 'fieldset';
  }
}

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  if($form_id == 'my_form_id'){
    // disable vertical tabs for this form
    form_disable_vertical_tabs($form);
  }
}

물론 모듈이나 테마의 이름 ( 파일 의 후자 ) 양식의 ID를 대체MYMODULEORTHEMENAME 하는 것 입니다.template.phpmy_form_id


관리자 역할이없는 사용자에 대해서만 세로 필드를 비활성화 할 수도 있습니다 .

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  global $user;
  $is_administrator = in_array('administrator', array_values($user->roles));

  if($form_id == 'my_form_id'){
    // if $user does NOT have the administrator role.
    if (!$is_administrator) {
      // disable vertical tabs for this form
      form_disable_vertical_tabs($form);
    }
  }
}

경우 누군가가 관심을, 난에 (상기와 같은 않는) 패치를 부착 Dripman 의 샌드 박스 모듈 : # 2080739 : 단순화 바로 변화와 수직 탭을 사용하지 않도록 설정하는 방법 $form['additional_settings']['#type']'fieldset' .


@ Sk8erPeter의 탁월한 솔루션. '#access'= FALSE를 설정하지 않고 추가 설정을 숨길 수 있는지 궁금합니다 .URL 별칭 및 게시 상태와 같은 기본 설정에 의해 설정된 값이 손실되기 때문입니다.
Jav

0

렌더링 가능한 요소는 현재 지원되지 않으며 프로젝트 페이지에서 다른 기여 된 모듈과 충돌하므로 프로덕션 사이트에 의존하지 않습니다.

비활성화 수직 탭에 완전하게 달려 드는 방법에 대한 질문 이 스레드 .

Dripman은 수직 탭을 완전히 비활성화하기 위해 간단한 샌드 박스 모듈 을 만들었습니다 .

원하는 코딩 수준에 따라 Dripman의 모듈은 필드 / 역할에 따라 선택적으로 쉽게 사용자 정의 할 수 있어야합니다.

@nicoz의 간결한 답변과 겹치는 사과


0

수직 탭 가시성 모듈을 사용할 수 있습니다 .

이 모듈은 컨텐츠 유형 추가 / 편집 양식에서 수직 탭 가시성을 관리하는 데 도움이됩니다.

컨텐츠 유형에서 수직 탭 가시성을 관리하려면 양식을 추가 / 편집하십시오. /admin/config/user-interface/vertical-tabs-visibility 페이지 를 방문 하여 컨텐츠 유형을 선택하십시오. 확인 된 컨텐츠 유형에 대해 노드 추가 / 편집 양식의 수직 탭이 비활성화됩니다.

현재 모듈은 샌드 박스에 있습니다


0

유스 케이스의 경우 노드 편집 양식 의 공개 옵션 섹션에서 적용되는 수직 탭을 비활성화하려고했습니다 (특정 사용자 세트가 액세스 할 수있는 유일한 필드 세트이기 때문에).

// Place somewhere in MYMODULE_form_alter()...
$form['additional_settings']['#type'] = 'fieldset';
$form['additional_settings']['#collapsible'] = FALSE;
$form['options']['#collapsible'] = FALSE;

명확하게 additional_settings #collapsible하기 위해 FALSE 로 설정 해야 할뿐만 아니라 내부의 모든 요소에는 #collapsible set toFALSE , in my case that was theoptions` 요소 가 있어야 합니다 .

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