ฉันเพิ่งชนกับปัญหานี้ด้วยตัวเอง แต่ฉันไม่ต้องการใช้โมดูลเบต้า (รูปแบบที่ดีขึ้น) และฉันต้องขยายการทำงานและทำให้เป็นอัตโนมัติเพื่อให้การตั้งค่าดังกล่าวไม่ได้เป็นฮาร์ดโค้ด แต่ตั้งค่าจากสำนักงานหลัง .
ดังนั้นฉันทำต่อไปนี้:
- ฉันเพิ่มการตั้งค่าในแบบฟอร์มแก้ไขการตั้งค่าของเขตข้อมูลที่ฉันต้องการรูปแบบข้อความเริ่มต้นสำหรับ
- ฉันใช้รหัสที่ให้ไว้ด้านบนและปรับเปลี่ยนเล็กน้อยเพื่อให้ได้รับการตั้งค่ารูปแบบข้อความเริ่มต้นตามที่บันทึกไว้ในการตั้งค่าของฟิลด์
- ฉันใช้ฟีเจอร์เพื่อส่งออกประเภทเนื้อหาเพื่อให้การตั้งค่าของฉันถูกเก็บเป็นรหัสไว้
ส่วนการแก้ไขการตั้งค่าฟิลด์
/**
* Implements hook_form_FIELD_UI_FIELD_EDIT_FORM_alter().
*/
function MY_MODULE_form_field_ui_field_edit_form_alter(&$form, &$form_state) {
if ($form['#field']['type'] == 'text_long') {
$instance = $form['#instance'];
// Fieldset for Default Formats settings.
$filters = filter_formats();
$options = array('_none' => t('None'));
foreach ($filters as $key => $filter) {
$options[$key] = $filter->name;
}
$form['instance']['settings']['default_filter'] = array(
'#type' => 'fieldset',
'#title' => t('Default Filter Settings'),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
);
$form['instance']['settings']['default_filter']['wysiwyg_profile'] = array(
'#type' => 'select',
'#title' => t('Select a default format for this field'),
'#description' => t('The selected text format will influence the button and plugin configuration of WYSIWYG.'),
'#default_value' => isset($instance['settings']['default_filter']['wysiwyg_profile'])
? $instance['settings']['default_filter']['wysiwyg_profile'] : '_none',
'#options' => $options,
);
}
}
ดังนั้นส่วนนี้ของรหัสควรชัดเจนพอ ... มันเพิ่ม fieldset และเพิ่มรายการที่เลือกไว้ซึ่งจะถูกเติมด้วยโพรไฟล์ WYSIWYG ที่มีอยู่ในเว็บไซต์ของคุณ โปรไฟล์ WYSIWYG เหล่านั้นจะเชื่อมโยงกับรูปแบบข้อความดังนั้นเมื่อมีคนเลือกรูปแบบข้อความ / ตัวกรองจริง ๆ แล้วจะเลือกโปรไฟล์ที่มีการกำหนดค่า
ตอนนี้ส่วนที่ 2 เป็นรหัสเดียวกับที่ให้ไว้ข้างต้นโดยผู้ใช้รายอื่นซึ่งนำมาจากโมดูลรูปแบบที่ดีกว่า
/**
* Implements hook_element_info_alter().
*
* Sets the text format processor to a custom callback function.
* This code is taken from the Better Formats module.
*/
function MY_MODULE_element_info_alter(&$type) {
if (isset($type['text_format']['#process'])) {
foreach ($type['text_format']['#process'] as &$callback) {
if ($callback === 'filter_process_format') {
$callback = 'MY_MODULE_filter_process_format';
}
}
}
}
/**
* Callback for MY_MODULE_element_info_alter().
*
* Alters the default text format of fields.
*/
function MY_MODULE_filter_process_format($element) {
$element = filter_process_format($element);
// Configuration array that specifies the fields that need to be altered.
$field_info = field_info_instance($element['#entity_type'],
$element['#field_name'],
$element['#bundle']);
// Change input format to configured value.
if (isset($field_info['settings']['default_filter']['wysiwyg_profile']) && $field_info['settings']['default_filter']['wysiwyg_profile'] != '_none') {
$element['format']['format']['#default_value'] = $field_info['settings']['default_filter']['wysiwyg_profile'];
}
return $element;
}
ดังนั้นการตั้งค่าจึงถูกบันทึกไว้ดังนั้นคุณสมบัติการส่งออกจึงเป็นไปได้หรือวิธีใดก็ตามที่คุณใช้ในการบันทึกการตั้งค่าของคุณ
ฉันหวังว่านี่จะช่วยคนอื่นที่ประสบปัญหานี้!