จะซ่อนตัวเลือกรูปแบบการป้อนข้อมูลและช่วยข้อความใต้ textarea ได้อย่างไร


32

จะซ่อนตัวเลือกรูปแบบอินพุตและช่วยเหลือข้อความใต้ textarea เมื่อเพิ่ม | แก้ไขโหนดได้อย่างไร

สกรีนช็อต - ส่วนที่จะซ่อนถูกเลือกด้วยสี่เหลี่ยมสีแดง


ผมคิดว่าคุณสามารถทำมันได้ถ้าคุณเข้าถึงรูปแบบผ่านhook_form_alterแต่ผมไม่แน่ใจว่าเกี่ยวกับรายละเอียดดังนั้นฉันจะไม่โพสต์นี้เป็นคำตอบ ...
ACM

คำตอบ:


26

สำหรับ Drupal 7 คุณสามารถใช้โมดูลSimplify อนุญาตให้คุณซ่อนตัวเลือกรูปแบบข้อความ textarea รวมถึงองค์ประกอบอื่น ๆ ในรูปแบบโหนด


3
หากคุณดูที่แหล่งที่มา ( cgit.drupalcode.org/simplify/tree/simplify.module?id=7681b0e ) โมดูลจะใช้ jQuery เพื่อซ่อนตัวเลือกรูปแบบข้อความ มันเป็นความอัปยศเพราะ 1: คุณเพียงต้องการซ่อนรูปแบบข้อความและไม่ต้องการโมดูลทั้งหมดและ 2: จาวาสคริปต์กลายเป็นข้อกำหนด ทำไมไม่ซ่อนด้วย CSS เหมือนคำตอบของ Ionut Adrian Luchian มันเหมาะสมและสะอาดอย่างแน่นอน
B2F

ลดความซับซ้อนไม่ได้ทำงานอย่างต่อเนื่องสำหรับฉัน ในบางกรณีมันไม่ทำงานในคนอื่น
snowguy

ไม่ได้ผลสำหรับฉัน ฉันใช้ชุดรูปแบบ bootstrap ดังนั้นอาจจะเป็นเพราะ
sobi3ch

การลดความซับซ้อนก็ไม่ได้ผลสำหรับฉันเช่นกัน
АртемИльин

25

คุณสามารถใช้ hook_form_alter ในโมดูลที่กำหนดเองเพื่อทำสิ่งนี้

ตัวอย่างเช่นใน drupal 7:

// hook_form_alter function
function CUSTOM_MODULE_form_alter(&$form, &$form_state, $form_id) {
    // We want this on a specific node type
    if ($form_id == 'NODE_TYPE_node_form') {
        $form['#after_build'][] = 'CUSTOM_MODULE_NODE_TYPE_node_form_after_build';
    }
}

// afterbuild function
function CUSTOM_MODULE_NODE_TYPE_node_form_after_build($form) {
    // We want this on a specific field
    $form['YOUR_FIELD']['und']['0']['format']['#access'] = FALSE;
    return $form;
}

2
ใช้งานได้ แต่มีผลข้างเคียง: ลบตัวแก้ไข wysiwyg ออกจากพื้นที่ข้อความ
castaway

นั่นเป็นเคล็ดลับสำหรับฉัน ฉันต้องการล้างอินพุตข้อความเป็นส่วนใหญ่
RevNoah

1
มันจะดีกว่าที่จะพูดถึง LANGUAGE_NONE แทน 'und' และฟังก์ชั่น after_build ควรมีการตรวจสอบตามบทบาทในกรณีที่บทบาทที่เหนือกว่าอื่น ๆ อาจดูกล่องรูปแบบข้อความ
Aneek Mukhopadhyay

12

ใน drupal 6 มีโมดูลรูปแบบที่ดีกว่าซึ่งทำสิ่งที่คุณต้องการอย่างแน่นอนมีรุ่น 7 dev แต่มันมาพร้อมกับคำเตือนว่าภายใต้การพัฒนาที่หนักหน่วง หากไซต์ของคุณยังอยู่ในระหว่างการพัฒนาอาจมีค่าสำหรับการลองใช้


ดูเหมือนว่าจะทำงานได้ดีสำหรับผู้ใช้ที่ไม่ได้เป็นผู้ดูแลแม้ว่าคุณจะลบการอนุญาตสำหรับกลุ่มผู้ดูแลระบบผู้ใช้ 1 จะยังคงเห็นตัวเลือกใน D7
joelpittet

รูปแบบที่ดีกว่าทำงานได้ดีสำหรับ D7 เสถียรโดยไม่มีปัญหาร้ายแรงและมีการออกรุ่นเบต้า 2 ในเดือนมกราคม 2559
Duncanmoo

9

