Zapisywanie pola typu „text_format” jako zmiennej systemowej

19

Próbuję dać moim edytorom treści możliwość zmiany zmiennej dla niestandardowego modułu. Ta zmienna może mieć HTML. Nie chcę wymagać od nich żadnej znajomości HTML, więc chcę dać im możliwość posiadania naszej wysiwyg (CKEditor dostarczony przez moduł CKEditor). Jednak na razie dane nie są zapisywane jako zmienne. Przeczytałem w kilku miejscach (Do, stackexchange), że muszę zrobić coś takiego:

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

To nie działa od razu po skonfigurowaniu system_settings_form ($ form). Var_dump pokazuje to po zapisie:

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

Z tego widać, że „format” zapisuje się poprawnie, ale „wartość” nie. czego mi brakuje?

Ponadto, jeśli istnieje lepszy sposób, aby to zrobić, proszę powiedzieć.

mrryanjohnston
źródło

Odpowiedzi:

28

Poniższe działało dla mnie; #default_value oczekuje ciągu, ale element formularza text_format jest przechowywany jako tablica.

$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
źródło