Неможливо видалити тип вмісту функції після видалення функції


Відповіді:


15

Рішення

Використовуючи hook_uninstall()файл FEATURE_NAME.install та змінивши статус типу вмісту, система вважає, що це розблокований спеціальний тип вмісту.

Я розмістив це також на 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();

}

Це призведе до появи кнопки "Видалити" для цього типу вмісту, тому ви можете видалити його з адміністратора.

Сподіваюся, це комусь допоможе!


1
Для уточнення це тип вмісту не видаляє; це робить посилання "видалити" доступним на сторінці переліку типів вмісту. Дякую @ Ivanhoe123!
sum1ejack

1
Крім того, я не зміг цього зробити, поки модуль моїх функцій увімкнено, але після відключення та видалення (я використовував удар) це працювало чудово. Ярлик: використовуйте модуль devel, скидаючи вміст цієї функції в / devel / php. Для програмного видалення типу вмісту додайте node_type_delete($ctype); після запиту в циклі for.
sum1ejack

Дякуємо за цей код. Побачивши цей код, я відредагував свою базу даних за допомогою phpMyAdmin та відредагував таблицю "node_type". Тоді я знайшов тип контексту, який я хотів видалити та встановив значення "Користувацьке" на "1". І остаточно я видалив її з Адміністрації Друпалу.
ANDiTKO

2
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
Marco Lazzeri

@ Рішення MarcoLazzeri прекрасно працювало для мене і було набагато краще, ніж потрібно було оновити свій функціональний модуль просто для його видалення.
пончик

11

Для мене рішенням було завантажити сторінку видалення вручну, оскільки на сторінці типів вмісту немає посилання "видалити". Для цього просто потрібно створити URL-адресу самостійно, дотримуючись тієї самої структури URL-адреси, що й сторінку видалення для інших типів вмісту:

адміністратор / структура / типи / керування / YOUR_CONTENT_TYPE_MACHINE_NAME / видалити

Це вивів сторінку підтвердження видалення вмісту, яка потім дозволила мені видалити тип вмісту.

Для ознайомлення дивіться цю тему на Drupal.org:

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

З повагою,

@cmsdave


Я просто змінив посилання типу вмісту дисплея в кінці, щоб видалити, і міг видалити тип вмісту без проблем. Це рішення працює!
cateye

Примітка . Перш ніж це спрацювало, мені довелося відредагувати .infoфайл функції та видалити тип вмісту, тоді він фактично видалиться.
Данканму

3

Вищеописаний метод не видаляє таксономії, але цього можна досягти, додавши наступне після відключення та видалення модуля:

// 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

Ще одне рішення, яке працювало для мене безпосередньо в базі даних на моєму сайті розробки. Не забудьте завжди робити резервну копію вашої бази даних.

Щоб видалити тип вмісту вручну, створений функцією №16, що пропонує Неджо, це наступне:

  • Вимкніть функцію. Іноді у мене виникають проблеми з цим - функція не вимикається. У цьому випадку видаліть код модуля функції.
  • Визначте назву машини типу вмісту, який потрібно видалити, наприклад, "mytype".
  • У базі даних поверніть значення таблиці node_type до значень за замовчуванням, як якщо б тип вмісту створювався вручну через інтерфейс користувача:

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

  • Очистіть кеші, щоб забезпечити доступність змін типу вмісту.
  • Видаліть тип вмісту через інтерфейс користувача в адміністраторі / структурі / типах.

0

Якщо ви використовуєте модуль admin_menu , ви все одно побачите посилання для видалення у спадному меню Структура / Типи вмісту / [назва типу вмісту] / Видалити, навіть якщо вони не відображаються на сторінці типів вмісту.

Я б сказав, що цілком безпечно використовувати це посилання для видалення, якщо ви впевнені, що більше немає інших посилань на цей тип вмісту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.