Deaktivieren Sie vertikale Registerkarten nach Inhaltstyp oder Benutzerrolle

10

Einige Benutzer haben möglicherweise nur die Möglichkeit, einen der Feldsätze zu bearbeiten, die in vertikalen Registerkarten im Knotenbearbeitungsformular angezeigt werden. In einem solchen Fall sieht es ziemlich albern aus, vertikale Registerkarten zu verwenden, da nur eine vertikale Registerkarte zur Auswahl steht. Siehe Screenshot:

Bildschirmfoto

Ist es also möglich, vertikale Registerkarten nach Benutzerrolle zu deaktivieren? Oder, abgesehen davon, deaktivieren Sie sie für bestimmte Inhaltstypen vollständig? Für meinen Anwendungsfall möchte ich nur, dass der Standort nicht in vertikalen Registerkarten angezeigt wird.

Ich habe Renderable Fields und Field Group zusammen ausprobiert, aber sie haben das Formular falsch verwaltet (fehlerhaft, glaube ich). Felder anordnen können vertikale Registerkarten nicht trennen.

Jay
quelle
Hast du das jemals behoben? Versuchen Sie, dasselbe mit der Registerkarte ubercart product zu tun.
Dee

Antworten:

7

Es gibt nur wenige Möglichkeiten, dies zu tun:

  1. Sie können das Renderable Elements- Modul verwenden (wie oben erwähnt). Sie können jeden Build Ihrer Installation registrieren und die Anzeige über die Feld-Benutzeroberfläche verwalten. Es werden (zusätzliche) Elemente vorhandener Entitäten auf den Verwaltungsformularen / Anzeigebildschirmen verfügbar gemacht, oder Sie können beispielsweise das Kontaktformular registrieren und die Felder über die Feldbenutzeroberfläche neu anordnen. Funktioniert derzeit einwandfrei für Formulare, die Unterstützung für andere erfolgt in einer zweiten Iteration.

  2. Oder fügen Sie Ihrem benutzerdefinierten Modul Folgendes hinzu:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
    
  3. Ein Sandbox-Modul , das vertikale Registerkarten deaktiviert

Hier ist dieses Kernthema, das sich darauf bezieht.


quelle
Wie ich in der Frage sagte, funktioniert Renderable Elements bei mir nicht. Es befindet sich noch im Alpha-Stadium und es ist ein Fehler mit Location bekannt. Also funktioniert es nicht für meine Situation. Ansonsten würde das ja funktionieren. Wenn dieser Fehler in Zukunft behoben wird, ist Renderable Elements wahrscheinlich der beste Weg, dies zu tun.
Jay
Entschuldigung, ich habe gerade Ihre Frage überflogen und Ihren Verweis auf das Modul für renderbare Elemente völlig übersehen. Davon abgesehen funktioniert die Entwicklerversion wie ein Zauber. Probieren Sie es aus.
Hmm, ok. Ich werde versuchen, die Dev-Version zu verwenden, wenn es keine anderen Alternativen gibt. Lassen Sie dies vorerst offen.
Jay
Ich habe meine Antwort oben mit mehr Optionen geändert.
1
Du hast recht. Ich habe es gerade versucht und das funktioniert in D7 nicht so wie in D6. Wenn renderbare Elemente nicht funktionieren und Sie mit Ihrem eigenen Modul oder der Verwendung des Sandbox-Moduls nicht vertraut sind, bin ich mir leider nicht sicher, was noch.
6

Sie können auch die Prüfung #access verwenden, um zu verhindern, dass Personen die vertikalen Registerkarten sehen.

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

Fügen Sie dies einfach einem Hook-Formular hinzu, oder zwischen dem Laden und dem Rendern eines Formulars. Danach können Sie render ($ form) aufrufen, um das Markup zu erhalten.

Derek Webb
quelle
2

Ich habe eine einfache mögliche Lösung in den bereits erwähnten Thread geschrieben: https://drupal.org/node/1048644#comment-7822687 . Der Einfachheit halber werde ich es hier einfügen.

