将类型为“ text_format”的字段保存为系统设置变量


19

我试图让我的内容编辑者可以更改自定义模块的变量。此变量可以具有html。我不想让他们具有HTML的任何知识,所以我想让他们能够使用我们的所见即所得(由CKEditor模块提供的CKEditor)。但是,到目前为止,该数据尚未保存为变量。我已经在几个地方(Do,stackexchange)阅读过,我需要这样做:

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

对于system_settings_form($ form),这不能立即使用。保存后,var_dump会显示以下内容:

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

由此可见,“格式”可以正确保存,但“值”不能正确保存。我想念什么?

另外,如果有更好的方法可以做到这一点,请告知。

Answers:


28

以下对我有用:#default_value需要一个字符串,但是text_format表单元素存储为数组。

$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,
); 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.