คุณสามารถฆ่าไอเท็มฟอร์มการจัดรูปแบบได้จริง

function MY_THEME_form_comment_form_alter(&$form, &$form_state, &$form_id) {
  $form['comment_body']['#after_build'][] = 'MY_THEME_configure_comment_form';
}

function MY_THEME_configure_comment_form(&$form) {
  unset($form[LANGUAGE_NONE][0]['format']);
  return $form;
}

+1 ทางออกที่ดีที่สุด สำหรับผู้เยี่ยมชมในอนาคตให้แทนที่ CUSTOM ด้วยชื่อธีมที่ใช้งานอยู่ของคุณ ข้อมูลโค้ดนี้ควรอยู่ในสคริปต์ template.php ของคุณในโฟลเดอร์ของธีมที่ใช้งานอยู่ และหากไซต์ของคุณเปิดใช้งานหลายภาษาให้แทนที่ LANGUAGE_NONE ด้วยรหัสภาษาของคุณ
Janaka R Rajapaksha

2
CUSTOMมีวัตถุประสงค์เป็นชื่อธีมที่กำหนดเองของคุณ คุณไม่ควรใช้รหัสภาษาอย่างหนักหากคุณต้องการใช้ภาษาที่ใช้งานglobal $language;เพื่อจับมัน
doublejosh

หมายเหตุ: LANGUAGE_NONEเป็นค่าคงที่มีค่าund... undไม่ได้ใช้
doublejosh

สิ่งนี้จะฆ่า wysiwyg ด้วยเช่นกัน
คิดหลัก

7

ฉันคิดว่าทางออกที่ดีที่สุดคือไม่อนุญาตให้เข้าถึงองค์ประกอบการเลือกรูปแบบข้อความ หากคุณยกเลิกการตั้งค่าอย่างสมบูรณ์คุณจะพบกับผลข้างเคียงที่ไม่พึงประสงค์ในฐานะโปรแกรมแก้ไขแบบ WYSIWYG ที่หายไป ดังนั้นฉันจึงเสนอรหัสต่อไปนี้

function MY_MODULE_form_comment_form_alter(&$form, &$form_state, &$form_id) {
  $form['comment_body']['#after_build'][] = 'MY_MODULE_hide_text_format';
}


function MY_MODULE_hide_text_format(&$form) {
  $form[LANGUAGE_NONE][0]['format']['#access'] = false;
  return $form;
}

นี่เป็นทางออกที่ยอดเยี่ยมหากคุณต้องการซ่อนไว้ในฟิลด์เดียว และ WYSIWYG ยังคงใช้งานได้
Dalin

6

ใช้ CSS วิธีที่ง่ายที่สุด Firebug

#body-add-more-wrapper #edit-body-und-0-format {display: none;}

พลังของ CSS และ Firebug

โชคดี.


3
ฉันจะไม่แนะนำ "แม้ว่ามันจะใช้งานได้" การซ่อน CSS
saadlulu

ไม่ใช่คำตอบการพักผ่อน
Pan Chrono

5
ทำไม นี่เป็นคำตอบที่ดีเพราะคำถามคือซ่อนไม่ใช่เพื่อลบ มันไม่เหมือนกับการซ่อนมันจะทำให้เกิดภัยคุกคามความปลอดภัยหรือไม่ดีสำหรับ SEO ... คุณได้กำหนดสิทธิ์ในการกำหนดค่ารูปแบบข้อความแล้วปัญหาอยู่ที่ไหน
B2F

1
ฉันต้องการซ่อนมัน +1 คะแนนสำหรับคุณ
Alyssa Gono

โมดูล css injector ทำงานได้อย่างมหัศจรรย์ ดู: prntscr.com/cieuvs
Patoshi パトシ

5

สำหรับ Drupal 7

function MODULENAME_element_info_alter(&$type) {
  if (isset($type['text_format']['#process'])) {
    foreach ($type['text_format']['#process'] as &$callback) {

      if ($callback === 'filter_process_format') {
        $callback = 'MODULENAME_filter_process_format';
      }
    }
  }
}


function MODULENAME_filter_process_format($element) {
  $element = filter_process_format($element);

  // Change input format to "Filtered HTML" for body fields of NODETYPE_NAME

  if ($element['#bundle'] == 'NODETYPE_NAME' && $element['#field_name'] == 'body') {

    $element['format']['format']['#default_value'] = 'filtered_html';
    $element['format']['format']['#format'] = 'filtered_html';  
    $element['format']['format']['#value']  = 'filtered_html';
    $element['#format'] = 'filtered_html';

  }
  return $element;
}

นี่เป็นเทคนิคที่ยอดเยี่ยมหากคุณต้องการซ่อนมันในหลาย ๆ ฟิลด์ / ทั้งหมด
Dalin

2

