Làm thế nào tôi có thể ngăn các khu vực văn bản có thể thay đổi kích thước?


8

Các vùng văn bản trong Drupal 7 có thể thay đổi kích thước theo mặc định. Tôi muốn tắt cái này đi, nhưng khi tôi kiểm tra một vùng văn bản bằng Fireorms, tôi không thể tìm thấy CSS làm cho nó có thể thay đổi kích thước.

Làm thế nào tôi có thể ngăn chặn các khu vực văn bản bị thay đổi kích thước?

Câu trả lời:


17

Đó là JS làm cho các vùng văn bản có thể thay đổi kích thước, không phải CSS. Tôi nghĩ rằng cách đơn giản nhất để vô hiệu hóa hành vi này cho tất cả các văn bản là thực hiện THEMENAME_textarea()trong chủ đề của bạn và xóa nó ở đó:

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

1
Điều tương tự có thể được thực hiện với một mô-đun; trong trường hợp đó, mô-đun cần triển khai thực hiện hook_theme_registry_alter () . Để thông báo mã không thể gọi theme('textarea'), hoặc nó sẽ gây ra một vòng lặp vô hạn; nó cần gọi theme_textarea()hoặc chức năng chủ đề đã được đặt từ một mô-đun khác để thay thế theme_textarea().
kiamlaluno

Cảm ơn vì đoạn trích, nhưng tôi không thể làm cho nó hoạt động được. Tôi chỉ có thể thay thế THEMENAME bằng tên thư mục chủ đề của mình và đặt mã vào template.php, phải không? Tôi cũng đã thử điều này với Bartik nhưng tôi không thể làm cho nó hoạt động được. Tôi đã xóa bộ nhớ cache hai lần sau khi cập nhật tập tin.
Patrick Kenny

2
Hmm nó nên hoạt động, thử unset($element['#resizable']);thay vì $element['#resizable'] = false;. Nếu bạn nhìn vào mã cho theme_textarea()điều đó chắc chắn sẽ hoạt động
Clive

3
Tôi thấy rằng $elementcó chứa một mảng được gọi element, vì vậy điều này đã hoạt động: $element['element']['#resizable'] = false;
Derek Ahmedzai

Chỉnh sửa câu trả lời theo nhận xét của Derek Ahmedzai.
jamix

4

Nếu bạn chỉ cần tương thích CSS3, bạn có thể sử dụng CSS sau:

textarea { resize: none; }

Hoặc nếu bạn cần tắt thay đổi kích thước trên một vùng văn bản cụ thể, hãy thêm ID của vùng văn bản đó:

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

1

Ghi đè điều này trong chủ đề là một thay đổi vào phút cuối, mà các mô-đun sẽ không có cơ hội phản ứng.

Thật dễ dàng để làm điều này thông qua một mô-đun và #processgọi lại:

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

Điều này mang lại cho các mô-đun như Wysiwyg một cơ hội để nhận thấy rằng một textarea không nên có một chuôi, vì vậy nó có thể tránh được việc đính kèm hành vi đó khi vô hiệu hóa trình soạn thảo.


1

Thực hiện điều này trong THEME của bạn. Nó sẽ buộc #resizablephải FALSEvà ngăn chặn sự JS và đánh dấu từ rendering.

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

Câu trả lời được chấp nhận là gần nhưng các hàm theme_ * không nên được gọi trực tiếp vì chúng có thể vô tình bỏ qua các hàm xử lý / tiền xử lý


1

Bạn có thể thêm CSS nội tuyến tùy chỉnh vào biểu mẫu của mình, để ẩn các chuôi:

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

0

Một mô-đun mới có tên là Vô hiệu hóa kích thước văn bản đã được phát hành ngay bây giờ.

Đây là một mô-đun đơn giản có thêm khả năng ghi đè thuộc tính #resizable mặc định của các trường văn bản. Theo mặc định, tất cả các textareas có thể thay đổi kích thước. Mô-đun này cho phép bạn tắt tính năng này trên từng lĩnh vực.

Nó rất dễ dàng để thiết lập. Chỉ cần chỉnh sửa trường mong muốn và bạn sẽ thấy tùy chọn "Vô hiệu hóa #resizable của textarea" này. Bạn cũng có thể vô hiệu hóa thay đổi kích thước từ tóm tắt của nó, nếu trường thuộc loại "Văn bản dài có tóm tắt".


0

Bạn có thể thay đổi hình thức của nút hoặc bình luận.

Kiểm tra mã mẫu và ý kiến ​​dưới đây:

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

Đối với mozilla và chrome, chúng ta vẫn có thể thấy vấn đề. đặt css hack.

textarea {
 resize: none;
 }

-1

Gần đây tôi cũng đã giải quyết vấn đề này và tìm ra 2 giải pháp sau:

Điều đầu tiên tôi thích nhất: Sử dụng mã này trong chủ đề của bạn template.phpvà tất cả các chuôi và textarea.js sẽ biến mất:

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

Đừng quên thay đổi THEMENAME thành tên chủ đề của bạn và xóa tất cả bộ nhớ cache.

Cách thứ hai là cài đặt mô-đun Tắt textarea có thể thay đổi kích thước nhưng tôi cố gắng giữ số lượng mô-đun trong cài đặt của mình càng thấp càng tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.