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


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!


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


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);
}

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.

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.