Programowo utworzyłem typ zawartości podczas instalacji modułu (przy użyciu konfiguracji pamięci masowej w terenie).
Chcę usunąć ten typ zawartości podczas odinstalowywania modułu.
Czy można to zrobić w Drupal 8?
Upewnij się tylko, że typ węzła zależy od twojego modułu, a następnie Drupal usunie go automatycznie.
Zobacz na przykład node.type.book.yml w module książki, jest to odpowiednia część:
dependencies:
enforced:
module:
- book
Pamiętaj, że użytkownicy będą musieli usunąć całą zawartość tego typu, zanim będą mogli odinstalować moduł.
Wydaje się, że to dla mnie robi.
$content_type = \Drupal::entityManager()->getStorage('node_type')->load('MACHINE_NAME_OF_TYPE');
$content_type->delete();
drupal snippet --code='$content_type = \Drupal::entityManager()->getStorage("node_type")->load("MACHINE_NAME_OF_TYPE"); $content_type->delete();'
Nie mając wystarczających środków do skomentowania, umieszczę to tutaj:
@Berdir, wydaje mi się, że wymuszenie modułu w pliku node.type.custom.yml nie jest wystarczające, aby wymusić usunięcie węzłów podczas odinstalowywania
W moim przypadku typ zawartości jest usuwany podczas odinstalowywania modułu. Jednak usunięcie niestandardowej treści (węzłów) nie jest wymuszone. Aby to osiągnąć, moduł niestandardowy powinien wdrożyć
ModuleUninstallValidatorInterface
.Po wdrożeniu niestandardowego modułu nie można odinstalować przed usunięciem niestandardowych węzłów. Pole wyboru zostanie dezaktywowane.
Zamiast implementować interfejs, robię go brudnym, usuwając węzły w
hook_uninstall()
:źródło
Aby uruchomić akcję po odinstalowaniu modułu, musisz zaimplementować go
hook_uninstall
w*.install
pliku modułu . Przed usunięciem typu zawartości możesz upewnić się, że wszystkie węzły tego typu treści również zostały usunięte. Wreszcie po odinstalowaniu modułu i usunięciu typu zawartości nie zapomnij wyeksportować zaktualizowanej konfiguracji.źródło
bundle
odpowiedziMACHINE_NAME_OF_TYPE
, tak jak w przypadku odpowiedzi opartej na zapytaniu o identyfikator węzła , czy nie? Mam na myśli, że wydaje się to nieco kosztowne (jeśli jest wiele identyfikatorów NID) i chciałbym skorzystać z tego rozwiązania, jeśli to możliwe.