Es gibt eine einfache Möglichkeit, vertikale Registerkarten in einem Formular zu deaktivieren, indem Sie einfach den $form['additional_settings']['#type']Wert der Variablen 'fieldset'in einer Implementierung von hook_form_alter () oder hook_form_FORM_ID_alter () ändern , wenn er gleich ist 'vertical_tabs'.
Sie müssen die Zugriffseinstellungen nicht ändern oder das gesamte $formArray rekursiv durchlaufen. Letzteres verbraucht unnötig zu viel Ressourcen.
(Getestet in 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);
  }
}

Das ist alles, natürlich, ErsatzMYMODULEORTHEMENAME zu Ihrem eigenen Moduls oder das Thema Namen (letztere in einer template.phpDatei), undmy_form_id auf Ihre Form von id.


Sie können die vertikalen Felder auch nur für Benutzer deaktivieren , die NICHT die Administratorrolle haben :

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

Falls jemand daran interessiert ist, einen Patch angebracht I (die die gleichen wie oben hat) zu Dripman ‚s Sandbox - Modul: # 2.080.739: vereinfacht das Verfahren zur Deaktivierung Vertical Laschen nur mit dem Wechsel $form['additional_settings']['#type']auf'fieldset' .

Sk8erPeter
quelle
Hervorragende Lösung, @ Sk8erPeter. Ich frage mich, ob es möglich ist, die zusätzlichen Einstellungen auszublenden, ohne '#access' = FALSE zu setzen, da dadurch die Werte verloren gehen, die durch die Standardeinstellungen festgelegt würden, wie z. B. der URL-Alias ​​und der veröffentlichte Status.
Jav
0

Renderfähige Elemente werden derzeit nicht unterstützt und bestätigen auf der Projektseite, dass sie mit einigen anderen bereitgestellten Modulen kollidieren, sodass ich mich bei Produktionsstandorten nicht darauf verlassen würde.

Die Frage, wie vertikale Registerkarten vollständig deaktiviert werden können, wird in diesem Thread behandelt .

Dripman hat ein einfaches Sandbox-Modul erstellt , um vertikale Registerkarten vollständig zu deaktivieren.

Abhängig von Ihrem gewünschten Grad an Engagement für die Codierung sollte das Dripman-Modul leicht anpassbar sein, um anhand von Feldern / Rollen selektiv zu sein.

Entschuldigung für die Überschneidung mit der prägnanten Antwort von @nicoz

autopoietisch
quelle
0

Sie können das Modul Sichtbarkeit vertikaler Registerkarten verwenden .

Dieses Modul hilft bei der Verwaltung der Sichtbarkeit vertikaler Registerkarten in Formularen zum Hinzufügen / Bearbeiten von Inhaltstypen.

Zum Verwalten der Sichtbarkeit vertikaler Registerkarten auf Inhaltstypen Formulare hinzufügen / bearbeiten. Besuchen Sie einfach die /admin/config/user-interface/vertical-tabs-visibility Seite und wählen Sie die Inhaltstypen aus. Vertikale Registerkarten im Formular zum Hinzufügen / Bearbeiten von Knoten werden für aktivierte Inhaltstypen deaktiviert.

Derzeit befindet sich das Modul in der Sandbox

melkowski
quelle
0

Für meinen Anwendungsfall habe ich versucht, die vertikalen Registerkarten zu deaktivieren, die im Abschnitt Veröffentlichungsoptionen in einem Knotenbearbeitungsformular angewendet werden (da dies die einzige Feldgruppe war, auf die eine bestimmte Gruppe von Benutzern Zugriff hat):

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

Zur Verdeutlichung müssen Sie nicht nur additional_settings #collapsibleauf FALSE setzen, sondern alle Elemente in müssen auch das Element #collapsible set toFALSE , in my case that was theoptions` enthalten.

tyler.frankenstein
quelle