อีกวิธีง่ายๆในการซ่อนตัวเลือกรูปแบบการป้อนข้อมูลคือการลบรูปแบบการป้อนข้อมูลอื่น ๆ ทั้งหมดออกจากโปรไฟล์ผู้ใช้ที่คุณต้องการซ่อนตัวเลือก สำหรับสิ่งนี้ไปที่ admin-> configuration-> รูปแบบอินพุตและลบบทบาทผู้ใช้ทั้งหมดออกจากรูปแบบอินพุตอื่น ๆ ยกเว้นรูปแบบที่คุณต้องการให้เป็นค่าเริ่มต้น


6
ใช้งานได้เฉพาะในกรณีที่คุณต้องการเปิดใช้งานข้อความล้วน เพราะคุณไม่สามารถปิดการใช้งานนั้น
Fletch

อย่างแน่นอน คุณไม่สามารถมี "ข้อความที่กรองแล้ว" เท่านั้น ขออภัยคำตอบนี้ทำให้เข้าใจผิด
nerdoc

2

ฉันทำอย่างนี้:

ยกเลิกการเลือก "ใช้รูปแบบข้อความ HTML ที่กรองแล้ว" และ "จัดการรูปแบบข้อความและตัวกรอง" จากบุคคล> การอนุญาตสำหรับผู้ใช้ที่ไม่ระบุชื่อและผู้ใช้ที่ได้รับอนุญาตเพื่อให้ไม่สามารถใช้ CKeditor

แน่นอนคุณสามารถปิดการใช้งานได้จาก CSS โดย "display: none;" สำหรับคลาส div โดยเฉพาะ (เป็น. filer-wrapper) และซ่อนพื้นที่ทั้งหมดที่คุณชี้ไปด้านบน แต่ในกรณีนี้พื้นที่จะถูกซ่อนสำหรับทุกคนรวมถึง superuser


1

ติดตั้งโมดูลCSS Injector (ปัจจุบันมีเพียงรุ่นพัฒนาที่ใช้งานได้สำหรับ Drupal 8)

จากนั้นไปที่หน้าการดูแลระบบของ CSS Injector (/ admin / config / development / css-injector) สร้างกฎ CSS ใหม่ด้วยรหัสนี้ (หรือรหัสใด ๆ ที่ใช้กับคลาสของการจัดรูปแบบข้อความพื้นที่):

.filter-guidelines {
    display: none;
}

เลือกที่จะใช้กับชุดรูปแบบSeven (หรือชุดรูปแบบผู้ดูแลระบบที่ใช้งานอยู่) บันทึกและสนุก!


ติดตั้ง css injector 1.x เนื่องจาก 2.0 เก่ากว่า นี่คือตัวอย่างของลักษณะที่ปรากฏ: prntscr.com/cieuvs - โมดูลนี้ทำงานมหัศจรรย์สำหรับ css injection และโมดูลอื่น ๆ เช่น CPN (รหัสต่อโหนด)
Patoshi パトシ

0

คุณไม่สามารถลบรูปแบบการป้อนข้อมูล "ข้อความธรรมดา" และ RTE จะไม่แสดงเมื่อคุณใช้รูปแบบอินพุต "ข้อความธรรมดา"

ฉันจะใช้ตัวเลือก CSS


ตัวเลือกรูปแบบการป้อนข้อมูลไม่ปรากฏขึ้นเมื่อผู้ใช้ที่เข้าสู่ระบบในปัจจุบันสามารถใช้รูปแบบอินพุตเท่านั้น รูปแบบอินพุตเพียงอย่างเดียวนั้นอาจเป็นรูปแบบอื่นและตัวเลือกจะไม่เหมือนกัน
kiamlaluno

0

ฉันใช้ทั้ง "ลบรูปแบบการป้อนข้อมูลอื่น ๆ ทั้งหมดออกจากโปรไฟล์ผู้ใช้" และวิธี css


0

ลองทำให้โมดูลง่ายขึ้น

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


ลดความซับซ้อนของงานสำหรับเขตข้อมูลอื่น แต่ฉันไม่สามารถทำงานให้กับรูปแบบอินพุตได้
Druvision

0

หากคุณต้องการซ่อนรูปแบบ แต่ยังคงมีอยู่ให้ลองใช้โมดูล " รูปแบบที่ง่ายขึ้น ": https://www.drupal.org/project/simplified_formats

มันซ่อนรายละเอียดรูปแบบในไอคอนเครื่องหมายคำถามเล็ก ๆ ถัดจากดรอปดาวน์การเลือกรูปแบบ สำหรับตัวกรองรูปแบบข้อความจำนวนมากมันไม่ดีเลยที่จะซ่อนคำแนะนำที่บอกวิธีใช้อย่างสมบูรณ์ ตัวกรองอื่น ๆ เป็นแบบอัตโนมัติมากขึ้น ฉันคิดว่าเราต้องการโมดูลที่ช่วยให้เราสามารถเลือกสิ่งที่แสดงให้เห็นถึงผู้ใช้และสิ่งที่ไม่


