Salvataggio di un campo di tipo 'text_format' come variabile di impostazione del sistema


19

Sto tentando di dare ai miei editor di contenuti la possibilità di cambiare una variabile per un modulo personalizzato. Questa variabile può avere HTML. Non voglio richiedere loro di avere alcuna conoscenza dell'HTML, quindi voglio dare loro la possibilità di avere a disposizione il nostro wysiwyg (CKEditor fornito dal modulo CKEditor). Tuttavia, a partire da ora, i dati non vengono salvati come variabile. Ho letto in alcuni punti (Do, stackexchange) che avevo bisogno di fare qualcosa del genere:

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

Questo non funziona immediatamente con un system_settings_form ($ form). Un var_dump lo mostra dopo un salvataggio:

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

Da questo, puoi vedere che 'format' salva correttamente, ma 'value' no. Che cosa mi manca?

Inoltre, se esiste un modo migliore per farlo, ti preghiamo di comunicarlo.

Risposte:


28

Quanto segue ha funzionato per me; #default_value si aspetta una stringa ma l'elemento del modulo text_format è memorizzato come una matrice.

$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,
); 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.