Mengubah tag HTML yang Diizinkan: @ tag untuk kolom input teks bantuan


11

Saya ingin menampilkan tabel sederhana di bawah bidang formulir sebagai bagian dari teks bantuan untuk bidang itu (bidang file tepatnya). Apakah saya benar-benar mental atau benar-benar tidak ada cara mudah untuk mengubah tag html diizinkan untuk area teks ini? Saat ini saya telah menampilkan:

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

Jika tidak ada cara mudah, apa cara termudah berikutnya untuk melakukannya?

MEMPERBARUI:

Clive datang dengan cara hebat untuk melakukannya di bawah ini dengan modul khusus. Anda juga dapat menambahkan ini menggunakan ctools untuk membuat teks bantuan dilipat sebagai berikut:

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

Apakah Anda berbicara tentang bidang teks (judul pertanyaan) atau bidang file (deskripsi pertanyaan).
googletorp

@ 7wonders Apa yang Anda tambahkan ke pertanyaan akan lebih baik sebagai jawaban.
kiamlaluno

Jawaban:


7

Tidak ada cara mudah untuk melakukannya, daftar tag yang diizinkan dikodekan ke dalam _field_filter_xss_allowed_tags()fungsinya .

Ini pada gilirannya dipanggil oleh field_filter_xss(), bukan ketika data disimpan ke database melainkan ketika itu ditampilkan di field_default_form().

Untungnya ada cara tetapi akan membutuhkan modul khusus kecil untuk melakukannya. Pada dasarnya Anda ingin menerapkan kait perubahan bentuk untuk formulir widget bidang dan mengatur deskripsi elemen untuk digunakan filter_xss()dengan serangkaian tag yang lebih permisif.

Sesuatu di sepanjang garis ini:

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

Itu didasarkan pada premis bahwa Anda hanya ingin mengizinkan tag baru untuk elemen yang disebut field_test, jelas jika Anda ingin melakukan hal yang sama untuk bidang lain Anda harus mengubahnya agar sesuai dengan kondisi yang berbeda. Saya menyarankan menggunakan dpm()fungsi luar biasa yang termasuk dalam Devel moduleuntuk memeriksa objek di fungsi alter formulir Anda.

Saya baru saja menguji yang di atas dan berfungsi (saya sekarang memiliki tabel di mana deskripsi bidang file saya biasanya), rasanya agak seperti peretasan meskipun secara teknis berpegang pada aturan tetapi mudah-mudahan itu akan membawa Anda pada cara.


Itu bekerja dengan sempurna. Seseorang pasti harus membuat modul untuk melakukan ini dengan benar (bagaimana ini tidak bisa menjadi fitur inti yang saya tidak tahu!).
7wonders

@ 7wonders Ya, sepertinya kesempatan yang terlewatkan, tapi saya rasa dari sudut pandang pengembang, ini berarti modul lapangan mempertahankan format teksnya sendiri dan itu mungkin dianggap berlebihan. Opsi kustom untuk mengubahnya akan lebih baik. Saya mungkin mengubah ini menjadi modul yang lebih berguna dan mempostingnya di drupal.org sebenarnya, akan membuat Anda diposting :)
Clive

Kedengarannya ide yang bagus. Beri tahu saya ketika Anda memiliki bak pasir dan saya dengan senang hati akan mengujinya untuk Anda.
7wonders

2

Jika Anda menggunakan D6, Anda dapat menavigasi ke / admin / pengaturan / filter. Di sana Anda perlu mengklik opsi "configure" dari "HTML Filtered". Kemudian klik pada tab configure. Anda akan disajikan dengan kotak teks berlabel "Tag HTML yang Diizinkan". Masukkan tag html yang perlu Anda gunakan di sana.

Dalam hal D7 pergi ke admin / config / content / format / filtered_html. Di bawah Pengaturan Filter, klik pada tab "Limit tag HTML diizinkan". Masukkan tag HTML yang ingin Anda gunakan di kotak teks.


Saya menggunakan D7 dan percayalah, itu adalah hal pertama yang saya lakukan dan kaget ketika tidak bekerja! (ya saya telah membersihkan cache beberapa kali juga). Ini benar-benar membingungkan dan tampaknya menjadi kasus pada semua kolom teks bantuan untuk situs saya. Bahkan jika saya menambahkan filter html diizinkan ke teks biasa dan menambahkan tabel tr td itu tidak berfungsi. Sangat menyebalkan.
7wonders

Saya baru saja menambahkan instalasi baru d7 dan dapat mengkonfirmasi perilaku default-nya. Itu tidak akan memungkinkan untuk mengubah tag di bagian bantuan = kegilaan! Apa kait yang bisa mengesampingkan ini?
7wonders

1
Coba Tetapkan "Full html" sebagai format input default dan kemudian periksa.
aerozeppelin

Saya dapat mengonfirmasi bahwa saya dapat mengubah tag yang diizinkan untuk HTML yang Difilter dengan Drupal 7.10, dan filter tersebut berfungsi sebaik tampilan 'tag diizinkan'. Jadi, jawaban aerozeppelin benar. :-)
paul-m

1
Tetapi jika Anda membaca pertanyaan Paul, ini terkait dengan tag yang diizinkan dalam teks bantuan untuk bidang sehingga jawabannya tidak benar.
7wonders
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.