Як встановити стандартний формат введення тексту за типом вмісту?


10

Я хочу мати можливість встановити інший формат вводу тексту за замовчуванням для типу вмісту та для кожного поля вмісту.

Наприклад, вибору типу формату можуть бути " Звичайний текст " та " Редактор багатофункціонального тексту ", а в деяких випадках я хочу, щоб формат за замовчуванням був " Редактором розширеного тексту ", але зберігати " Звичайний текст " як вибір у спадному меню. Я знаю, що я можу змінити порядок текстових форматів, щоб зробити " Редактор текстових текстів " першим вибором, але цей метод змінює їх усі. Це не те, що я хочу робити.

Відповіді:


10

За відсутності стабільного випуску модуля Better Formats (Формати кращих форматів) ви можете створити спеціальний модуль для цього для певних типів вмісту або полів.

Створіть модуль (modulename.info та modulename.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"

Помістіть ці файли у папку 'default_text_format' на сайтах / all / module / custom.

Змініть назву пакета відповідно до типу вмісту. І ви можете замінити "body" власним "field_contenttype_fieldname". (Після цього коментаря / краще_формати код.)


1
Я спробував це і змінив його, щоб він працював, щоб він працював на мене. `foreach ($ type ['text_format'] ['# process'] як $ key => $ callback) {if ($ key == 'filter_process_format') {$ type ['text_format'] ['# process'] [ ] = 'MODULE_NAME_default_text_formats_filter_process_format'; } `
awm

Я можу підтвердити рішення @ awm. Оригінальна відповідь також не працює для мене, оскільки вона перекриває зворотний виклик за замовчуванням. Рішення awm виправляє це, додаючи зворотний виклик, а не перевизначаючи.
timofey.com

Оновлення - я беру назад свій останній коментар. Оригінальна відповідь справді працює і є кращою. Для мене це не спрацювало, оскільки в мене був встановлений модуль Better Formats, який міняв зворотний зв'язок. В ідеалі, ви хочете відключити його перед додаванням цієї функції. Тепер - у випадку, коли ви додасте другий зворотний дзвінок до масиву (як це підказує коментар вище), зворотний виклик №1 буде оброблений першим, таким чином, зміняючи дані, перш ніж він потрапить у ваш зворотний виклик.
timofey.com

3

Використовуйте модуль " Кращі формати" :

Кращі формати - це модуль для додавання більшої гнучкості до основної системи введення формату 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-профілі прив’язані до текстових форматів, тому коли хтось вибирає текстовий формат / фільтр, він фактично вибирає профіль, який налаштовано.

Тепер 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;
}

Таким чином, налаштування зберігаються, тому можливий експорт функцій або будь-який метод, який ви використовуєте для збереження налаштувань.

Я сподіваюся, що це допоможе всім, хто стикався з цією проблемою!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.