답변:
Better Formats 모듈 의 안정적인 릴리스가없는 경우 특정 컨텐츠 유형 또는 필드에 대해이를 수행하기 위해 사용자 정의 모듈을 작성할 수 있습니다.
모듈 (폴더 'modulename'내에 모듈 이름 .info 및 모듈 이름 .module)을 만듭니다 . 예 : default_text_format.module :
<?php
/**
* 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 default_text_format_element_info_alter(&$type) {
if (isset($type['text_format']['#process'])) {
foreach ($type['text_format']['#process'] as &$callback) {
if ($callback === 'filter_process_format') {
$callback = 'default_text_format_filter_process_format';
}
}
}
}
/**
* Callback for MODULENAME_element_info_alter().
*/
function default_text_format_filter_process_format($element) {
$element = filter_process_format($element);
// Change input format to "Filtered HTML" for body fields of article nodes
if ($element['#bundle'] == 'article' && $element['#field_name'] == 'body') {
$element['format']['format']['#default_value'] = 'filtered_html';
}
return $element;
}
그리고 default_text_format.info :
name = Default text format
description = Adapt the module code to set a default format for a content type.
package = Custom modules
core = "7.x"
이 파일들을 sites / all / modules / custom의 'default_text_format'폴더에 넣으십시오.
컨텐츠 유형에 맞게 번들 이름을 변경하십시오. 그리고 'body'를 자신의 'field_contenttype_fieldname'으로 대체 할 수 있습니다. ( 이 주석 후 / better_formats 코드.)
방금이 문제에 부딪 쳤지 만 베타 모듈 (Better Formats)을 사용하고 싶지 않았으며 기능을 확장하고 자동화하여 그러한 설정이 하드 코딩되지 않고 백 오피스에서 설정되도록해야했습니다. .
그래서 나는 다음을 수행했다.
필드 편집 설정 부분
/**
* 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,
);
}
}
따라서 코드 의이 부분은 충분히 분명해야합니다 ... 필드 세트를 추가하고 선택 목록을 추가합니다.이 목록은 사이트에 존재하는 WYSIWYG 프로파일로 채워집니다. 이러한 WYSIWYG 프로파일은 텍스트 형식에 연결되므로 누군가 텍스트 형식 / 필터를 선택하면 실제로 구성된 프로파일을 선택합니다.
이제 두 번째 부분은 다른 사용자가 제공 한 것과 동일한 코드이며 Better Formats 모듈에서 가져온 것입니다.
/**
* 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;
}
따라서 설정이 저장되므로 기능 내보내기가 가능하거나 설정을 저장하는 데 사용하는 방법이 있습니다.
이 문제가 발생한 다른 사람에게 도움이 되었기를 바랍니다.