Guardar un campo de tipo 'text_format' como variable de configuración del sistema

19

Estoy intentando dar a mis editores de contenido la capacidad de cambiar una variable para un módulo personalizado. Esta variable puede tener html. No quiero exigirles que tengan ningún conocimiento de HTML, por lo que quiero darles la capacidad de tener nuestro wysiwyg (CKEditor proporcionado por el módulo CKEditor) a su disposición. Sin embargo, a partir de ahora, los datos no se guardan como una variable. He leído en algunos lugares (Do, stackexchange) que necesitaba hacer algo como esto:

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

Esto no funciona listo para usar con un system_settings_form ($ form). Un var_dump muestra esto después de guardar:

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

A partir de esto, puede ver que el "formato" se guarda correctamente, pero el "valor" no. ¿Qué me estoy perdiendo?

Además, si hay una mejor manera de hacerlo, dígaselo.

mrryanjohnston
fuente

Respuestas:

28

Lo siguiente funcionó para mí; el #default_value espera una cadena pero el elemento de forma text_format se almacena como una matriz.

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