El título básicamente lo dice todo, quiero deshabilitar una sola casilla de verificación de un elemento de tipo de casilla de verificación FAPI.
No quiero hacerlo con JavaScript, ni cambiarlo de casillas de verificación a múltiples elementos de casilla de verificación es una opción ya que el elemento lo proporciona otro módulo.
Pensamientos?
Respuestas:
¡Existe una forma limpia en Drupal 7! Aparentemente, según esta publicación , aún no está documentado.
Otro ejemplo .
También puede establecer la función #access en FALSE, para ocultar completamente la casilla de verificación.
fuente
Desafortunadamente, no hay una forma realmente limpia de hacerlo en FAPI. Su mejor opción , si está decidido, es alterar una función #proceso adicional en el elemento de casillas de verificación.
La función predeterminada agregada a los elementos del tipo 'casillas de verificación' es en realidad una función ( expand_checkboxes () ) divide el elemento individual en múltiples elementos del tipo 'casilla de verificación' que luego se fusionan en uno. Si tuviera que aprovechar su segunda función de proceso, podría alcanzar el grupo expandido de elementos de 'casilla de verificación' y desactivar el en cuestión.
El siguiente código no se ha probado por completo, por lo que se recomienda:
fuente
preg_replace()
sobre el resultado.Aquí está mi código para Drupal 7, para cambiar el elemento Roles en la página Editar usuario.
fuente
Estoy usando casillas de verificación como "asignar" y "desasignar". El cliente me ha pedido que desactive "desasignar", pero aún es importante representar "asignación". Teniendo en cuenta que las casillas de verificación DESACTIVADAS se envían como "falsas" y, si no se manejan correctamente, se desasignarán, divido mis casillas de verificación en "procesarlas" e "ignorar estas deshabilitadas". Así es cómo:
Tenga en cuenta que 'partner_assignments' es su propia matriz / variable y no se procesará como "unassign", en mi caso de uso. Gracias por publicar, me llevó a esta solución.
fuente
D7 Aquí teníamos que asegurarnos de que al agregar un nodo, una determinada opción de referencia de término de taxonomía siempre no se puede marcar y siempre se guardará en el nodo. Así que entramos en #after_build y deshabilitamos esa determinada opción, pero tuvimos que asegurarnos de que al final esa opción se pasará. Porque solo deshabilitarlo habría detenido el viaje de esa opción a ganchos futuros.
Así es como se ve la opción deshabilitada:
fuente
No pude obtener la respuesta de Eaton para que funcione tal como está escrita (la devolución de llamada #process no devuelve nada, y se llama antes de que se expandan las casillas de verificación) y también quería que el valor regresara de la casilla de verificación deshabilitada (quería que estuviera marcada permanentemente ) Esto funcionó para mí (D6).
Si alguien conoce una forma más ordenada, ¡me encantaría escucharla!
fuente
Fatal error: Call to undefined function expand_checkboxes()
Aquí está mi código para Drupal 7, para cambiar el elemento Roles en la página Editar usuario.
fuente
En Drupal 7, para deshabilitar las opciones en una selección en una entidad de campo, descubrí que tenía que instalar una
#process
función. Desafortunadamente, esto deshabilitó la función de proceso incorporada,form_process_checkboxes
por lo que es necesario volver a agregarla (o llamarla desde su función de proceso). Además, al deshabilitar las casillas de verificación que ya están marcadas, descubrí que el valor incorporado callback (form_type_checkboxes_value
) ignora los valores predeterminados al recuperar resultados de la entrada.Entonces algo como esto:
Y finalmente:
No encontré que ninguna de las otras respuestas en esta página funcionó en este caso.
fuente
Aquí está mi ejemplo (usando
#after_build
):Además de la siguiente devolución de llamada de función:
Probado en Drupal 6, pero también debería funcionar para Drupal 7.
Drupal 6
Puede usar la siguiente función ( fuente ):
fuente
Estoy usando el siguiente código en drupal 6: -
y la función de devolución de llamada está aquí: -
/ ** * Procesar cada casilla de verificación basada en 'feture' ya está siendo utilizada por un Subdominio o no. * @param Array $ element array de casillas de verificación de formulario * /
fuente
Una cosa importante a tener en cuenta es que las casillas de verificación deshabilitadas no se envían, por lo que es posible que también deba forzar
#value
la casilla de verificación. Por ejemplo:En mi caso, sin esto,
$form_state['values']
no contenía el valor de mi casilla de verificación (que estaba habilitado de forma predeterminada, pero deshabilitado).fuente
Enganche el campo de texto y cree un cuadro de texto dinámico con información de la base de datos
1 ° obtener la asociación. matriz de la base de datos, por ejemplo
2 ° Implementos
hook_form_alter()
/ ** * Implementa hook_form_alter (). * id de formulario = vistas-expuestas-formulario * /
¡3 ° campos múltiples serán verificables!
fuente
Si está creando su propio formulario, en lugar de ejecutar funciones separadas de form_alter / # process / # pre_render, puede cambiar de 'casillas de verificación' a generar elementos 'checkbox' individuales.
'#tree' => TRUE
le da la misma estructura de árbol que la versión de casillas de verificación cuando la matriz $ form_state ['values'] llega a la validación / envío / reconstrucción. Si no puede o no quiere usar #tree por alguna razón, asigne a cada casilla de verificación una'#parents' => array('my_element', $key)
propiedad para establecer explícitamente su posición en la estructura de valores.fuente