Jaki jest najlepszy sposób na usunięcie pola Drupal 7 z typu zawartości zdefiniowanego za pomocą GUI? Chcę użyć hook_update_N, aby zmiany mogły być propagowane na wiele serwerów po uruchomieniu update.php. Jednak nie mogę znaleźć rozwiązania. db_drop_table () miałoby dla mnie sens dla niestandardowych schematów, ale nie dla typu / pola treści zdefiniowanego przez GUI.
21
Odpowiedzi:
Istnieją dwie funkcje interfejsu API do usuwania pól:
field_delete_field
Aby usunąć całe pole (wszystkie wystąpienia pola)field_delete_instance
Aby usunąć tylko instancję pola - w ten sposób jest on dołączony do encji.Jeśli nie chcesz ponownie używać tego pola, usunięcie całego pola może być nieco czystsze, zamiast usuwać tylko jego instancję dla danego typu zawartości. Tylko Ty możesz być tego sędzią.
źródło
Tak, field_delete_instance () to funkcja służąca do usuwania instancji pól.
Pamiętaj, że
field_delete_instance()
automatycznie dzwoni,field_delete_field()
jeśli nie ma już pozostałych wystąpień, więcfield_delete_instance()
najprawdopodobniej jest to wszystko, czego kiedykolwiek potrzebujesz._update_7000_field_delete_instance()
jest przeznaczony do podstawowych funkcji aktualizacji. Przykład: w funkcji aktualizacjix_update_7000()
używaszfield_delete_instance()
. Następniex_update_7001()
zmieniasz{field_config}
tabelę w niekonsekwentny sposób ifield_delete_instance()
oczywiście również musisz ją zmienić .Ale teraz
x_update_7000()
wywołaniefield_delete_instance()
spowoduje błąd, ponieważ tabela jest nadal w starej strukturze. Jednak sytuacja w przypadku modułów wnoszonych jest inna, ponieważ powinny one zawsze być wykonywane po wszystkich aktualizacjach podstawowych i dlatego muszą działać z najnowszą wersją podstawową.Ale jest to wzorzec, którego możesz chcieć użyć do własnych funkcji API, których używasz w funkcjach aktualizacji.
Ponadto te funkcje _update nie wykonują przechwyceń, ponieważ wynik nie jest przewidywalny (na przykład dlatego, że moduł, dla którego aktualizacja jest uruchamiana, może być wyłączony).
źródło