Menyimpan bidang tipe 'text_format' sebagai variabel pengaturan sistem

19

Saya mencoba memberi editor konten saya kemampuan untuk mengubah variabel untuk modul khusus. Variabel ini dapat memiliki html. Saya tidak ingin meminta mereka memiliki pengetahuan tentang HTML, jadi saya ingin memberi mereka kemampuan untuk memiliki wysiwyg kami (CKEditor disediakan oleh modul CKEditor) yang mereka miliki. Namun, sampai sekarang, data tidak menyimpan sebagai variabel. Saya telah membaca di beberapa tempat (Do, stackexchange) yang perlu saya lakukan seperti ini:

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

Ini tidak bekerja di luar kotak dengan system_settings_form ($ form). Var_dump menunjukkan ini setelah save:

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

Dari ini, Anda dapat melihat bahwa 'format' menyimpan dengan benar, tetapi 'nilai' tidak. Apa yang saya lewatkan?

Juga, jika ada cara yang lebih baik untuk melakukan ini, tolong beri tahu.

mrryanjohnston
sumber

Jawaban:

28

Berikut ini bekerja untuk saya; #default_value mengharapkan sebuah string tetapi elemen form text_format disimpan sebagai sebuah array.

$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
sumber