Speichern eines Feldes vom Typ 'text_format' als Systemeinstellungsvariable

19

Ich versuche, meinen Inhaltseditoren die Möglichkeit zu geben, eine Variable für ein benutzerdefiniertes Modul zu ändern. Diese Variable kann HTML haben. Ich möchte nicht, dass sie HTML-Kenntnisse haben, und möchte ihnen daher die Möglichkeit geben, unser wysiwyg (CKEditor, bereitgestellt vom CKEditor-Modul) zur Verfügung zu haben. Derzeit werden die Daten jedoch nicht als Variable gespeichert. Ich habe an einigen Stellen (Do, stackexchange) gelesen, dass ich so etwas tun musste:

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

Dies funktioniert nicht sofort mit einem system_settings_form ($ form). Ein var_dump zeigt dies nach dem Speichern:

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

Daran können Sie erkennen, dass "Format" korrekt gespeichert wird, "Wert" jedoch nicht. Was vermisse ich?

Auch wenn es einen besseren Weg gibt, sagen Sie es bitte.

Mrryanjohnston
quelle

Antworten:

28

Folgendes hat für mich funktioniert; #default_value erwartet eine Zeichenfolge, das text_format-Formularelement wird jedoch als Array gespeichert.

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