Как установить формат ввода текста по умолчанию для каждого типа контента?
10
Я хочу иметь возможность установить другой формат ввода текста по умолчанию для типа контента и для поля контента.
Например, варианты типа формата могут быть « Обычный текст » и « Редактор форматированного текста », и в некоторых случаях я хочу, чтобы формат по умолчанию был « Редактор форматированного текста », но при этом в раскрывающемся списке выберите « Обычный текст ». Я знаю, что могу изменить порядок текстовых форматов, чтобы сделать « Rich text editor » первым выбором, но этот метод меняет все из них, это не то, что я хочу делать.
В отсутствие стабильной версии модуля « Лучшие форматы » вы можете создать собственный модуль, чтобы сделать это для определенных типов контента или полей.
Создайте модуль (modulename.info и modulename.module внутри папки «modulename»). Пример: 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 nodesif($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"
Поместите эти файлы в папку default_text_format в sites / all / modules / custom.
Измените имя пакета в соответствии с вашим типом контента. И вы можете заменить 'body' своим собственным 'field_contenttype_fieldname'. (После этого комментария / кода лучше_форматов.)
Я попробовал это и изменил это, чтобы это работало так, чтобы это работало для меня. `foreach ($ type ['text_format'] ['# process'] as $ key => $ callback) {if ($ key == 'filter_process_format') {$ type ['text_format'] ['# process'] [ ] = 'MODULE_NAME_default_text_formats_filter_process_format'; } `
awm
Я могу подтвердить решение @ AWM. Оригинальный ответ также не работает для меня, потому что он переопределяет обратный вызов по умолчанию. Решение awm исправляет это путем добавления обратного вызова вместо переопределения.
timofey.com
Обновление - я забираю свой последний комментарий. Оригинальный ответ работает и является предпочтительным. Это не сработало для меня, потому что у меня был установлен модуль «Лучшие форматы», который переопределил мой обратный вызов. В идеале вы хотите отключить его перед добавлением этой функции. Теперь - в случае, когда вы добавляете второй обратный вызов в массив (как предполагает приведенный выше комментарий), обратный вызов # 1 будет обработан первым, таким образом изменяя данные, прежде чем он попадет в ваш обратный вызов.
Лучшие форматы - это модуль, обеспечивающий большую гибкость в базовой системе форматов ввода Drupal. Это позволит вам установить формат по умолчанию для каждого типа контента и многое другое.
Спасибо, выглядит многообещающе, но я использую D7 на производственном веб-сайте, поэтому я не собираюсь сейчас использовать этот модуль, потому что он все еще находится в разработке.
J-Fiz
3
Я сам столкнулся с этой проблемой, но я не хотел использовать бета-модуль (лучшие форматы), и мне пришлось расширить функциональность и автоматизировать его, чтобы такие настройки не были жестко заданы, а были заданы из бэк-офиса ,
Итак, я сделал следующее:
Я добавил параметр в форму «Изменить настройки» поля, для которого мне нужен текстовый формат по умолчанию.
Я использовал приведенный выше код и слегка его изменил, чтобы он устанавливал текстовый формат по умолчанию, сохраненный в настройках поля
Я использовал Функции для экспорта типа контента, чтобы мои настройки сохранялись в коде
Поле Редактировать настройки
/**
* 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 привязаны к текстовым форматам, поэтому, когда кто-то выбирает текстовый формат / фильтр, он фактически выбирает настроенный профиль.
Теперь вторая часть - это тот же код, который был предоставлен другим пользователем выше, и который взят из модуля «Лучшие форматы».
/**
* 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;}
Таким образом, настройки сохраняются, поэтому возможен экспорт функций или любой другой метод, который вы используете для сохранения настроек.
Надеюсь, это поможет любому, кто столкнулся с этой проблемой!
Используйте модуль « Лучшие форматы »:
Лучшие форматы - это модуль, обеспечивающий большую гибкость в базовой системе форматов ввода Drupal. Это позволит вам установить формат по умолчанию для каждого типа контента и многое другое.
источник
Я сам столкнулся с этой проблемой, но я не хотел использовать бета-модуль (лучшие форматы), и мне пришлось расширить функциональность и автоматизировать его, чтобы такие настройки не были жестко заданы, а были заданы из бэк-офиса ,
Итак, я сделал следующее:
Поле Редактировать настройки
Так что эта часть кода должна быть достаточно очевидной ... она добавляет набор полей и добавляет в него список выбора, который заполняется профилями WYSIWYG, существующими на вашем сайте. Эти профили WYSIWYG привязаны к текстовым форматам, поэтому, когда кто-то выбирает текстовый формат / фильтр, он фактически выбирает настроенный профиль.
Теперь вторая часть - это тот же код, который был предоставлен другим пользователем выше, и который взят из модуля «Лучшие форматы».
Таким образом, настройки сохраняются, поэтому возможен экспорт функций или любой другой метод, который вы используете для сохранения настроек.
Надеюсь, это поможет любому, кто столкнулся с этой проблемой!
источник