Thay đổi thẻ HTML được phép: @tags cho trường nhập văn bản trợ giúp


11

Tôi muốn hiển thị một bảng đơn giản dưới trường biểu mẫu như một phần của văn bản trợ giúp cho trường đó (chính xác là trường tệp). Tôi hoàn toàn bị tâm thần hay thực sự không có cách nào dễ dàng thay đổi các thẻ html được phép cho vùng văn bản này? Hiện tại tôi đã hiển thị:

Instructions to present to the user below this field on the editing form. Allowed HTML tags: a b big code del em i ins pre q small span strong sub sup tt ol ul li p br img

Nếu không có cách dễ dàng, cách dễ nhất tiếp theo để làm điều đó là gì?

CẬP NHẬT:

Clive đã đưa ra một cách tuyệt vời để làm điều đó dưới đây với một mô-đun tùy chỉnh. Bạn cũng có thể thêm vào điều này bằng cách sử dụng ctools để làm cho văn bản trợ giúp có thể thu gọn như sau:

// Implement hook_field_widget_form_alter()
function MYMODULE_field_widget_form_alter(&$element, &$form_state, &$context) {
  // If some condition is matched based on the element provided...
  if (isset($element[0]) && $element[0]['#field_name'] == 'field_test') {
    // Alter the description using your more permissive set of tags
    $reworked = filter_xss($context['instance']['description'], _MYMODULE_field_filter_xss_allowed_tags());
    $element[0]['#description'] = theme('ctools_collapsible', array('handle' => 'Help text', 'content' => $reworked, 'collapsed' => TRUE));
  }
}

// Provide a more permissive set of tags to be used with filter_xss()
function _MYMODULE_field_filter_xss_allowed_tags() {
  // Merge the new set of allowed tags with the less permissive defaults
  $new_tags = array('table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td');
  return array_merge(_field_filter_xss_allowed_tags(), $new_tags);
}

Bạn đang nói về một trường văn bản (tiêu đề của câu hỏi) hoặc trường tệp (mô tả câu hỏi).
googletorp

@ 7wonders Những gì bạn thêm vào câu hỏi sẽ tốt như câu trả lời.
kiamlaluno

Câu trả lời:


7

Thực sự không có cách nào dễ dàng để thực hiện điều đó, danh sách các thẻ được phép được mã hóa cứng vào _field_filter_xss_allowed_tags()chức năng .

Đến lượt nó được gọi bởi field_filter_xss(), không phải khi dữ liệu được lưu vào cơ sở dữ liệu mà là khi nó được hiển thị field_default_form().

May mắn thay, có một cách nhưng nó sẽ cần một mô-đun tùy chỉnh nhỏ để làm điều đó. Về cơ bản, bạn đang tìm cách triển khai móc thay đổi biểu mẫu cho biểu mẫu tiện ích của trường và đặt mô tả của phần tử để sử dụng filter_xss()với một bộ thẻ dễ cho phép hơn.

Một cái gì đó dọc theo những dòng này:

// Implement hook_field_widget_form_alter()
function MYMODULE_field_widget_form_alter(&$element, &$form_state, &$context) {
  // If some condition is matched based on the element provided...
  if (isset($element[0]) && $element[0]['#field_name'] == 'field_test') {
    // Alter the description using your more permissive set of tags
    $element[0]['#description'] = filter_xss($context['instance']['description'], _MYMODULE_field_filter_xss_allowed_tags());
  }
}

// Provide a more permissive set of tags to be used with filter_xss()
function _MYMODULE_field_filter_xss_allowed_tags() {
  // Merge the new set of allowed tags with the less permissive defaults
  $new_tags = array('table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td');
  return array_merge(_field_filter_xss_allowed_tags(), $new_tags);
}

