Jak ustawić domyślny format tekstu wejściowego dla każdego typu zawartości?
10
Chcę mieć możliwość ustawienia innego domyślnego formatu tekstu wejściowego dla typu zawartości i pola zawartości.
Na przykład do wyboru typu formatu mogą być „ Zwykły tekst ” i „ Edytor tekstu sformatowanego ”, a w niektórych przypadkach chcę, aby format był domyślnie ustawiony na „ Edytor tekstu sformatowanego ”, ale w menu rozwijanym wybierz opcję „ Zwykły tekst ”. Wiem, że mogę zmienić kolejność formatów tekstu, aby „ Bogaty edytor tekstu ” był pierwszym wyborem, ale ta metoda zmienia je wszystkie, to nie jest to, co chcę zrobić.
W przypadku braku stabilnej wersji modułu Better Formats możesz utworzyć moduł niestandardowy, aby to zrobić dla określonych typów treści lub pól.
Utwórz moduł (modulename.info i modulename.module, w folderze „modulename”). Przykład: 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;}
I 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"
Umieść te pliki w folderze „default_text_format” w witrynach / wszystkie / moduły / niestandardowe.
Zmień nazwę pakietu odpowiednio do typu zawartości. I możesz zastąpić „body” własnym „field_contenttype_fieldname”. (Po tym komentarzu / kod better_formats.)
Próbowałem tego i zmieniłem, aby działało, więc zadziałało dla mnie. `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
Mogę potwierdzić rozwiązanie @ awm. Oryginalna odpowiedź również dla mnie nie działa, ponieważ zastępuje ona domyślne wywołanie zwrotne. Rozwiązanie awm naprawia to poprzez dodanie wywołania zwrotnego zamiast zastępowania.
timofey.com
Aktualizacja - cofam mój ostatni komentarz. Oryginalna odpowiedź działa i jest preferowana. Nie działało to dla mnie, ponieważ zainstalowałem moduł Better Formats, który zastąpił moje wywołanie zwrotne. Najlepiej jest wyłączyć tę funkcję przed dodaniem tej funkcji. Teraz - w przypadku dodania do tablicy drugiego wywołania zwrotnego (jak sugeruje powyższy komentarz) najpierw zostanie przetworzone wywołanie zwrotne nr 1, zmieniając w ten sposób dane, zanim trafią one do wywołania zwrotnego.
Lepsze formaty to moduł zwiększający elastyczność podstawowego systemu formatowania danych wejściowych Drupala. Pozwoli ci to ustawić domyślny format dla każdego typu zawartości i wiele więcej.
Dzięki, wygląda obiecująco, ale używam D7 na stronie produkcyjnej, więc w tej chwili nie zamierzam używać tego modułu, ponieważ wciąż jest w fazie rozwoju.
J-Fiz,
3
Właśnie wpadłem na ten problem, ale nie chciałem używać modułu beta (lepsze formaty) i musiałem rozszerzyć funkcjonalność i zautomatyzować go, aby takie ustawienia nie były zakodowane na stałe, ale ustawione z zaplecza .
Zrobiłem więc:
Dodałem ustawienie w polu Edytuj ustawienia pola, dla którego potrzebuję domyślnego formatu tekstu
Użyłem powyższego kodu i nieznacznie go zmodyfikowałem, aby ustawił domyślny format tekstu zapisany w ustawieniach pola
Użyłem funkcji, aby wyeksportować typ zawartości, aby moje ustawienia zostały zachowane w kodzie
Część Ustawienia edycji pola
/**
* 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,);}}
Więc ta część kodu powinna być wystarczająco widoczna ... dodaje zestaw pól i dodaje w nim listę wyboru, która jest zapełniana profilami WYSIWYG istniejącymi w Twojej witrynie. Te profile WYSIWYG są powiązane z formatami tekstowymi, więc gdy ktoś wybierze format / filtr tekstowy, faktycznie wybiera skonfigurowany profil.
Teraz druga część jest tym samym kodem, który został podany powyżej przez innego użytkownika i pochodzi z modułu 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;}
Tak więc ustawienia są zapisywane, dlatego eksport funkcji jest możliwy lub dowolną metodą, której używasz do zapisywania ustawień.
Mam nadzieję, że pomoże to każdemu, kto napotkał ten problem!
Użyj modułu Better Formats :
Lepsze formaty to moduł zwiększający elastyczność podstawowego systemu formatowania danych wejściowych Drupala. Pozwoli ci to ustawić domyślny format dla każdego typu zawartości i wiele więcej.
źródło
Właśnie wpadłem na ten problem, ale nie chciałem używać modułu beta (lepsze formaty) i musiałem rozszerzyć funkcjonalność i zautomatyzować go, aby takie ustawienia nie były zakodowane na stałe, ale ustawione z zaplecza .
Zrobiłem więc:
Część Ustawienia edycji pola
Więc ta część kodu powinna być wystarczająco widoczna ... dodaje zestaw pól i dodaje w nim listę wyboru, która jest zapełniana profilami WYSIWYG istniejącymi w Twojej witrynie. Te profile WYSIWYG są powiązane z formatami tekstowymi, więc gdy ktoś wybierze format / filtr tekstowy, faktycznie wybiera skonfigurowany profil.
Teraz druga część jest tym samym kodem, który został podany powyżej przez innego użytkownika i pochodzi z modułu Better Formats.
Tak więc ustawienia są zapisywane, dlatego eksport funkcji jest możliwy lub dowolną metodą, której używasz do zapisywania ustawień.
Mam nadzieję, że pomoże to każdemu, kto napotkał ten problem!
źródło