我正在尝试在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上找不到任何相关内容)?
感谢。
答案 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不会自动保存,你在哪里以及如何保存它?您只需修复该代码即可使用数组。