Лучший способ удалить поле из типа содержимого

Каков наилучший способ удалить поле Drupal 7 из типа контента, определенного через графический интерфейс? Я хочу использовать hook_update_N, чтобы изменения могли распространяться на несколько серверов при запуске update.php. Однако я не могу найти решение. db_drop_table () будет иметь для меня смысл для настраиваемых схем, но не для типа /поля содержимого, определенного через графический интерфейс.

19 голосов | спросил amateur barista 8 J000000Friday11 2011, 08:12:27

2 ответа


16

Есть две функции api для удаления полей:

  • field_delete_field Чтобы удалить все поле (все экземпляры поля)
  • field_delete_instance Чтобы удалить только экземпляр поля - то, как он привязан к сущности.

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

ответил googletorp 8 J000000Friday11 2011, 12:25:04
9

Да, 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() в field_delete_instance() приведет к ошибке, потому что таблица все еще находится в старой структуре. Однако ситуация с предоставленными модулями различна, так как они всегда должны выполняться после всех основных обновлений и, следовательно, должны работать с последней версией ядра.

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

Кроме того, эти функции _update не выполняют крючки, потому что результат не предсказуем (например, поскольку модуль, для которого выполняется обновление, может быть отключен).

ответил Berdir 9 J000000Saturday11 2011, 00:02:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132