Załóżmy, że mam typ zawartości Person
z polami: Name
, Age
,Email
Ten typ zawartości jest kontrolowany przez funkcję o nazwie, test
dzięki czemu mogę sterować źródłem i przekazywać go do witryny na żywo.
Mój przepływ pracy wygląda następująco:
- Dodam nowe pole o
Person
nazwiePhone
- lokalnie robię:
drush fu test -y
- Edytuję,
test.info
aby zwiększyć numer wersji - Zatwierdzam zmiany w moim repozytorium
- Przesyłam tę funkcję do działającej witryny (kopiuję pliki funkcji)
- na stronie na żywo robię:
drush fr test -y
- na stronie na żywo robię:
drush cc all
Następnie nowe pole pojawi się w aktywnej witrynie Person
.
Jeśli w pierwszym kroku usunę pole Person
pola nie zostanie usunięte z działającej witryny. Jak to rozwiązać? Nie chcę ręcznie usuwać go z interfejsu użytkownika w witrynie na żywo.
Czy ten przepływ pracy jest prawidłowy?
Odpowiedzi:
To jest obosieczny miecz, taki jest, aby zapobiec usuwaniu danych, co zawsze jest dobrą rzeczą. Naprawdę nie ma nic do rozwiązania, jest to oczekiwane zachowanie.
To ten sam przepływ pracy, którego używamy i robiliśmy od ponad roku, i działa naprawdę dobrze. Powiedziałbym, że to prawda, ale to bardzo subiektywna odpowiedź.
źródło
drush field-delete field
Prawidłowy sposób na usunięcie zawartości utworzonej przez Funkcje to hook_update_N (który powinien zostać zaimplementowany w pliku
your_module.install
).Główną ideą funkcji jest zarządzanie konfiguracją za pomocą kodu. Używanie
hook_update_N
jest z tym zgodne, ponieważ usuwanie pola odbywa się w kodzie (którym można zarządzać za pomocą kontroli wersji) - podczas gdy równoważne poleceniedrush field-delete field
nie jest wywoływane z kodu zarządzanego; jest to osobny krok wiersza poleceń, który musisz wykonać (i pamiętać, aby wykonać).źródło
drush field-delete field
zadziała dobrze?hook_update()
jest z tym zgodne, ponieważ usuwanie pola odbywa się w kodzie (którym można zarządzać za pomocą kontroli wersji) - podczas gdy komenda drush nie jest wywoływana z kodu zarządzanego; jest to osobny krok wiersza poleceń, który musisz wykonać (i pamiętać, aby wykonać).hook_update_N
.Utwórz nowy plik o nazwie „twoja_nazwa_funkcji.install”
Wewnątrz pliku deklaruj hook_update_N , możesz użyć field_delete_field () i jako nazwę podać nazwę pola, które chcesz usunąć.
Uruchom update.php, a pola zostaną usunięte.
źródło
Jeśli używasz
field_phone
w innych obszarach, możesz po prostu usunąć go ze swojego typu treści Osoba, ale nie usunąć go całkowicie ze swojej witryny. Utwórz ręcznieYOUR_FEATURE_NAME.install
plik w folderze funkcji w następujący sposób:Jeśli usuwasz to z akapitu osoby zamiast typu zawartości osoby, możesz zmienić pierwszą instrukcję warunkową na coś takiego:
źródło