Изменить тип и длину поля без потери данных drupal 7

Дата публикации: 30 01 2015 Автор: PazitiFF
Настал очередной день, когда я убедился в крутости друпала. Как то раз клиент пожелал изменить обычное текстовое поле, оганиченное 255 символами, на текстовое поле без ограничений. Всё это нужно было сделать без потери данных и скриптом, так как нод накопилось уже очень много. Итак, решение оказалось очень простым: Проверяем, есть ли такой field. Обновляем данные в таблице поля, на LONGTEXT. Обновляем таблицу field_config. Далее выставляем новые параметры поля и вызываем field_update_field. После данных манипуляций, необходимо пройти в настройки поля и пересохранить значение widget-type. Всё, обновление закончено!
function custom_module_update_7001(&$sandbox) {
 
  if (field_info_field('field_custom_text')) {
    db_query('ALTER TABLE field_data_field_custom_text CHANGE field_custom_text_value field_custom_text_value LONGTEXT');
    db_query('ALTER TABLE field_revision_field_custom_text CHANGE field_custom_text_value field_custom_text_value LONGTEXT');
    db_query("UPDATE field_config SET type = 'text_long' WHERE field_name = 'field_custom_text' ");
 
    $field = array(
      'field_name' => 'field_custom_text',
      'type' => 'text_long',
      'cardinality' => 1,
      'settings' => array(
        'max_length' => 0,
      ),
    );
    field_update_field($field);
  }
}

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Вы можете использовать подсветку исходного кода следующими тегами: <code>, <blockcode>, <apache>, <bash>, <css>, <drupal6>, <html5>, <javascript>, <mysql>, <php>.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.