タイプ「text_format」のフィールドをシステム設定変数として保存する


19

コンテンツエディターにカスタムモジュールの変数を変更する機能を提供しようとしています。この変数にはhtmlを含めることができます。HTMLの知識は必要ありませんので、wysiwyg(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

これから、「format」は正しく保存されますが、「value」は保存されないことがわかります。私は何が欠けていますか?

また、これを行うためのより良い方法があれば、教えてください。

回答:


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,
); 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.