Je viens de tomber sur ce problème moi-même, mais je ne voulais pas utiliser un module bêta (meilleurs formats), et j'ai dû étendre les fonctionnalités et l'automatiser, afin que ces paramètres ne soient pas codés en dur, mais définis à partir du back-office .
J'ai donc fait ce qui suit:
- J'ai ajouté un paramètre dans le formulaire Modifier les paramètres du champ pour lequel j'ai besoin du format de texte par défaut pour
- J'ai utilisé le code fourni ci-dessus et l'ai légèrement modifié afin qu'il définisse le format de texte par défaut tel qu'il est enregistré dans les paramètres du champ
- J'ai utilisé les fonctionnalités pour exporter le type de contenu afin que mes paramètres soient conservés dans le code
Partie Paramètres de modification du champ
/**
* 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,
);
}
}
Cette partie du code devrait donc être suffisamment évidente ... elle ajoute un champ et y ajoute une liste de sélection, qui est remplie par les profils WYSIWYG existant sur votre site. Ces profils WYSIWYG sont liés aux formats de texte, donc quand quelqu'un sélectionne un format / filtre de texte, il sélectionne en fait le profil qui est configuré.
Maintenant, la 2ème partie est le même code que celui fourni ci-dessus par un autre utilisateur, et qui est extrait du module 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;
}
Ainsi, les paramètres sont enregistrés, par conséquent, l'exportation des fonctionnalités est possible ou quelle que soit la méthode que vous utilisez pour enregistrer vos paramètres.
J'espère que cela aide toute autre personne qui a rencontré ce problème!