Deshabilite las pestañas verticales por tipo de contenido o rol de usuario

10

Algunos usuarios solo pueden tener la capacidad de editar uno de los conjuntos de campos que se muestran en pestañas verticales en el formulario de edición de nodos. En tal caso, parece bastante tonto usar pestañas verticales ya que solo hay una pestaña vertical para elegir. Ver captura de pantalla:

captura de pantalla

Entonces, ¿es posible deshabilitar las pestañas verticales por rol de usuario? ¿O, salvo eso, deshabilitarlos por completo para ciertos tipos de contenido? Para mi caso de uso, solo quiero que la ubicación no se muestre en pestañas verticales.

Intenté Renderable Fields y Field Group juntos, pero manejaron el formulario incorrectamente (creo que es defectuoso). Los campos de organización no pueden separar las pestañas verticales.

Arrendajo
fuente
¿Alguna vez arreglaste esto? Intentando hacer lo mismo con la pestaña ubercart del producto.
Dee

Respuestas:

7

Hay pocas formas de hacer esto:

  1. Puede usar el módulo Elementos Renderables (como mencionó anteriormente). Le permite registrar cualquier pieza de construcción en su instalación y administrar la pantalla a través de la interfaz de usuario de campo. Pondrá a disposición elementos (adicionales) de entidades existentes en los formularios de gestión / pantallas de visualización o, por ejemplo, puede registrar el formulario de contacto y reorganizar los campos a través de la interfaz de usuario de campo. Actualmente funciona bien en formularios, el soporte para otros viene en una segunda iteración.

  2. O agregue lo siguiente a su módulo personalizado:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
    
  3. Un módulo de espacio aislado que deshabilita las pestañas verticales

Aquí está este problema central que se refiere a esto.


fuente
Como dije en la pregunta, Renderable Elements no funciona para mí. Todavía está en etapa alfa y hay un error conocido con la ubicación. Entonces no funciona para mi situación. De lo contrario, sí, creo que esto funcionaría. Si en el futuro ese error se soluciona, Renderable Elements es probablemente la mejor manera de hacerlo.
Jay
lo siento, acabo de leer tu pregunta y me perdí por completo tu referencia al módulo de elementos renderizables. Dicho esto, la versión de desarrollo funciona a las mil maravillas. Dale una oportunidad.
Mmm, ok. Intentaré usar la versión dev si no hay otras alternativas. Dejando esto abierto por ahora.
Jay
He modificado mi respuesta anterior con más opciones.
1
Tienes razón. Acabo de probarlo y esto no funciona en D7 como lo hizo en D6. Desafortunadamente, si los elementos renderizables no funcionan y no te sientes cómodo con tu propio módulo o con el módulo sandbox, no estoy seguro de qué más.
6

También puede usar la comprobación de #acceso para evitar que las personas vean las pestañas verticales.

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

Simplemente agréguelo a un formulario de enlace alternativo o entre la carga y la representación de un formulario. Después de eso, puede llamar a render ($ form) para obtener el marcado.

Derek Webb
fuente
2

Escribí una posible solución simple en el hilo ya mencionado: https://drupal.org/node/1048644#comment-7822687 . Por conveniencia, lo pegaré aquí.

Hay una manera simple de deshabilitar las pestañas verticales en un formulario, simplemente cambiando el $form['additional_settings']['#type']valor de la variable 'fieldset'en una implementación de hook_form_alter () o hook_form_FORM_ID_alter () , si es igual a 'vertical_tabs'.
No es necesario cambiar la configuración de acceso o recorrer toda la $formmatriz de forma recursiva, esta última consume demasiados recursos innecesariamente.
(Probado en 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);
  }
}

Eso es todo, por supuesto, sustituto del nombreMYMODULEORTHEMENAME de su propio módulo o tema (este último en un template.phparchivo) ymy_form_id de la identificación de su formulario.


También puede deshabilitar los campos verticales solo para usuarios que NO tienen la función de administrador :

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

En caso de que alguien esté interesado, adjunté un parche (que hace lo mismo que el anterior) al módulo de sandbox de Dripman: # 2080739: Simplifique el método de deshabilitar las pestañas verticales con solo cambiar el $form['additional_settings']['#type']a'fieldset' .

Sk8erPeter
fuente
Excelente solución, @ Sk8erPeter. Me pregunto si es posible ocultar las configuraciones adicionales sin establecer '#access' = FALSE, ya que esto pierde los valores que establecerían las configuraciones predeterminadas, como el alias de URL y el estado publicado.
Jav
0

Los elementos que se pueden procesar actualmente no son compatibles, y reconoce en la página del proyecto que choca con algunos otros módulos contribuidos, por lo que no confiaría en él para los sitios de producción.

La cuestión de cómo deshabilitar completamente las pestañas verticales se aborda en este hilo .

Dripman ha creado un módulo sandbox simple para deshabilitar completamente las pestañas verticales.

Dependiendo de su nivel deseado de compromiso con la codificación, el módulo de Dripman debe ser fácilmente personalizable para ser selectivo en función de los campos / roles.

Disculpas por la superposición con una respuesta sucinta de @nicoz

autopoiético
fuente
0

Puede usar el módulo Visibilidad de pestañas verticales .

Este módulo ayuda a administrar la visibilidad de pestañas verticales en formularios de agregar / editar tipo de contenido.

Para administrar la visibilidad de pestañas verticales en el tipo de contenido, agregue / edite formularios. simplemente visite la /admin/config/user-interface/vertical-tabs-visibility página y seleccione los tipos de contenido. Las pestañas verticales en el formulario de agregar / editar nodo se deshabilitarán para los tipos de contenido marcados.

Actualmente el módulo está en sandbox

milkovsky
fuente
0

Para mi caso de uso, estaba tratando de deshabilitar las pestañas verticales que se aplican en la sección Opciones de publicación en un formulario de edición de nodo (ya que este era el único conjunto de campos al que un conjunto particular de usuarios tiene acceso):

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

Para aclarar, no solo necesita establecerlo additional_settings #collapsibleen FALSO, sino que todos los elementos dentro deben tener el elemento #collapsible set toFALSE , in my case that was theoptions`.

tyler.frankenstein
fuente