Como você define um formato de texto de entrada padrão por tipo de conteúdo?


10

Quero poder definir um formato de texto de entrada padrão diferente por tipo de conteúdo e por campo de conteúdo.

Por exemplo, as opções de tipo de formato podem ser " Texto sem formatação " e " Editor de texto rico " e, em alguns casos, desejo que o formato seja padrão como " Editor de texto sem formatação ", mas mantenha " Texto sem formatação " como uma opção no menu suspenso. Sei que posso alterar a ordem dos formatos de texto para tornar o " Rich text editor " a primeira escolha, mas esse método altera todos eles, não é isso que eu quero fazer.

Respostas:


10

Na ausência de uma versão estável do módulo Better Formats , você pode criar um módulo personalizado para fazer isso para campos ou tipos de conteúdo específicos.

Crie um módulo (modulename.info e modulename.module, dentro de uma pasta 'modulename'). Exemplo: 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;
}

E 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"

Coloque esses arquivos em uma pasta 'default_text_format' em sites / all / modules / custom.

Altere o nome do pacote conforme apropriado para o seu tipo de conteúdo. E você pode substituir 'body' por seu próprio 'field_contenttype_fieldname'. (Após este código de comment / better_formats.)


1
Eu tentei isso e alterei-o para funcionar, assim funcionou para mim. `foreach ($ type ['text_format'] ['# process'] como $ key => $ callback) {if ($ key == 'filter_process_format') {$ type ['text_format'] ['# process'] [ ] = 'MODULE_NAME_default_text_formats_filter_process_format'; } `
awm 28/10

Posso confirmar a solução da @ awm. A resposta original também não funciona para mim, porque substitui o retorno de chamada padrão. A solução da awm corrige isso adicionando o retorno de chamada, em vez de substituir.
precisa saber é o seguinte

Atualização - retiro meu último comentário. A resposta original funciona e é preferida. Não funcionou para mim porque eu tinha o módulo Better Formats instalado, que substituiu meu retorno de chamada. Idealmente, você deseja desativá-lo antes de adicionar esta função. Agora - no caso em que você adiciona um segundo retorno de chamada à matriz (como sugere o comentário acima), o retorno de chamada nº 1 será processado primeiro, alterando os dados antes que ele atinja seu retorno de chamada.
timofey.com

3

Use o módulo Better Formats :

Melhores formatos é um módulo para adicionar mais flexibilidade ao sistema principal de formatos de entrada do Drupal. Isso permitirá que você defina o formato padrão por tipo de conteúdo e muito mais.


Obrigado, parece promissor, mas estou usando o D7 em um site de produção, então não vou usar este módulo no momento porque ele ainda está em desenvolvimento.
precisa

3

Acabei de me deparar com esse problema, mas não queria usar um módulo beta (Better Formats), e tive que estender a funcionalidade e automatizá-la, para que essas configurações não sejam codificadas, mas definidas na retaguarda .

Então eu fiz o seguinte:

  • Adicionei uma configuração no formulário Editar configurações do campo em que preciso do formato de texto padrão para
  • Eu usei o código fornecido acima e modifiquei-o levemente para que ele defina o formato de texto padrão como salvo nas configurações do campo
  • Usei Recursos para exportar o tipo de conteúdo, para que eu tenha minhas configurações preservadas no código

Parte Configurações de Edição de Campo

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

Portanto, essa parte do código deve ser evidente o suficiente ... ele adiciona um conjunto de campos e uma lista de seleção nele, preenchida pelos perfis WYSIWYG existentes em seu site. Esses perfis WYSIWYG estão vinculados aos formatos de texto; portanto, quando alguém seleciona um formato / filtro de texto, ele realmente seleciona o perfil que está configurado.

Agora, a segunda parte é o mesmo código fornecido acima por outro usuário e retirado do módulo 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;
}

Portanto, as configurações são salvas, portanto, é possível exportar recursos ou qualquer outro método usado para salvar suas configurações.

Espero que isso ajude qualquer pessoa que tenha encontrado esse problema!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.