Disabilita le schede verticali per tipo di contenuto o ruolo utente


10

Alcuni utenti potrebbero avere solo la possibilità di modificare uno dei set di campi che viene visualizzato nelle schede verticali nel modulo di modifica del nodo. In tal caso, sembra piuttosto sciocco utilizzare le schede verticali poiché esiste solo una scheda verticale tra cui scegliere. Vedi screenshot:

immagine dello schermo

Quindi, è possibile disabilitare le schede verticali in base al ruolo dell'utente? O, a parte questo, disabilitarli del tutto per determinati tipi di contenuto? Per il mio caso d'uso, voglio solo che Posizione non venga visualizzato nelle schede verticali.

Ho provato Renderable Fields e Field Group insieme ma hanno gestito il modulo in modo errato (buggy, credo). Disporre i campi non può separare le schede verticali.


Hai mai risolto questo? Prova di fare lo stesso con la scheda del prodotto ubercart.
Dee,

Risposte:


7

Ci sono alcuni modi per farlo:

  1. È possibile utilizzare il modulo Renderable Elements (come indicato sopra). Ti consente di registrare qualsiasi pezzo di build sulla tua installazione e gestire la visualizzazione tramite l'interfaccia utente del campo. Renderà disponibili (ulteriori) elementi di entità esistenti sulle maschere di gestione / schermate di visualizzazione oppure è possibile ad esempio registrare il modulo di contatto e riorganizzare i campi tramite l'interfaccia utente del campo. Funziona attualmente bene sui moduli, il supporto per altri sta arrivando in una seconda iterazione.

  2. Oppure aggiungi quanto segue al tuo modulo personalizzato:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
  3. Un modulo sandbox che disabilita le schede verticali

Ecco questo problema principale che si riferisce a questo.


Come ho detto nella domanda, Renderable Elements non funziona per me. È ancora in fase alpha e c'è un bug noto con Location. Quindi non funziona per la mia situazione. Altrimenti, sì, penso che funzionerebbe. Se in futuro quel bug verrà risolto, Renderable Elements è probabilmente il modo migliore per farlo.
Jay,

scusate ho appena scremato la vostra domanda e ho perso completamente il vostro riferimento al modulo degli elementi renderizzabili. Detto questo, la versione dev funziona come un fascino. Provalo.

Hmm va bene. Proverò ad usare la versione dev se non ci sono altre alternative. Lasciando questo aperto per ora.
Jay,

Ho modificato la mia risposta sopra con più opzioni.

1
Hai ragione. L'ho appena provato e questo non funziona in D7 come in D6. Sfortunatamente se gli elementi renderizzabili non funzionano e non ti senti a tuo agio con il tuo modulo o usando il modulo sandbox, non sono sicuro di cos'altro.

6

Puoi anche usare il controllo #access per impedire alle persone di vedere le schede verticali.

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

Aggiungilo semplicemente a un hook hook alter o tra il caricamento e il rendering di un form. Dopodiché puoi chiamare render ($ form) per ottenere il markup.


2

Ho scritto una semplice soluzione possibile nel thread già citato: https://drupal.org/node/1048644#comment-7822687 . Per comodità, lo incollerò qui.

Esiste un modo semplice per disabilitare le schede verticali in un modulo, semplicemente modificando il $form['additional_settings']['#type']valore della variabile in 'fieldset'in un'implementazione di hook_form_alter () o hook_form_FORM_ID_alter () , se è uguale a 'vertical_tabs'.
Non è necessario modificare le impostazioni di accesso o percorrere l'intero $formarray in modo ricorsivo, quest'ultimo consuma inutilmente troppe risorse.
(Testato 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);
  }
}

Questo è tutto, ovviamente, in sostituzioneMYMODULEORTHEMENAME del proprio modulo o del nome del tema (quest'ultimo in un template.phpfile) emy_form_id dell'ID del modulo.


Puoi anche disabilitare i campi verticali solo per gli utenti che NON hanno il ruolo di amministratore :

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

Nel caso in cui qualcuno è interessato, ho attaccato una patch (che fa la stessa come sopra) per Dripman modulo sandbox s': # 2.080.739: Semplificare il metodo della disattivazione di schede verticali con solo cambiando l' $form['additional_settings']['#type']a'fieldset' .


Ottima soluzione, @ Sk8erPeter. Mi chiedo se è possibile nascondere le impostazioni aggiuntive senza impostare '#access' = FALSE, poiché questo perde i valori che sarebbero impostati dalle impostazioni predefinite, come l'alias dell'URL e lo stato pubblicato.
Jav

0

Gli elementi abilitabili al rendering non sono attualmente supportati e riconosce nella pagina del progetto che si scontra con alcuni altri moduli forniti, quindi non mi affiderei ai siti di produzione.

La questione di come disabilitare completamente le schede verticali è affrontata in questo thread .

Dripman ha creato un semplice modulo sandbox per disabilitare completamente le schede verticali.

A seconda del livello desiderato di impegno con la codifica, il modulo di Dripman dovrebbe essere facilmente personalizzabile per essere selettivo sulla base di campi / ruoli.

Ci scusiamo per la sovrapposizione con la risposta sintetica di @nicoz


0

È possibile utilizzare il modulo Visibilità schede verticali .

Questo modulo aiuta a gestire la visibilità delle schede verticali sui moduli di aggiunta / modifica del tipo di contenuto.

Per gestire la visibilità delle schede verticali sul tipo di contenuto, aggiungere / modificare moduli. basta visitare la /admin/config/user-interface/vertical-tabs-visibility pagina e selezionare i tipi di contenuto. Le schede verticali nel modulo di aggiunta / modifica del nodo saranno disabilitate per i tipi di contenuto selezionati.

Attualmente il modulo è in sandbox


0

Per il mio caso d'uso, stavo cercando di disabilitare le schede verticali applicate nella sezione Opzioni di pubblicazione in un modulo di modifica del nodo (poiché questo era l'unico set di campi a cui un determinato gruppo di utenti ha accesso):

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

Per chiarimenti, non solo è necessario impostare additional_settings #collapsiblesu FALSE, anche tutti gli elementi all'interno devono avere l' elemento #collapsible set toFALSE , in my case that was theoptions`.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.