Comment empêcher le redimensionnement des zones de texte?

8

Les zones de texte dans Drupal 7 sont redimensionnables par défaut. Je voudrais désactiver cela, mais quand j'ai vérifié une zone de texte avec Firebug, je n'ai pas pu trouver le CSS qui le rendait redimensionnable.

Comment empêcher le redimensionnement des zones de texte?

Patrick Kenny
la source

Réponses:

17

C'est JS qui rend les zones de texte redimensionnables, pas CSS. Je pense que le moyen le plus simple de désactiver ce comportement pour toutes les zones de texte est de l'implémenter THEMENAME_textarea()dans votre thème et de le supprimer là:

function THEMENAME_textarea($element) {
  $element['element']['#resizable'] = false ;
  return theme_textarea($element) ;
}
Clive
la source
1
La même chose peut être faite avec un module; dans ce cas, le module doit implémenter l'implémentation hook_theme_registry_alter () . Pour remarquer que le code ne peut pas appeler theme('textarea'), ou cela provoquerait une boucle infinie; il doit appeler theme_textarea(), ou la fonction de thème qui a été définie à partir d'un autre module en remplacement de theme_textarea().
kiamlaluno
Merci pour l'extrait, mais je n'ai pas pu le faire fonctionner. Je devrais juste être en mesure de remplacer THEMENAME par le nom de mon dossier de thème et de placer le code dans template.php, non? J'ai également essayé avec Bartik mais je n'ai pas réussi à le faire fonctionner. J'ai vidé le cache deux fois après la mise à jour du fichier.
Patrick Kenny
2
Hmm ça devrait marcher, essayez unset($element['#resizable']);plutôt $element['#resizable'] = false;. Si vous regardez le code, theme_textarea()cela devrait fonctionner
Clive
3
J'ai trouvé qu'il $elementcontient un tableau appelé element, donc cela a fonctionné: $element['element']['#resizable'] = false;
Derek Ahmedzai
Réponse modifiée selon le commentaire de Derek Ahmedzai.
jamix
4

Si vous n'avez besoin que de la compatibilité CSS3, vous pouvez utiliser le CSS suivant:

textarea { resize: none; }

Ou si vous devez désactiver le redimensionnement sur une zone de texte spécifique, ajoutez l'ID de cette zone de texte:

.edit-body-und-0-value { resize:none }
Druvision
la source
1

Remplacer cela dans le thème est un changement de dernière minute, sur lequel les modules n'auront pas la possibilité de réagir.

C'est tout aussi simple de le faire via un module et un #processrappel:

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

Cela donne aux modules comme Wysiwyg une chance de remarquer qu'une zone de texte ne doit pas avoir de grippie, donc elle peut éviter d'attacher ce comportement lors de la désactivation d'un éditeur.

TwoD
la source
1

Implémentez ceci dans votre THÈME. Cela forcera le #resizableto FALSEet empêchera le rendu JS et le balisage.

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

La réponse acceptée est proche mais les fonctions theme_ * ne doivent pas être appelées directement car elles peuvent contourner involontairement les fonctions de processus / prétraitement

joelpittet
la source
1

Vous pouvez ajouter du CSS en ligne personnalisé à votre formulaire, pour masquer les grippies:

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

Un nouveau module appelé Disable Resizable Textarea a été publié maintenant.

Il s'agit d'un module simple qui ajoute la possibilité de remplacer la propriété #resizable par défaut des champs de zone de texte. Par défaut, toutes les zones de texte sont redimensionnables. Ce module vous permet de désactiver cette fonctionnalité sur chaque champ.

C'est très simple à installer. Modifiez simplement le champ souhaité et vous verrez une option "Désactiver la propriété #resizable de cette zone de texte". Vous pouvez également désactiver le redimensionnable à partir de son résumé, si le champ est de type "Texte long avec résumé".

Thiago Régis
la source
0

Vous pouvez modifier le nœud ou le commentaire.

Consultez l'exemple de code et les commentaires ci-dessous:

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

Pour mozilla et chrome, nous pouvons toujours voir le problème. placer le hack css.

textarea {
 resize: none;
 }
Bhanu Prakash Ryaga
la source
-1

J'ai récemment résolu ce problème aussi et j'ai découvert ces 2 solutions:

Premier que je préfère le plus: utilisez ce code dans votre thème template.phpet tous les grippies et textarea.js disparaîtront:

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

N'oubliez pas de remplacer THEMENAME par le nom de votre thème et de vider tous les caches.

La deuxième façon consiste à installer le module Désactiver la zone de texte redimensionnable mais j'essaie de maintenir le nombre de modules dans mes installations aussi bas que possible.

Jasom Dotnet
la source