drupal - drupal 7 自定义字段中的所见即所得

标签 drupal drupal-7 drupal-fapi

我正在尝试在 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/

相关文章:

Drupal:重用多面搜索 block

forms - 在任何页面中呈现评论表单

drupal - 将日期数组保存到数据库

drupal - drupal中表单数组的 '#programmed'属性是什么意思?

drupal - 如何在 drupal 8 自定义模块中编写自动加载

drupal - 按类别对内容进行分组 - Drupal

drupal - 如何通过 theme-setting.php 以 drupal 形式正确添加 FILE 字段?

drupal - 为选择列表显示标签给定键

php - 如何在 drupal 中对自定义实体定义和执行 CRUD

drupal - 在Drupal 7表单API中-如何创建 "button"类型的输入(不是 "submit")?