コンテンツエディターにカスタムモジュールの変数を変更する機能を提供しようとしています。この変数はhtmlを持つことができます。私は彼らにHTMLの知識を要求することはしたくないので、wysiwyg(CKEditorモジュールによって提供されるCKEditor)を自由に使えるようにしたいと思います。ただし、現時点では、データは変数として保存されません。私はいくつかの場所(D.o、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
これから、「フォーマット」は正しく保存されますが、「値」は保存されないことがわかります。何が欠けていますか?
また、これを行うより良い方法がある場合は、教えてください。
以下は私のために働いた; #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,
);