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.