web-dev-qa-db-fra.com

Comment modifier par programme le format de texte du corps du type de contenu de la page en HTML complet?

J'ai un profil d'installation personnalisé et je dois modifier par programme le format du corps du texte du type de contenu de la page en HTML complet. Cependant, je n'ai pas réussi à trouver comment le faire.

Comment puis-je le faire?

8
Codium

Vous pouvez le faire avec hook_element_info_alter, voici un extrait.

<?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 MODULENAME_element_info_alter(&$type) {
  if (isset($type['text_format']['#process'])) {
    foreach ($type['text_format']['#process'] as &$callback) {
      if ($callback === 'filter_process_format') {
        $callback = 'MODULENAME_filter_process_format';
      }
    }
  }
}

/**
 * Callback for MODULENAME_element_info_alter().
 */
function MODULENAME_filter_process_format($element) {
  $element = filter_process_format($element);
  // Change the default text format of the 'field_company_spotlight' field to
  // 'Media HTML'. 
  if ($element['#bundle'] == 'company' && $element['#field_name'] == 'field_company_spotlight') {
    $element['format']['format']['#default_value'] = 'media_html';
  }
  return $element;
}
?>

Comme CE post suggère que vous pouvez essayer

$form['field_name'][LANGUAGE_NONE][0]['#format'] = 'full_html';
$form['field_name'][LANGUAGE_NONE][0]['#format'] = 'filtered_html';

dans ton hook_form_alter ou dans hook_FORM_ID_alter

Il y a aussi le module Better Formats

De meilleurs formats est un module pour ajouter plus de flexibilité au système de format d'entrée principal de Drupal.

6
niksmac

La deuxième réponse de Nikhil M est la meilleure -

$form['field_name'][LANGUAGE_NONE][0]['#format'] = 'full_html';  

pas besoin de hook_element_info

2
Druvision