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


Відповіді:


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.