Làm thế nào để bạn đặt định dạng văn bản đầu vào mặc định cho mỗi loại nội dung?


10

Tôi muốn có thể đặt định dạng văn bản đầu vào mặc định khác nhau cho mỗi loại nội dung và mỗi trường nội dung.

Ví dụ: các lựa chọn loại định dạng có thể là " Văn bản thuần túy " và " Trình soạn thảo văn bản có định dạng " và trong một số trường hợp tôi muốn định dạng mặc định thành " Trình soạn thảo văn bản có định dạng " nhưng giữ " Văn bản thuần túy " làm lựa chọn trong trình đơn thả xuống. Tôi biết rằng tôi có thể thay đổi thứ tự của các định dạng văn bản để biến " Trình soạn thảo văn bản phong phú " thành lựa chọn đầu tiên, nhưng phương pháp này thay đổi tất cả chúng, đó không phải là điều tôi muốn làm.

Câu trả lời:


10

Trong trường hợp không có phiên bản ổn định của mô-đun Định dạng Tốt hơn , bạn có thể tạo mô-đun tùy chỉnh để thực hiện việc này cho các loại nội dung hoặc trường cụ thể.

Tạo một mô-đun (modulename.info và modulename.module, bên trong một thư mục 'modulename'). Ví dụ: default bản_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;
}

Và defaultSphere_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"

Đặt các tệp này vào một thư mục 'defaultSphere_format' trong các trang web / tất cả / mô-đun / tùy chỉnh.

Thay đổi tên gói phù hợp với loại nội dung của bạn. Và bạn có thể thay thế 'cơ thể' bằng 'field_contenttype_fieldname' của riêng bạn. (Sau nhận xét này / mã better_formats.)


1
Tôi đã thử điều này và thay đổi nó để làm việc để nó làm việc cho tôi. `foreach ($ type ['text_format'] ['# process'] là $ key => $ callback) {if ($ key == 'filter_ process_format') {$ type ['text_format'] ['# process'] [ ] = 'MODULE_NAME_default bản_formats_filter_ process_format'; } `
awm

Tôi có thể xác nhận giải pháp của @ awm. Câu trả lời ban đầu cũng không hoạt động với tôi, vì nó ghi đè lên cuộc gọi lại mặc định. Giải pháp của awm khắc phục điều đó bằng cách thêm cuộc gọi lại, thay vì ghi đè.
timofey.com

Cập nhật - Tôi lấy lại bình luận cuối cùng của tôi. Câu trả lời ban đầu không hoạt động và được ưa thích. Nó không hoạt động với tôi vì tôi đã cài đặt mô-đun Định dạng tốt hơn, đã ghi đè lại cuộc gọi lại của tôi. Lý tưởng nhất là bạn muốn tắt nó trước khi thêm chức năng này. Bây giờ - trong trường hợp bạn thêm một cuộc gọi lại thứ hai vào mảng (như nhận xét ở trên tôi gợi ý), cuộc gọi lại số 1 sẽ được xử lý trước, do đó thay đổi dữ liệu trước khi nó chạm vào cuộc gọi lại của bạn.
timofey.com

3

Sử dụng mô-đun định dạng tốt hơn :

Các định dạng tốt hơn là một mô-đun để thêm linh hoạt hơn cho hệ thống định dạng đầu vào cốt lõi của Drupal. Nó sẽ cho phép bạn đặt định dạng mặc định cho mỗi loại nội dung và nhiều hơn nữa.


Cảm ơn, có vẻ đầy hứa hẹn nhưng tôi đang sử dụng D7 trên một trang web sản xuất vì vậy tại thời điểm này tôi sẽ không sử dụng mô-đun này vì nó vẫn đang được phát triển.
J-Fiz

3

Tôi chỉ gặp phải vấn đề này, nhưng tôi không muốn sử dụng mô-đun beta (Định dạng tốt hơn) và tôi phải mở rộng chức năng và tự động hóa nó, để các cài đặt đó không bị mã hóa, nhưng được đặt từ văn phòng hỗ trợ .

Vì vậy, tôi đã làm như sau:

  • Tôi đã thêm một cài đặt trên biểu mẫu Chỉnh sửa cài đặt của trường mà tôi cần định dạng văn bản mặc định cho
  • Tôi đã sử dụng mã được cung cấp ở trên và sửa đổi nó một chút để nó được đặt định dạng văn bản mặc định là được lưu trong cài đặt của trường
  • Tôi đã sử dụng Tính năng để xuất loại nội dung để tôi giữ các cài đặt của mình trong mã

Trường Chỉnh sửa phần Cài đặt

/**
 * 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,
    );
  }
}

Vì vậy, phần mã này đủ rõ ràng ... nó thêm một bộ trường và thêm một danh sách chọn trong đó, được điền bởi các cấu hình WYSIWYG hiện có trên trang web của bạn. Các cấu hình WYSIWYG đó được gắn với các định dạng văn bản, vì vậy khi ai đó chọn định dạng / bộ lọc văn bản, nó thực sự chọn cấu hình được định cấu hình.

Bây giờ phần 2 là cùng mã được cung cấp ở trên bởi một người dùng khác và được lấy từ mô-đun Định dạng Tốt hơn.

/**
 * 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;
}

Vì vậy, các cài đặt được lưu, do đó Tính năng Xuất có thể hoặc bất kỳ phương pháp nào bạn sử dụng để lưu cài đặt của mình.

Tôi hy vọng điều này sẽ giúp bất cứ ai khác gặp phải vấn đề này!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.