0

คุณยังสามารถใช้โมดูลการซ่อนรูปแบบ

ซ่อนรูปแบบช่วยให้คุณสามารถยุบ "รูปแบบข้อความ" หรือ "รูปแบบการป้อนข้อมูล" แบบเลื่อนลงเพื่อล้าง UI


นี่เป็นโมดูลที่ยอดเยี่ยม แต่มันทำให้กล่องฟอร์แมทยุบตัวไม่ซ่อนเร้น
Druvision

0

สำหรับ Drupal 8. สิ่งนี้จะลบพื้นที่การจัดรูปแบบสำหรับสองฟิลด์

/**
 * Implements hook_form_FORM_ID_alter().
 */
function CUSTOM_MODULE_form_FORM_ID_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  $form['#after_build'][] = 'CUSTOM_MODULE_eform_application_after_build';
}

function CUSTOM_MODULE_eform_application_after_build ($form) {
  unset($form['field_experience']['widget'][0]['format']);
  unset($form['field_miscellaneous']['widget'][0]['format']);
  return ($form);
}

OP ระบุ D7 ในคำถาม
Geoff

1
ตกลง อย่างไรก็ตามมีออนไลน์น้อยมากสำหรับ D8 ณ จุดนี้ ฉันคิดว่าฉันสามารถสร้างคำถามของตัวเองแล้วตอบคำถาม ไม่เคยลองเลย
Andre Angelantoni

นั่นจะเป็นวิธีที่ดีกว่าเพียงเพราะ OP ในกรณีนี้มีความเฉพาะเจาะจงมากเกี่ยวกับเวอร์ชัน
Geoff

คุณช่วยระบุวิธีการใช้งานได้ไหม ฉันจะหา form_id ได้อย่างไร
จอห์น

0

สำหรับ Drupal 7 คุณสามารถ:

1) ใช้hook_theme_registry_alter(&$theme_registry)จากภายในโมดูลเพื่อแก้ไขการลงทะเบียนชุดรูปแบบ eq นิยามตัวประมวลผลธีม

2) จากนั้นปรับเปลี่ยนฟังก์ชั่นสามธีมtheme_filter_tips, theme_filter_tips_more_infoและtheme_filter_guidelinesและบังคับให้พวกเขากลับไม่มีอะไร ดังนี้

นี่คือฟังก์ชั่นเป้าหมาย ฟังก์ชั่นชุดรูปแบบทั้งหมดข้างต้นจะถูกเปลี่ยนเส้นทางไปที่

function _mymodule_filter_tips($tips, $long = FALSE, $extra = ''){
  return '';
}

/**
 * Implements hook_theme_registry_alter
 */
function mymodule_theme_registry_alter(&$theme_registry) {
  $theme_registry['filter_tips']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_tips']['function'] = '_mymodule_filter_tips';
  $theme_registry['filter_guidelines']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_guidelines']['function'] = '_mymodule_filter_tips';
  $theme_registry['filter_tips_more_info']['theme path'] = drupal_get_path( 'module', 'mymodule' );
  $theme_registry['filter_tips_more_info']['function'] = '_mymodule_filter_tips';
}

เมื่อคุณล้างแคชของคุณ Drupal จะค้นหาคำจำกัดความตัวกรองเหล่านั้นบนเส้นทางของโมดูลที่คุณเลือก (ดูdrupal_get_path) และไม่ส่งคืนสิ่งใดสำหรับตัวกรองแต่ละตัว ดังนั้นไม่มีคำอธิบายรูปแบบข้อความเพิ่มเติม


0
/ hook_form_alter function
function CUSTOM_MODULE_form_alter(&$form, &$form_state, $form_id) {
    // We want this on a specific node type
    if ($form_id == 'NODE_TYPE_node_form') {
        $form['#after_build'][] = 'CUSTOM_MODULE_NODE_TYPE_node_form_after_build';
    }
}

// afterbuild function
function CUSTOM_MODULE_NODE_TYPE_node_form_after_build($form) {

    // We want to hide input formats and we can do it like following
    $form['body']['und']['0']['format']= '<div style="display:none;">';
    $form['body']['und']['0']['format']= '</div>';   

    return $form;
}

ส่วนใหญ่ทำงานให้ฉันด้วยการเปลี่ยนแปลงเล็กน้อยเหล่านี้

$form['body'][LANGUAGE_NONE][0]['format']['#prefix']<br>
$form['body'][LANGUAGE_NONE][0]['format']['#suffix']
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.