Come posso impedire il ridimensionamento delle aree di testo?


8

Le aree di testo in Drupal 7 sono ridimensionabili per impostazione predefinita. Vorrei disattivarlo, ma quando ho controllato un'area di testo con Firebug, non sono riuscito a trovare il CSS che lo rendeva ridimensionabile.

Come posso impedire il ridimensionamento delle aree di testo?

Risposte:


17

È JS che rende le aree di testo ridimensionabili, non CSS. Penso che il modo più semplice per disabilitare questo comportamento per tutte le textareas sia implementare THEMENAME_textarea()nel tuo tema e rimuoverlo lì:

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

1
Lo stesso può essere fatto con un modulo; in tal caso il modulo deve implementare l'implementazione hook_theme_registry_alter () . Notare che il codice non può chiamare theme('textarea')o causerebbe un ciclo infinito; deve chiamare theme_textarea(), o la funzione tema impostata da un altro modulo in sostituzione di theme_textarea().
kiamlaluno

Grazie per lo snippet, ma non sono riuscito a farlo funzionare. Dovrei solo essere in grado di sostituire THEMENAME con il nome della mia cartella del tema e inserire il codice in template.php, giusto? L'ho provato anche con Bartik ma non sono riuscito a farlo funzionare. Ho svuotato la cache due volte dopo aver aggiornato il file.
Patrick Kenny,

2
Hmm dovrebbe funzionare, prova unset($element['#resizable']);invece di $element['#resizable'] = false;. Se guardi il codice per theme_textarea()quello dovrebbe sicuramente funzionare
Clive

3
Ho scoperto che $elementcontiene un array chiamato element, quindi ha funzionato: $element['element']['#resizable'] = false;
Derek Ahmedzai,

Risposta modificata secondo il commento di Derek Ahmedzai.
Jamix,

4

Se hai solo bisogno della compatibilità CSS3, puoi utilizzare il seguente CSS:

textarea { resize: none; }

Oppure, se devi disabilitare il ridimensionamento su un'area di testo specifica, aggiungi l'ID di quell'area di testo:

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

1

Sostituire questo nel tema è una modifica dell'ultimo minuto, su cui i moduli non avranno la possibilità di reagire.

È altrettanto facile farlo tramite un modulo e un #processcallback:

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

Questo dà a moduli come Wysiwyg la possibilità di notare che un'area di testo non dovrebbe avere un grippie, quindi può evitare di associare quel comportamento quando si disabilita un editor.


1

Implementalo nel TEMA. Forzerà il #resizableto FALSEe impedirà il rendering di JS e markup.

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

La risposta accettata è vicina ma le funzioni theme_ * non devono essere chiamate direttamente poiché potrebbero bypassare involontariamente le funzioni di processo / preelaborazione


1

Puoi aggiungere CSS inline personalizzati al tuo modulo, per nascondere i grippies:

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

0

Ora è stato rilasciato un nuovo modulo chiamato Disable Resizable Textarea .

Questo è un semplice modulo che aggiunge la possibilità di sovrascrivere la proprietà #resizable predefinita dei campi textarea. Per impostazione predefinita, tutte le aree di testo sono ridimensionabili. Questo modulo consente di disabilitare questa funzione su ciascun campo.

È molto facile da configurare. Basta modificare il campo desiderato e vedrai l'opzione "Disabilita proprietà #resizable di questa area di testo". Puoi anche disabilitare il ridimensionamento dal relativo riepilogo, se il campo è di tipo "Testo lungo con riepilogo".


0

Puoi fare la modifica del nodo o del commento.

Controlla il codice di esempio e i commenti qui sotto:

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

Per Mozilla e Chrome, possiamo ancora vedere il problema. posizionare css hack.

textarea {
 resize: none;
 }

-1

Recentemente ho risolto anche questo problema e ho scoperto queste 2 soluzioni:

Il primo che preferisco di più: usa questo codice nel tuo tema template.phpe tutti i grippies e textarea.js scompaiono:

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

Non dimenticare di cambiare THEMENAME con il nome del tuo tema e svuotare tutte le cache.

Il secondo modo è installare il modulo Disabilita textarea ridimensionabile ma provo a mantenere il numero di moduli nelle mie installazioni il più basso possibile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.