Wie kann ich verhindern, dass die Größe von Textbereichen geändert wird?

8

Textbereiche in Drupal 7 können standardmäßig in der Größe geändert werden. Ich möchte dies deaktivieren, aber als ich einen Textbereich mit Firebug überprüft habe, konnte ich das CSS nicht finden, mit dem die Größe geändert werden konnte.

Wie kann ich verhindern, dass die Größe von Textbereichen geändert wird?

Patrick Kenny
quelle

Antworten:

17

Es ist JS, das die Größe der Textbereiche ändert, nicht CSS. Ich denke, der einfachste Weg, dieses Verhalten für alle Textbereiche zu deaktivieren, besteht darin, es THEMENAME_textarea()in Ihr Thema zu implementieren und dort zu entfernen:

function THEMENAME_textarea($element) {
  $element['element']['#resizable'] = false ;
  return theme_textarea($element) ;
}
Clive
quelle
1
Das gleiche kann mit einem Modul gemacht werden; In diesem Fall muss das Modul die Implementierung von hook_theme_registry_alter () implementieren. Wenn Sie feststellen, dass der Code nicht aufgerufen werden kann theme('textarea'), führt dies zu einer Endlosschleife. Es muss aufgerufen theme_textarea()werden oder die Themenfunktion, die von einem anderen Modul als Ersatz für festgelegt wurde theme_textarea().
Kiamlaluno
Vielen Dank für das Snippet, aber ich konnte es nicht zum Laufen bringen. Ich sollte nur in der Lage sein, THEMENAME durch den Namen meines Themenordners zu ersetzen und den Code in template.php zu platzieren, oder? Ich habe es auch mit Bartik versucht, aber ich konnte es nicht zum Laufen bringen. Ich habe den Cache nach dem Aktualisieren der Datei zweimal geleert.
Patrick Kenny
2
Hmm es sollte funktionieren, versuche es unset($element['#resizable']);stattdessen $element['#resizable'] = false;. Wenn Sie sich den Code ansehen theme_textarea(), sollte das auf jeden Fall funktionieren
Clive
3
Ich fand, dass $elementein Array namens heißt element, so funktionierte dies: $element['element']['#resizable'] = false;
Derek Ahmedzai
Die Antwort wurde gemäß dem Kommentar von Derek Ahmedzai bearbeitet.
Jamix
4

Wenn Sie nur CSS3-Kompatibilität benötigen, können Sie das folgende CSS verwenden:

textarea { resize: none; }

Wenn Sie die Größenänderung für einen bestimmten Textbereich deaktivieren müssen, fügen Sie die ID dieses Textbereichs hinzu:

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

Das Überschreiben des Themas ist eine kurzfristige Änderung, auf die die Module nicht reagieren können.

Es ist genauso einfach, dies über ein Modul und einen #processRückruf zu tun :

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

Dies gibt Modulen wie Wysiwyg die Möglichkeit zu bemerken, dass ein Textbereich kein Grippie haben sollte, sodass dieses Verhalten beim Deaktivieren eines Editors vermieden werden kann.

TwoD
quelle
1

Implementieren Sie dies in Ihrem THEMA. Es zwingt die #resizablezu FALSEund die JS zu verhindern und Markup von Rendering.

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

Die akzeptierte Antwort ist nah, aber theme_ * -Funktionen sollten nicht direkt aufgerufen werden, da sie möglicherweise unbeabsichtigt Prozess- / Vorverarbeitungsfunktionen umgehen

joelpittet
quelle
1

Sie können Ihrem Formular benutzerdefiniertes Inline-CSS hinzufügen, um die Probleme auszublenden:

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

Ein neues Modul namens Disable Resizable Textarea wurde jetzt veröffentlicht.

Dies ist ein einfaches Modul, mit dem die Standardeigenschaft #resizable von Textfeldfeldern überschrieben werden kann. Standardmäßig können alle Textbereiche in der Größe geändert werden. Mit diesem Modul können Sie diese Funktion für jedes Feld deaktivieren.

Es ist sehr einfach einzurichten. Bearbeiten Sie einfach das gewünschte Feld und Sie sehen die Option "#resizable-Eigenschaft dieses Textbereichs deaktivieren". Sie können die Größenänderung auch in der Zusammenfassung deaktivieren, wenn das Feld vom Typ "Langtext mit Zusammenfassung" ist.

Thiago Régis
quelle
0

Sie können eine Änderung des Knotens oder des Kommentars vornehmen.

Schauen Sie sich den folgenden Beispielcode und die folgenden Kommentare an:

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

Für Mozilla und Chrom können wir das Problem immer noch sehen. Platzieren Sie CSS-Hack.

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

Ich habe kürzlich auch dieses Problem gelöst und diese 2 Lösungen herausgefunden:

Das erste, das ich am meisten bevorzuge: Verwenden Sie diesen Code in Ihrem Thema template.phpund alle Grippies und Textarea.js verschwinden:

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

Vergessen Sie nicht, THEMENAME in Ihren Themennamen zu ändern und alle Caches zu leeren.

Die zweite Möglichkeit besteht darin, das Modul zu installieren. Deaktivieren Sie die Größe des Textbereichs, aber ich versuche, die Anzahl der Module in meinen Installationen so gering wie möglich zu halten.

Jasom Dotnet
quelle