Cómo ocultar y / o evitar el acceso a los campos en un formulario, como group_audience para grupos orgánicos

9

Esto me ha estado molestando durante un tiempo. Cuando intento ocultar campos como el campo de audiencia grupal o la configuración de publicación de un formulario, al validar el formulario, ambos campos tienen un valor nulo, aunque el valor predeterminado sea ha sido correctamente declarado

Traté de usar Invisible, #access, unset oculto, nada funciona! Esto es muy problemático porque para mi proyecto actual, los usuarios pueden editar solo pequeños fragmentos de su perfil en ese momento, por ejemplo, solo la dirección o la imagen, por lo que si oculto la audiencia del grupo, el usuario termina expulsado de los grupos a los que pertenece en cada momento. editar.

Terminé usando el código a continuación para ocultar estos campos mientras mantenía al usuario en su grupo.

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

¿Alguien pensaría en una mejor manera de lograr esto?

Gracias

sedaadmin
fuente
Esta respuesta no es perfecta porque el uso aún puede cambiar el valor con la manipulación DOM
iStryker

Respuestas:

6

Editar:

Ok, lo descubrí. Ponga esto en su módulo personalizado:

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

Esto establecerá el título del nodo de la historia en 'cosas interesantes' y NO se mostrará en la página porque #access = FALSE;

Puede agregar más control de granularidad dentro de hook_form_alter () como

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

Esto funciona para Drupal 6 y 7.

Respuesta anterior (ignorar):

Ha pasado un tiempo desde que hice algo así, así que puedo equivocarme. Si configura el elemento [#value]de un formulario, no será visible en el formulario.

Lo hice en Drupal 6, hook_form_alter()en un módulo personalizado. No sé si funcionará en Drupal 7 y no sé si puede hacerlo en una función de preproceso

iStryker
fuente
Gracias por su respuesta, aunque desafortunadamente no funcionó en mi caso, los campos de formulario ya tienen un #valor pre presentado ya que son formularios de edición
silkAdmin
@silkAdmin Por favor, vea las nuevas ediciones
iStryker
Gracias Stryker por tomarse el tiempo para investigar ese evento, aunque su técnica anterior funciona, oculta los campos, parece que el valor predeterminado tampoco se tiene en cuenta en el envío. Así que termino con el usuario aún siendo expulsado de su grupo en cada edición de perfil. Hasta ahora, solo el truco del sufijo #prefix # parece hacer que se comporte normalmente.
silkAdmin
do $ form ['title'] ['# value'] = $ form ['title'] ['# default_value']
iStryker
5

También puede simplemente agregar la clase CSS 'elemento oculto' al elemento de formulario

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

Como iStryker mencionó anteriormente, aún sería posible cambiar el valor a través de la manipulación DOM. Sin embargo, esta es una manera agradable y fácil de ocultar un campo de formulario (o cualquier otro elemento de representación). La element-hiddenclase se define en system.base.css.

Chaulky
fuente
Amigo, me salvaste. Gracias. Todos los otros métodos que he visto no muestran los elementos en el formulario en sí. En mi caso, quiero ocultar elementos de formulario en un módulo contrib que espera que esos elementos estén en el formulario, de lo contrario no funciona correctamente. Su corrección de CSS oculta los elementos no deseados, pero todo sigue funcionando. Gracias por señalar también que esto no es "a prueba de piratas informáticos" y solo funciona cuando todo lo que necesita es simplificar la interfaz que presenta a los usuarios de editores de confianza.
Mario Awad