【问题标题】:WYSIWYG in custom field in drupal 7drupal 7中自定义字段中的所见即所得
【发布时间】:2011-06-05 08:13:00
【问题描述】:

我正在尝试在 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 和 format),而不是带有 2 个键(值和格式)的 body_filter 数组。

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

谢谢。

【问题讨论】:

    标签: drupal drupal-7 drupal-fapi


    【解决方案1】:

    我遇到了同样的问题,并找到了解决方案,感谢 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;
            }
            }
        }
    }
    

    希望这会有所帮助!

    【讨论】:

    • 非常感谢您发布此解决方案。我一直在寻找解决办法!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 据我了解,Drupal 实际上是自动保存数据。 Drupal 通过检查 db 字段名称(如在 module.install 文件中创建的)与表单中的字段名称来执行“魔术”。这发生在 field_sql_storage_field_storage_write()
      • 啊,你正在创建一个字段。是的,那么这些值会根据架构自动保存。 但是,您可以通过实现api.drupal.org/api/drupal/modules--field--field.api.php/… 来更改它,并根据您的架构将数组拆分为两个单独的值。另外,你可以看看 text.module 是如何做到的,它有同样的“问题”,但是我无法弄清楚。
      猜你喜欢
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多