เปลี่ยนแท็ก HTML ที่อนุญาต: @tags สำหรับวิธีใช้ฟิลด์ป้อนข้อความ


11

ฉันต้องการแสดงตารางอย่างง่ายภายใต้เขตข้อมูลฟอร์มเป็นส่วนหนึ่งของข้อความช่วยเหลือสำหรับเขตข้อมูลนั้น (เขตข้อมูลแฟ้มให้แน่นอน) ฉันเป็นคนจิตใจโดยสิ้นเชิงหรือไม่มีวิธีง่ายๆในการเปลี่ยนแท็ก html ที่อนุญาตสำหรับพื้นที่ข้อความนี้หรือไม่? ในขณะที่ฉันได้แสดง:

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

ถ้าไม่มีวิธีง่ายๆวิธีที่ง่ายที่สุดในการทำคืออะไร?

UPDATE:

ไคลฟ์คิดวิธีที่ยอดเยี่ยมในการทำโมดูลด้านล่างนี้ คุณสามารถเพิ่มลงในสิ่งนี้ได้โดยใช้ ctools เพื่อทำให้ข้อความช่วยเหลือสามารถยุบได้ดังนี้:

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

คุณกำลังพูดถึงฟิลด์ข้อความ (ชื่อคำถาม) หรือฟิลด์ไฟล์ (คำอธิบายคำถาม)
googletorp

@ 7 สิ่งมหัศจรรย์สิ่งที่คุณเพิ่มลงในคำถามจะดีเหมือนคำตอบ
kiamlaluno

คำตอบ:


7

ไม่มีวิธีที่ง่ายที่จะทำมันจริงๆรายการของแท็กได้รับอนุญาตให้เป็นรหัสที่ยากเข้าไปในฟังก์ชั่น_field_filter_xss_allowed_tags()

สิ่งนี้ถูกเรียกใช้โดยfield_filter_xss()ไม่ใช่เมื่อข้อมูลถูกบันทึกลงในฐานข้อมูล แต่จะแสดงเมื่อมีการแสดงfield_default_form()ข้อมูล

โชคดีที่มีวิธี แต่มันจะใช้โมดูลที่กำหนดเองขนาดเล็กเพื่อทำมัน โดยทั่วไปคุณกำลังมองหาที่จะใช้ form change hook สำหรับฟอร์มวิดเจ็ตของฟิลด์และตั้งค่าคำอธิบายองค์ประกอบให้ใช้filter_xss()กับชุดแท็กที่อนุญาตมากขึ้น

บางสิ่งบางอย่างตามสายเหล่านี้:

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

ขึ้นอยู่กับสถานที่ตั้งที่คุณต้องการอนุญาตให้แท็กใหม่สำหรับองค์ประกอบที่เรียกว่าfield_testชัดเจนหากคุณต้องการทำเช่นเดียวกันสำหรับสาขาอื่น ๆ คุณจะต้องเปลี่ยนให้ตรงกับเงื่อนไขที่แตกต่างกัน ผมแนะนำให้ใช้dpm()ฟังก์ชั่นที่ยอดเยี่ยมที่รวมอยู่ในการDevel moduleตรวจสอบวัตถุในฟังก์ชั่นการเปลี่ยนแปลงแบบฟอร์มของคุณ

ฉันเพิ่งทดสอบข้างต้นและใช้งานได้ (ตอนนี้ฉันมีตารางที่คำอธิบายฟิลด์ไฟล์ของฉันจะเป็นปกติ) มันให้ความรู้สึกเหมือนแฮ็คถึงแม้ว่าเทคนิคจะยึดติดกับกฎ แต่หวังว่ามันจะช่วยคุณได้ ทาง


มันทำงานได้อย่างสมบูรณ์แบบ บางคนควรสร้างโมดูลเพื่อทำสิ่งนี้อย่างถูกต้อง (วิธีนี้เป็นคุณสมบัติหลักที่ฉันไม่รู้!)
7 สิ่งมหัศจรรย์

@ 7wonders ใช่ดูเหมือนว่าโอกาสที่จะพลาด แต่ฉันเดาจากมุมมองของนักพัฒนานี่น่าจะหมายถึงโมดูลฟิลด์ยังคงรักษารูปแบบข้อความของตัวเองและอาจถือว่าเกินความเป็นจริง ตัวเลือกที่กำหนดเองเพื่อเปลี่ยนมันน่าจะดีกว่า ฉันอาจทำให้สิ่งนี้กลายเป็นโมดูลที่มีประโยชน์มากขึ้นและโพสต์ลงบน drupal.org จริง ๆ แล้วจะทำให้คุณโพสต์ :)
Clive

ฟังดูเหมือนความคิดที่ดี แจ้งให้เราทราบเมื่อคุณมีกล่องทรายขึ้นมาและฉันจะทดสอบให้คุณอย่างมีความสุข
7 สิ่งมหัศจรรย์

2

ในกรณีที่คุณใช้ D6 คุณสามารถไปที่ / admin / settings / filter คุณต้องคลิกตัวเลือก "กำหนดค่า" ของ "กรอง HTML" จากนั้นคลิกที่แท็บกำหนดค่า คุณจะเห็นกล่องข้อความชื่อ "อนุญาตแท็ก HTML" ป้อนแท็ก html ที่คุณต้องใช้

ในกรณีของ D7 ให้ไปที่ admin / config / content / format / filtered_html ภายใต้การตั้งค่าตัวกรองให้คลิกแท็บ "จำกัด แท็ก HTML ที่อนุญาต" ป้อนแท็ก HTML ที่คุณต้องการใช้ในกล่องข้อความ


ฉันใช้ D7 และเชื่อใจฉันนั่นเป็นสิ่งแรกที่ฉันทำและตกใจเมื่อมันไม่ทำงาน! (ใช่ฉันล้างแคชหลายครั้งด้วย) มันทำให้งงงันจริงๆและดูเหมือนว่าจะเป็นกรณีที่ทุกช่องข้อความช่วยเหลือสำหรับเว็บไซต์ของฉัน แม้ว่าฉันจะเพิ่มตัวกรอง html ที่อนุญาตให้กับข้อความธรรมดาและเพิ่มตาราง tr td แต่มันไม่ทำงาน น่ารำคาญมาก
7 สิ่งมหัศจรรย์

ฉันเพิ่งเพิ่มการติดตั้งใหม่ d7 และสามารถยืนยันพฤติกรรมเริ่มต้นได้ ไม่อนุญาตให้เปลี่ยนแท็กในส่วนช่วยเหลือ = ความบ้าคลั่ง! มีตะขออะไรที่สามารถลบล้างสิ่งนี้ได้?
7 สิ่งมหัศจรรย์

1
ลองตั้งค่า "Full html" เป็นรูปแบบอินพุตเริ่มต้นจากนั้นตรวจสอบ
aerozeppelin

ฉันสามารถยืนยันได้ว่าฉันสามารถเปลี่ยนแท็กที่อนุญาตสำหรับ HTML ที่กรองแล้วด้วย Drupal 7.10 และตัวกรองนั้นทำงานได้ดีเท่ากับหน้าจอ 'แท็กที่อนุญาต' ดังนั้นคำตอบของ aerozeppelin จริงๆนั้นถูกต้อง :-)
paul-m

1
แต่ถ้าคุณอ่านคำถาม Paul มันเป็นเรื่องเกี่ยวกับแท็กที่อนุญาตในข้อความช่วยเหลือของฟิลด์ดังนั้นคำตอบนั้นไม่ถูกต้อง
7 สิ่งมหัศจรรย์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.