¿Cómo puedo evitar que las áreas de texto sean redimensionables?


8

Las áreas de texto en Drupal 7 son redimensionables por defecto. Me gustaría desactivar esto, pero cuando revisé un área de texto con Firebug, no pude encontrar el CSS que lo hacía redimensionable.

¿Cómo puedo evitar que las áreas de texto cambien de tamaño?

Respuestas:


17

Es JS lo que hace que las áreas de texto sean redimensionables, no CSS. Creo que la forma más sencilla de deshabilitar este comportamiento para todas las áreas de texto es implementarlo THEMENAME_textarea()en su tema y eliminarlo allí:

function THEMENAME_textarea($element) {
  $element['element']['#resizable'] = false ;
  return theme_textarea($element) ;
}

1
Lo mismo se puede hacer con un módulo; en ese caso, el módulo debe implementar la implementación hook_theme_registry_alter () . Para notar que el código no puede llamar theme('textarea'), o causaría un bucle infinito; necesita llamar theme_textarea(), o la función de tema que se ha configurado desde otro módulo como reemplazo de theme_textarea().
kiamlaluno

Gracias por el fragmento, pero no pude hacerlo funcionar. Debería poder reemplazar THEMENAME con el nombre de mi carpeta de temas y colocar el código en template.php, ¿verdad? Intenté esto con Bartik también, pero no pude hacerlo funcionar. Vacié el caché dos veces después de actualizar el archivo.
Patrick Kenny

2
Hmm debería funcionar, intente en unset($element['#resizable']);lugar de $element['#resizable'] = false;. Si nos fijamos en el código, theme_textarea()eso definitivamente debería funcionar
Clive

3
Descubrí que $elementcontiene una matriz llamada element, así que esto funcionó: $element['element']['#resizable'] = false;
Derek Ahmedzai

Respuesta editada según el comentario de Derek Ahmedzai.
jamix

4

Si solo necesita compatibilidad con CSS3, puede usar el siguiente CSS:

textarea { resize: none; }

O si necesita deshabilitar el cambio de tamaño en un área de texto específica, agregue la ID de esa área de texto:

.edit-body-und-0-value { resize:none }

1

Reemplazar esto en el tema es un cambio de último minuto, sobre qué módulos no tendrán la oportunidad de reaccionar.

Es tan fácil hacer esto a través de un módulo y una #processdevolución de llamada:

/**
 * Implements hook_element_info_alter()
 */
function custom_element_info_alter(&$types) {
  $types['textarea']['#process'][] = 'custom_process_textarea';
}

/**
 * A custom callback to disable "grippies" on textareas.
 */    
function custom_process_textarea($element) {
  $element['#resizable'] = FALSE;
  return $element;
}

Esto le da a módulos como Wysiwyg la oportunidad de notar que un área de texto no debe tener un grippie, por lo que puede evitar adjuntar ese comportamiento al deshabilitar un editor.


1

Implemente esto en su TEMA. Se obligará a la #resizableque FALSEe impedir la JS y anotación de renderizado.

/**
 * Implements template_preprocess_textarea().
 */
function THEME_preprocess_textarea(&$variables) {
  // Hide grippie.
  $variables['element']['#resizable'] = FALSE;
}

La respuesta aceptada es cercana, pero las funciones theme_ * no deben llamarse directamente, ya que pueden omitir las funciones de proceso / preproceso involuntariamente


1

Puede agregar CSS en línea personalizado a su formulario, para ocultar los grippies:

$form['#attached']['css'][] = array(
  'data' => '.resizable-textarea .grippie { display: none; }',
  'type' => 'inline',
);

0

Ahora se lanzó un nuevo módulo llamado Desactivar área de texto redimensionable .

Este es un módulo simple que agrega la capacidad de anular la propiedad predeterminada #resizable de los campos de área de texto. Por defecto, todas las áreas de texto son redimensionables. Este módulo le permite deshabilitar esta función en cada campo.

Es muy fácil de configurar. Simplemente edite el campo deseado y verá la opción "Deshabilitar #resizable propiedad de este área de texto". También puede deshabilitar el cambio de tamaño de su resumen, si el campo es de tipo "Texto largo con resumen".


0

Puede hacer la forma alter de nodo o comentario.

Consulte el código de muestra y los comentarios a continuación:

$form['body'][LANGUAGE_NONE][0]['value']['#resizable'] = FALSE;

Para mozilla y chrome, aún podemos ver el problema. colocar css hack.

textarea {
 resize: none;
 }

-1

Estaba resolviendo este problema también recientemente y descubrí estas 2 soluciones:

El primero que prefiero más: use este código en su tema template.phpy todos los grippies y textarea.js desaparecerán:

/**
 * Override of theme('textarea').
 * Deprecate misc/textarea.js in favor of using the 'resize' CSS3 property.
 */

function THEMENAME_textarea($variables) {
  $element = $variables ['element'];
  element_set_attributes($element, array('id', 'name', 'cols', 'rows'));
  _form_set_class($element, array('form-textarea'));

  $wrapper_attributes = array(
    'class' => array('form-textarea-wrapper'),
  );

  $output = '<div' . drupal_attributes($wrapper_attributes) . '>';
  $output .= '<textarea' . drupal_attributes($element ['#attributes']) . '>' . check_plain($element ['#value']) . '</textarea>';
  $output .= '</div>';
  return $output;
}

No olvides cambiar THEMENAME por el nombre de tu tema y eliminar todas las cachés.

La segunda forma es instalar el módulo Desactivar el área de texto redimensionable, pero trato de mantener el número de módulos en mis instalaciones lo más bajo posible.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.