我正在尝试在 drupal 7 中构建自定义字段。除了所见即所得字段之外,一切都工作得很好。 我正在使用下一个代码来构建所见即所得元素:
$element['my_body'] = array(
'#title' => t('Editor'),
'#type' => 'text_format',
'#tree' => true,
'#rows' => 20,
'#format' => 'filtered_html',
);
当它不是所见即所得(常规文本区域)时,所有保存都很好,但是在我将其更改为text_format之后,drupal将字段的值获取为带有2个键(值和格式)的数组,这在drupal保存时出错字段的值。 据我了解,drupal 期望获得的是两个不同的值(body_filter 和格式),而不是具有 2 个键(值和格式)的 body_filter 数组。
任何人都可以给我提示如何解决这个问题(在 google 和 drupal.org 中找不到任何相关内容)?
谢谢。
最佳答案
我遇到了同样的问题,并找到了解决方案,感谢 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.';
我的钩子(Hook)看起来像这样:
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;
}
}
}
}
希望这有帮助!
关于drupal - drupal 7 自定义字段中的所见即所得,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6241710/