Каков наилучший способ удалить поле Drupal 7 из типа контента, определенного через графический интерфейс? Я хочу использовать hook_update_N, чтобы изменения могли распространяться на несколько серверов при запуске update.php. Однако я не могу найти решение. db_drop_table () будет иметь смысл для пользовательских схем, но не для типа / поля содержимого, определенного через графический интерфейс.
21
Ответы:
Есть две функции API для удаления полей:
field_delete_field
Удалить все поле (все экземпляры поля)field_delete_instance
Чтобы удалить только экземпляр поля - то есть, как он прикреплен к объекту.Если вы не хотите повторно использовать поле, может быть, будет немного чище удалить все поле, а не удалять только его экземпляр в рассматриваемом типе содержимого. Только ты можешь быть судьей этого.
источник
Да, field_delete_instance () - это функция для удаления экземпляров полей.
Обратите внимание, что
field_delete_instance()
автоматические вызовы,field_delete_field()
если нет оставшихся экземпляров, такfield_delete_instance()
что, скорее всего, все, что вам когда-либо понадобится._update_7000_field_delete_instance()
предназначен для основных функций обновления. Пример: в функции обновленияx_update_7000()
вы используетеfield_delete_instance()
. Затемx_update_7001()
вы изменяете{field_config}
таблицу противоречивым образом и,field_delete_instance()
очевидно, также должны быть изменены.Но теперь
x_update_7000()
вызов tofield_delete_instance()
приведет к ошибке, потому что таблица все еще в старой структуре. Однако ситуация для добавленных модулей отличается, так как они всегда должны выполняться после всех обновлений ядра и, следовательно, должны работать с самой последней версией ядра.Но это шаблон, который вы можете использовать для своих собственных функций API, которые вы используете в функциях обновления.
Кроме того, эти функции _update не выполняют ловушки, потому что результат непредсказуем (например, потому что модуль, для которого выполняется обновление, может быть отключен).
источник