Wyłącz zakładki pionowe według typu zawartości lub roli użytkownika

10

Niektórzy użytkownicy mogą mieć możliwość edycji tylko jednego zestawu pól wyświetlanego w pionowych kartach w formularzu edycji węzła. W takim przypadku używanie gabarytów pionowych wydaje się głupie, ponieważ do wyboru jest tylko jedna karta pionowa. Zobacz zrzut ekranu:

zrzut ekranu

Czy można wyłączyć pionowe karty według roli użytkownika? A może wyłączając je całkowicie dla niektórych typów treści? W moim przypadku chcę po prostu, aby Lokalizacja nie była wyświetlana w pionowych kartach.

Próbowałem Renderable Fields i Field Group razem, ale źle zarządzały formularzem (chyba buggy). Rozmieść pola nie mogą oddzielić pionowych tabulatorów.

Sójka
źródło
Czy kiedykolwiek to naprawiłeś? Próbuję zrobić to samo z kartą produktu Ubercart.
Dee

Odpowiedzi:

7

Można to zrobić na kilka sposobów:

  1. Możesz użyć modułu Renderable Elements (jak wspomniano powyżej). Umożliwia zarejestrowanie dowolnego kompilacji instalacji i zarządzanie wyświetlaniem za pomocą interfejsu użytkownika. Udostępni (dodatkowe) elementy istniejących podmiotów na formularzach do zarządzania formularzami / wyświetlaczami lub możesz na przykład zarejestrować formularz kontaktowy i zmienić układ pól za pomocą interfejsu pola. Obecnie działa dobrze na formularzach, obsługa innych nadchodzi w drugiej iteracji.

  2. Lub dodaj następujące elementy do niestandardowego modułu:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
  3. Moduł obszaru izolowanego że wyłącza pionowe zakładki

Oto ten podstawowy problem, który się do tego odnosi.


źródło
Jak powiedziałem w pytaniu, Renderable Elements nie działa dla mnie. Nadal jest w fazie alfa i jest znany błąd związany z lokalizacją. Więc to nie działa w mojej sytuacji. W przeciwnym razie tak, myślę, że to zadziałałoby. Jeśli w przyszłości błąd zostanie naprawiony, Renderable Elements jest prawdopodobnie najlepszym sposobem na rozwiązanie tego problemu.
Jay
przepraszam, właśnie przejrzałem twoje pytanie i całkowicie pominąłem twoje odniesienie do modułu elementów do renderowania. To powiedziawszy, wersja deweloperska działa jak urok. Wypróbuj.
Hmm ok. Spróbuję użyć wersji dev, jeśli nie ma innych alternatyw. Na razie pozostawiam to otwarte.
Jay
Zmodyfikowałem moją odpowiedź powyżej, dodając więcej opcji.
1
Masz rację. Właśnie próbowałem i to nie działa w D7, tak jak w D6. Niestety, jeśli elementy do renderowania nie działają i nie czujesz się komfortowo z własnym modułem lub z użyciem modułu piaskownicy, nie jestem pewien, co jeszcze.
6

Możesz także użyć testu #access, aby ludzie nie widzieli pionowych kart.

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

Po prostu dodaj to do formularza haka, zmieniając lub pomiędzy ładowaniem a renderowaniem formularza. Następnie możesz wywołać render ($ form), aby uzyskać znaczniki.

Derek Webb
źródło
2

Napisałem proste możliwe rozwiązanie we wspomnianym już wątku: https://drupal.org/node/1048644#comment-7822687 . Dla wygody wkleję go tutaj.

Istnieje prosty sposób, aby wyłączyć tabulatory pionowe w formularzu, zmieniając po prostu wartość $form['additional_settings']['#type']zmiennej 'fieldset'w implementacji hook_form_alter () lub hook_form_FORM_ID_alter () , jeśli jest ona równa 'vertical_tabs'.
Nie musisz zmieniać ustawień dostępu ani $formrekurencyjnie chodzić po całej tablicy, ta ostatnia zużywa niepotrzebnie zbyt dużo zasobów.
(Testowane w Drupal 7.23 .)

/**
 * 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);
  }
}

To wszystko oczywiście zastępujeMYMODULEORTHEMENAME nazwę własnego modułu lub motywu (ten ostatni w template.phppliku) imy_form_id identyfikator formularza.


Możesz także wyłączyć pola pionowe tylko dla użytkowników, którzy NIE mają roli administratora :

/**
 * 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);
    }
  }
}

W przypadku, ktoś jest zainteresowany, ja załączeniu patcha (który robi to samo jak wyżej) do Dripman modułu piaskownicy „s # 2080739: Uproszczona metoda wyłączenia z zakładki pionowe prostu zmieniając $form['additional_settings']['#type']się'fieldset' .

Sk8erPeter
źródło
Doskonałe rozwiązanie, @ Sk8erPeter. Zastanawiam się, czy to możliwe, aby ukryć dodatkowe ustawienia bez ustawienia „#access” = FALSE, ponieważ spowoduje to utratę wartości, które byłyby ustawione przez ustawienia domyślne, takie jak alias adresu URL i status publikacji.
Jav
0

Elementy zdolne do renderowania nie są obecnie obsługiwane i potwierdza na stronie projektu, że koliduje z innymi modułami, dzięki czemu nie polegam na nich w witrynach produkcyjnych.

W tym wątku poruszono kwestię całkowitego wyłączenia pionowych zakładek .

Dripman stworzył prosty moduł piaskownicy do całkowitego wyłączenia pionowych zakładek.

W zależności od pożądanego poziomu zaangażowania w kodowanie, moduł Dripmana powinien być łatwo konfigurowalny, aby był selektywny na podstawie pól / ról.

Przepraszamy za zwięzłą odpowiedź udzieloną przez @nicoz

autopoetyczne
źródło
0

Możesz użyć modułu Widoczność zakładek pionowych .

Ten moduł pomaga zarządzać widocznością kart pionowych w formularzach dodawania / edycji typów treści.

Aby zarządzać widocznością kart pionowych w typach treści, dodaj / edytuj formularze. wystarczy odwiedzić /admin/config/user-interface/vertical-tabs-visibility stronę i wybrać typy treści. Pionowe karty w formularzu dodawania / edycji węzła będą wyłączone dla zaznaczonych typów treści.

Obecnie moduł znajduje się w piaskownicy

Milkovsky
źródło
0

W moim przypadku próbowałem wyłączyć pionowe zakładki stosowane w sekcji Opcje publikowania w formularzu edycji węzła (ponieważ był to jedyny zestaw pól, do którego ma dostęp określony zestaw użytkowników):

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

Dla wyjaśnienia, nie tylko musisz ustawić wartość additional_settings #collapsibleFAŁSZ, wszystkie elementy muszą również zawierać element #kolumbaWalne opcje set toFAŁSZ , in my case that was the.

tyler.frankenstein
źródło