WYSIWYG в настраиваемом поле в друпале 7 - PullRequest
2 голосов
/ 05 июня 2011

Я пытаюсь создать настраиваемое поле в Drupal 7. Все работает просто отлично, кроме как из поля wysiwyg. Я использую следующий код для создания элемента WYSIWYG:

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

Когда не все wysiwyg (обычные текстовые области) все сохранения идут нормально, но после того, как я изменяю его на text_format, drupal получает значение поля в виде массива с 2 ключами (значение и формат), и это делает ошибку при сохранении drupal значения поля. Насколько я понимаю, Drupal ожидает получить два различных значения (body_filter и format), а не массив body_filter с 2 ключами (value и format).

Кто-нибудь может дать мне подсказку, как решить эту проблему (не можете найти что-либо релевантное в google и drupal.org)?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 марта 2013

Я столкнулся с той же проблемой и нашел решение благодаря подсказке Бердира.

Как вы упомянули, 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 голос
/ 13 июня 2012

Значения полей типа text_format имеют вид $form_state['values']['my_body']['value'].

0 голосов
/ 05 июня 2011

Да, значение поля text_format - это массив, как и должно быть.

Drupal не сохраняет что-то автоматически, где и как вы сохраняете это? Вам просто нужно исправить этот код для работы с массивом.

...