#drupal #drupal-7
#drupal #drupal-7
Вопрос:
У меня есть поле, которое вводит текст, и я хочу преобразовать его в список типов (текст) в Drupal 7. Я не могу просто изменить значение, так как оно мне не позволит, есть ли простой способ сделать это?
Ответ №1:
Нет простого способа, нет. Насколько я могу судить, это ручные изменения в базе данных, которые вам нужно будет внести:
-
В
field_config
изменитеtype
столбец на ‘list_text’, аmodule
столбец на ‘list’ для вашего поля. -
Затем вам нужно будет изменить сериализованный массив в
data
столбце, чтобы он соответствовал типу списка (на данный момент, очевидно, у него будут настройки для типов текста). Здесь нет простого способа показать вам, как это сделать, лучшим способом было бы сравнить сериализованный массив с массивом для другого поля типа списка, тогда вы сможете увидеть, какие значения вам нужно удалить / изменить. Вallowed_values
массив подsettings
будет, где вы помещаете значения вашего списка. Как только это изменится, повторно сериализуйте его и поместите обратно вdata
столбец для вашего поля. -
После этого удалите все столбцы из ваших полей
field_data
иfield_revision
таблиц, которые начинаются сfield_myfield_
, но неfield_myfield_value
являются (тип списка по-прежнему нуждается в этом столбце). -
Добавьте индекс к этим таблицам для
value
столбца. -
Очистите свои кэши
Я должен предупредить, что это совершенно не проверено, просто кажется, что имеет смысл смотреть на структуры таблиц, было бы неплохо сделать резервную копию трех таблиц, с которыми вы будете играть, на всякий случай.
Комментарии:
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 🙂