Nie można usunąć typu zawartości funkcji po odinstalowaniu funkcji

24

Kwestia

Odinstalowanie funkcji, która tworzy typ zawartości, ukrywa link „Usuń” w admin/structure/types.

Wydanie na Drupal.org

Aram Boyajyan
źródło

Odpowiedzi:

15

Rozwiązanie

Użycie hook_uninstall()pliku FEATURE_NAME.install i zmiana stanu typu zawartości, aby system uznał, że jest to odblokowany, niestandardowy typ zawartości.

Opublikowałem to również na d.org .

<?php
/**
 * Implements hook_uninstall().
 */
function FEATURE_NAME_uninstall() {

  // List custom content types added by this feature
  $custom_ctypes = array(
    'blog',
  );

  // Go through each and unlock the content type
  foreach ($custom_ctypes as $ctype) {
    db_query("UPDATE {node_type} SET `custom` = 1, locked = 0 WHERE type = :ctype", array(':ctype' => $ctype));
  }

  // Clean Drupal cache; this is necessary for the "Delete" link to appear
  // next to the content type created by the feature.
  drupal_flush_all_caches();

}

Spowoduje to, że przycisk „Usuń” pojawi się dla tego typu zawartości, dzięki czemu będziesz mógł usunąć go od administratora.

Mam nadzieję, że to komuś pomoże!

Aram Boyajyan
źródło
1
Aby to wyjaśnić, nie powoduje to usunięcia typu zawartości; udostępnia link „usuń” na stronie z listą typów treści. Dzięki @ Ivanhoe123!
doub1ejack
1
Nie byłem w stanie tego zrobić, gdy mój moduł funkcji był włączony, ale po wyłączeniu i odinstalowaniu (użyłem drush) działało to pięknie. Skrót: użyj modułu devel, upuszczając zawartość tej funkcji do / devel / php. Aby programowo usunąć typ zawartości, dodaj node_type_delete($ctype); po zapytaniu w pętli for.
doub1ejack
Dzięki za ten kod. Po zobaczeniu tego kodu dokonałem edycji mojej bazy danych przy użyciu phpMyAdmin i edytowałem tabelę „typ_węzła”. Potem znalazłem typ kontektu, który chciałem usunąć, i ustawiłem wartość „Niestandardowa” na „1”. I ostatecznie usunąłem go z administracji Drupala.
ANDiTKO
2
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
Marco Lazzeri
@ Rozwiązanie MarcoLazzeri działało dla mnie idealnie i było o wiele lepsze niż konieczność aktualizacji modułu funkcji, aby go odinstalować.
pączek
11

Dla mnie rozwiązaniem było ręczne załadowanie strony usuwania, ponieważ na stronie typów treści nie ma linku „usuń”. Aby to zrobić, musisz samodzielnie utworzyć adres URL, postępując zgodnie z tą samą strukturą adresu URL, co strona usuwania dla innych typów treści:

admin / structure / types / manage / YOUR_CONTENT_TYPE_MACHINE_NAME / delete

Spowodowało to wyświetlenie strony z potwierdzeniem usunięcia typu zawartości, co pozwoliło mi usunąć typ zawartości.

Dla odniesienia zobacz ten wątek na Drupal.org:

https://drupal.org/node/1055460#comment-7297680

Pozdrowienia,

@cmsdave

cmsdave
źródło
Właśnie zmieniłem link wyświetlanego typu treści na końcu, aby go usunąć i mogłem usunąć typ zawartości bez problemu. To rozwiązanie działa!
cateye
Uwaga : zanim to zadziała, musiałem edytować .infoplik funkcji i usunąć typ zawartości, a następnie faktycznie go usunąć.
Duncanmoo,
3

Powyższa metoda nie usuwa taksonomii, ale można to osiągnąć, dodając następujące elementy po wyłączeniu i odinstalowaniu modułu:

// Delete taxonomies.
$machine_names = array('taxonomy_a', 'taxonomy_b');
foreach ($machine_names as $machine_name) {
  $taxonomy = taxonomy_vocabulary_machine_name_load($machine_name);
  taxonomy_vocabulary_delete($taxonomy->vid);
}
Juampy NR
źródło
1

Kolejne rozwiązanie, które działało dla mnie bezpośrednio do bazy danych w mojej witrynie programistycznej. Pamiętaj, aby zawsze wykonać kopię zapasową bazy danych.

Aby ręcznie usunąć typ zawartości utworzony przez funkcję # 16, sugeruje Nedjo :

  • Wyłącz tę funkcję. Czasami mam z tym problemy - funkcja się nie wyłącza. W takim przypadku usuń kod modułu funkcji.
  • Określ nazwę komputera typu zawartości, który chcesz usunąć, np. „Mój typ”.
  • W bazie danych przywróć wartości tabeli typ_węzła do wartości domyślnych, tak jakby typ zawartości został utworzony ręcznie za pomocą interfejsu użytkownika:

mysql> UPDATE node_type SET module = 'node', custom = 1, modified = 1, locked = 0 WHERE type = 'mytype';

  • Wyczyść pamięć podręczną, aby zapewnić zmianę typu zawartości.
  • Za pomocą interfejsu użytkownika w admin / structure / types usuń typ zawartości.
Cayerdis
źródło
0

Jeśli korzystasz z modułu admin_menu , nadal zobaczysz linki usuwania w menu rozwijanym Struktura / Typy treści / [nazwa typu zawartości] / Usuń, nawet jeśli nie są wyświetlane na stronie typów zawartości.

Powiedziałbym, że korzystanie z tego linku usuwania jest całkiem bezpieczne, jeśli masz pewność, że nie ma już innych odniesień do tego typu treści.

Mirsoft
źródło