WupIWYG在drupal 7中的自定义字段中

时间:2011-06-05 08:13:00

标签: drupal drupal-7 drupal-fapi

我正在尝试在drupal 7中构建一个自定义字段。除了来自wysiwyg字段之外,evrything工作得很好。 我正在使用下一个代码来构建一个WYSIWYG元素:

$element['my_body'] = array(
  '#title' => t('Editor'),
  '#type' => 'text_format',
  '#tree' => true,
  '#rows' => 20,
  '#format' => 'filtered_html',
 );

当它不是wysiwyg(常规textarea)时,所有保存都没问题,但是在我将其更改为text_format之后,drupal将字段的值作为带有2个键(值和格式)的数组获取,并且这在drupal保存时出错该领域的价值观。 尽管如此,drupal期望获得的是两个不同的值(body_filter和format),而不是具有2个键(值和格式)的body_filter数组。

任何人都可以给我一个提示如何解决这个问题(在google和drupal.org上找不到任何相关内容)?

感谢。

3 个答案:

答案 0 :(得分:4)

由于Berdir的提示,我遇到了同样的问题,并找到了解决方案。

正如您所提到的,'text_format'返回一个包含两个值的数组:

$items[0]['MY_WYSIWYG_FIELD'] = array(
    'value' => 'some text.',
    'format' => 'filtered_html'
);

使用hook_field_presave()我能够准备值以将其保存到我的数据库中。

由于我不想保存格式值, 我只是从['MY_WYSIWYG_FIELD']数组中提取文本值,并用提取的值替换数组:

$items[0]['MY_WYSIWYG_FIELD'] = 'some text.';

我的钩子看起来像这样:

function MY_FIELD_MODULE_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) {
    if ($field['type'] == 'MY_FIELD_TYPE') {
    foreach ($items as $delta => $item) {
    if (isset($item['MY_WYSIWYG_FIELD'])) {
        $value = $item['MY_WYSIWYG_FIELD']['value'];
        $items[$delta]['MY_WYSIWYG_FIELD'] = $value;
        }
        }
    }
}

希望这有帮助!

答案 1 :(得分:1)

text_format类型字段的值为$form_state['values']['my_body']['value']

答案 2 :(得分:0)

是的,text_format字段的值是一个数组,就是它应该是这样的。

Drupal不会自动保存,你在哪里以及如何保存它?您只需修复该代码即可使用数组。