Enregistrement d'un champ de type 'text_format' en tant que variable de configuration système

19

J'essaie de donner à mes éditeurs de contenu la possibilité de modifier une variable pour un module personnalisé. Cette variable peut avoir du html. Je ne veux pas leur demander d'avoir une connaissance du HTML, je veux donc leur donner la possibilité d'avoir notre wysiwyg (CKEditor fourni par le module CKEditor) à leur disposition. Cependant, pour l'instant, les données ne sont pas enregistrées en tant que variable. J'ai lu à quelques endroits (Do, stackexchange) que je devais faire quelque chose comme ça:

  $form['foo']['bar'] = array(
    '#type'     => 'text_format',
    '#title'    => 'Bar',
    '#definition' => 'Foo Bar',
    '#default_value' => variable_get('bar', ''),
    '#weight'   => 1,
    '#format' => 'filtered_html',
    '#required' => FALSE,
  ); 

Cela ne fonctionne pas immédiatement avec un system_settings_form ($ form). Un var_dump le montre après une sauvegarde:

array (size=7)
  '#type' => string 'text_format' (length=11)
  '#title' => string 'Bar' (length=7)
  '#definition' => string 'Foo Bar' (length=74)
  '#default_value' => 
    array (size=2)
      'value' => string '' (length=0)
      'format' => string 'filtered_html' (length=9)
  '#weight' => int 1
  '#format' => string 'filtered_html' (length=9)
  '#required' => boolean false

De là, vous pouvez voir que «format» enregistre correctement, mais pas «valeur». Qu'est-ce que je rate?

De plus, s'il existe une meilleure façon de le faire, veuillez le dire.

mrryanjohnston
la source

Réponses:

28

Ce qui suit a fonctionné pour moi; #default_value attend une chaîne mais l'élément de formulaire text_format est stocké sous forme de tableau.

$barvalue = variable_get('bar', array('value' => '', 'format' => NULL));

$form['foo']['bar'] = array(
'#type'     => 'text_format',
'#title'    => 'Bar',
'#definition' => 'Foo Bar',
'#default_value' => $barvalue['value'],
'#weight'   => 1,
'#format' => $barvalue['format'],
'#required' => FALSE,
); 
VVS
la source