Bagaimana saya bisa mencegah area teks dari resizable?


8

Area teks di Drupal 7 dapat diubah ukurannya secara default. Saya ingin mematikan ini, tetapi ketika saya memeriksa area teks dengan Firebug, saya tidak dapat menemukan CSS yang membuatnya resizable.

Bagaimana cara mencegah ukuran teks agar tidak diubah ukurannya?

Jawaban:


17

JS yang membuat area teks dapat diubah ukurannya, bukan CSS. Saya pikir cara paling sederhana untuk menonaktifkan perilaku ini untuk semua textareas adalah menerapkannya THEMENAME_textarea()di tema Anda dan menghapusnya di sana:

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

1
Hal yang sama dapat dilakukan dengan modul; dalam hal ini modul perlu mengimplementasikan implementasi hook_theme_registry_alter () . Untuk memperhatikan kode tidak dapat menelepon theme('textarea'), atau itu akan menyebabkan loop tak terbatas; perlu memanggil theme_textarea(), atau fungsi tema yang telah ditetapkan dari modul lain sebagai pengganti theme_textarea().
kiamlaluno

Terima kasih atas cuplikannya, tetapi saya tidak dapat membuatnya bekerja. Saya seharusnya bisa mengganti THEMENAME dengan nama folder tema saya dan menempatkan kode ke template.php, kan? Saya mencoba ini dengan Bartik juga, tetapi saya tidak bisa membuatnya bekerja. Saya membersihkan cache dua kali setelah memperbarui file.
Patrick Kenny

2
Hmm itu seharusnya berhasil, coba unset($element['#resizable']);bukan $element['#resizable'] = false;. Jika Anda melihat kode untuk theme_textarea()itu pasti bekerja
Clive

3
Saya menemukan bahwa $elementberisi array yang disebut element, jadi ini berhasil: $element['element']['#resizable'] = false;
Derek Ahmedzai

Jawaban yang diedit sesuai komentar Derek Ahmedzai.
jamix

4

Jika Anda hanya membutuhkan kompatibilitas CSS3, Anda dapat menggunakan CSS berikut:

textarea { resize: none; }

Atau jika Anda perlu menonaktifkan pengubahan ukuran pada textarea tertentu, tambahkan ID area teks itu:

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

1

Mengganti ini dalam tema adalah perubahan menit terakhir, yang modul tidak akan memiliki kesempatan untuk bereaksi.

Ini mudah dilakukan melalui modul dan #processpanggilan balik:

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

Ini memberi modul seperti Wysiwyg kesempatan untuk memperhatikan bahwa textarea seharusnya tidak memiliki grippie, sehingga dapat menghindari melampirkan perilaku itu ketika menonaktifkan editor.


1

Terapkan ini di TEMA Anda. Ini akan memaksa #resizableke FALSEdan mencegah rendering JS dan markup.

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

Jawaban yang diterima dekat tetapi fungsi theme_ * tidak boleh dipanggil secara langsung karena mereka dapat melewati fungsi proses / preproses secara tidak sengaja


1

Anda dapat menambahkan CSS inline khusus ke formulir Anda, untuk menyembunyikan grippies:

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

0

Modul baru bernama Disable Resizable Textarea dirilis sekarang.

Ini adalah modul sederhana yang menambah kemampuan untuk mengganti properti #resizable default bidang textarea. Secara default, semua textareas dapat diubah ukurannya. Modul ini memungkinkan Anda untuk menonaktifkan fitur ini di setiap bidang.

Sangat mudah diatur. Cukup edit bidang yang diinginkan dan Anda akan melihat opsi "Nonaktifkan properti #responable dari teks ini". Anda juga dapat menonaktifkan resizable dari ringkasannya, jika bidangnya bertipe "Teks panjang dengan ringkasan".


0

Anda bisa melakukan pergantian node atau komentar.

Lihat kode contoh dan komentar di bawah ini:

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

Untuk mozilla dan chrome, kita masih bisa melihat masalahnya. tempat css hack.

textarea {
 resize: none;
 }

-1

Saya baru - baru ini menyelesaikan masalah ini juga dan menemukan 2 solusi ini:

Yang pertama saya paling suka: Gunakan kode ini di tema Anda template.phpdan semua grippies dan textarea.js akan hilang:

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

Jangan lupa untuk mengubah THEMENAME ke nama tema Anda dan siram semua cache.

Cara kedua adalah menginstal modul Nonaktifkan textarea yang bisa diubah ukuran tetapi saya mencoba untuk menjaga jumlah modul di instalasi saya serendah mungkin.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.