преобразовать текст поля в список (текст) drupal 7

#drupal #drupal-7

#drupal #drupal-7

Вопрос:

У меня есть поле, которое вводит текст, и я хочу преобразовать его в список типов (текст) в Drupal 7. Я не могу просто изменить значение, так как оно мне не позволит, есть ли простой способ сделать это?

Ответ №1:

Нет простого способа, нет. Насколько я могу судить, это ручные изменения в базе данных, которые вам нужно будет внести:

  1. В field_config измените type столбец на ‘list_text’, а module столбец на ‘list’ для вашего поля.

  2. Затем вам нужно будет изменить сериализованный массив в data столбце, чтобы он соответствовал типу списка (на данный момент, очевидно, у него будут настройки для типов текста). Здесь нет простого способа показать вам, как это сделать, лучшим способом было бы сравнить сериализованный массив с массивом для другого поля типа списка, тогда вы сможете увидеть, какие значения вам нужно удалить / изменить. В allowed_values массив под settings будет, где вы помещаете значения вашего списка. Как только это изменится, повторно сериализуйте его и поместите обратно в data столбец для вашего поля.

  3. После этого удалите все столбцы из ваших полей field_data и field_revision таблиц, которые начинаются с field_myfield_ , но не field_myfield_value являются (тип списка по-прежнему нуждается в этом столбце).

  4. Добавьте индекс к этим таблицам для value столбца.

  5. Очистите свои кэши

Я должен предупредить, что это совершенно не проверено, просто кажется, что имеет смысл смотреть на структуры таблиц, было бы неплохо сделать резервную копию трех таблиц, с которыми вы будете играть, на всякий случай.

Комментарии:

1. Мне также пришлось изменить тип виджета, что вы можете сделать, либо отредактировав данные непосредственно field_config_instance , либо отредактировав поле и выбрав «Выбрать» или «Флажки» в качестве типа виджета. Также в качестве подсказки я обнаружил, что проще всего сначала создать поле выбора и использовать эти сериализованные данные для редактирования существующего столбца. По сути, вам нужно только изменить имя (и длину символов для этих записей) и идентификатор.

Ответ №2:

Я только что написал некоторый код, который должен справиться с этим для вас в моем вспомогательном модуле: http://cgit.drupalcode.org/helper/tree/lib/FieldChangeHelper.php?h=7.x-1.x

 FieldChangeHelper::changeType('my_text_field_name', 'list_text');
  

Он должен нормально работать для большинства простых случаев и полей, но должен быть тщательно протестирован. В настоящее время он также не обновляет какие-либо параметры форматирования полей, поэтому после выполнения этого вам нужно будет просмотреть конфигурацию отображения поля.

Комментарии:

1. Я ничего не вижу здесь о настройке внешних ключей. На этом я и застрял. Учитывает ли это перемещение MUL из значения в формат?

2. Ну, я попробовал, и внешние ключи действительно обновлены. Я до сих пор понятия не имею, как заставить это работать в моем собственном пользовательском модуле, но, думаю, я могу использовать это сейчас. На помощь приходит DaveReid 🙂