Điều đó dựa trên tiền đề rằng bạn chỉ muốn cho phép các thẻ mới cho một phần tử được gọi field_test, rõ ràng nếu bạn muốn làm tương tự cho các trường khác, bạn sẽ cần thay đổi nó để phù hợp với một điều kiện khác. Tôi khuyên bạn nên sử dụng dpm()chức năng tuyệt vời có trong Devel moduleđối tượng để kiểm tra đối tượng trong chức năng thay đổi biểu mẫu của bạn.

Tôi vừa mới thử nghiệm ở trên và nó hoạt động (bây giờ tôi có một bảng trong đó mô tả trường tệp của tôi sẽ bình thường), nó có cảm giác hơi giống một vụ hack mặc dù về mặt kỹ thuật nó tuân thủ các quy tắc nhưng hy vọng nó sẽ giúp bạn hiểu đường.


Nó hoạt động hoàn hảo. Ai đó chắc chắn nên tạo một mô-đun để thực hiện việc này một cách chính xác (làm thế nào đây không thể là một tính năng cốt lõi mà tôi không biết!).
7wonders

@ 7wonders Vâng, chắc chắn có vẻ như là một cơ hội bị bỏ lỡ nhưng tôi đoán từ quan điểm của các nhà phát triển, điều này thực sự có nghĩa là mô-đun trường duy trì định dạng văn bản của riêng mình và điều đó có thể được coi là quá mức cần thiết. Một tùy chọn tùy chỉnh để thay đổi nó sẽ là tốt mặc dù. Tôi có thể biến nó thành một mô-đun hữu ích hơn và thực sự đăng nó trên drupal.org, sẽ giữ cho bạn được đăng :)
Clive

Nghe có vẻ như một ý tưởng tốt. Hãy cho tôi biết khi bạn nhận được một hộp cát và tôi sẽ vui vẻ kiểm tra nó cho bạn.
7wonders

2

Trong trường hợp bạn đang sử dụng D6, bạn có thể điều hướng đến / admin / settings / filter. Ở đó bạn cần nhấp vào tùy chọn "cấu hình" của "HTML đã lọc". Sau đó bấm vào tab cấu hình. bạn sẽ được trình bày với một hộp văn bản có nhãn "Thẻ HTML được phép". Nhập các thẻ html mà bạn cần sử dụng ở đó.

Trong trường hợp D7, hãy truy cập admin / config / content / format / filtered_html. Trong Cài đặt bộ lọc, nhấp vào tab "Giới hạn thẻ HTML được phép". Nhập các thẻ HTML bạn muốn sử dụng trong hộp văn bản.


Tôi đang sử dụng D7 và tin tưởng tôi, đó là điều đầu tiên tôi làm và bị sốc khi nó không hoạt động! (vâng, tôi đã xóa bộ nhớ cache nhiều lần). Nó thực sự gây trở ngại và dường như là trường hợp trên tất cả các trường văn bản trợ giúp cho trang web của tôi. Ngay cả khi tôi thêm bộ lọc html được phép vào văn bản thuần túy và thêm bảng tr td thì nó không hoạt động. Rất phiền toái.
7wonders

Tôi vừa thêm một cài đặt mới d7 và có thể xác nhận hành vi mặc định của nó. Nó sẽ không cho phép thay đổi thẻ trong phần trợ giúp = sự điên rồ! Cái gì móc có thể ghi đè lên điều này?
7wonders

1
Hãy thử Đặt "Full html" làm định dạng nhập mặc định và sau đó kiểm tra.
aerozeppelin

Tôi có thể xác nhận rằng tôi có thể thay đổi các thẻ được phép cho HTML đã lọc bằng Drupal 7.10 và bộ lọc hoạt động tốt như hiển thị 'thẻ được phép'. Vì vậy, câu trả lời thực sự của aerozeppinin là chính xác. :-)
paul-m

1
Nhưng nếu bạn đọc câu hỏi Paul thì nó liên quan đến các thẻ được phép trong văn bản trợ giúp cho một trường để câu trả lời không chính xác.
7wonders
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.