it-swarm-eu.dev

Nejlepší způsob, jak zrušit pole z typu obsahu

Jaký je nejlepší způsob, jak odstranit pole Drupal 7 z typu obsahu definovaného pomocí GUI? Chci použít hook_update_N, aby se změny mohly při spuštění aktualizace.php šířit na více serverů. Nemohu najít řešení. Db_drop_table () by pro mě mělo smysl pro vlastní definovaná schémata, ale ne pro typ/pole obsahu definované pomocí GUI.

21
amateur barista

Pole lze vymazat dvěma funkcemi api:

Pokud nechcete pole znovu použít, mohlo by být trochu čistší vymazat celé pole, namísto pouze odstranit jeho instanci u daného typu obsahu. Pouze vy můžete být soudcem.

18
googletorp

Ano, field_delete_instance () je funkce pro odstranění instancí pole.

Všimněte si, že field_delete_instance() automaticky volá field_delete_field(), pokud neexistují žádné zbývající instance, takže field_delete_instance() je s největší pravděpodobností vše, co kdy budete potřebovat.

_update_7000_field_delete_instance() je určen pro základní funkce aktualizace. Příklad: ve aktualizační funkci x_update_7000() používáte field_delete_instance(). Potom v x_update_7001() změníte tabulku {field_config} Nekonzistentním způsobem a zjevně je také třeba změnit field_delete_instance().

Nyní by však volání x_update_7000() na field_delete_instance() mělo za následek chybu, protože tabulka je stále ve staré struktuře. Situace u přispěných modulů je však jiná, protože by měly být vždy provedeny po všech základních aktualizacích, a proto je třeba pracovat s nejnovější verzí jádra.

Je to však vzor, ​​který byste mohli chtít použít pro své vlastní funkce API, které používáte v aktualizačních funkcích.

Navíc tyto funkce _update nespouštějí háčky, protože výsledek nelze předvídat (například protože modul, pro který je aktualizace spuštěna, může být deaktivován).

9
Berdir