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.
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 nodesif($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.)
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.
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!
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.
fonte
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:
Parte Configurações de Edição de Campo
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.
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!
fonte