Проблема
Видалення функції, яка створює тип вмісту, приховує посилання "Видалити" на admin/structure/types
.
Видалення функції, яка створює тип вмісту, приховує посилання "Видалити" на admin/structure/types
.
Відповіді:
Використовуючи 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();
}
Це призведе до появи кнопки "Видалити" для цього типу вмісту, тому ви можете видалити його з адміністратора.
Сподіваюся, це комусь допоможе!
node_type_delete($ctype);
після запиту в циклі for.
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
Для мене рішенням було завантажити сторінку видалення вручну, оскільки на сторінці типів вмісту немає посилання "видалити". Для цього просто потрібно створити URL-адресу самостійно, дотримуючись тієї самої структури URL-адреси, що й сторінку видалення для інших типів вмісту:
адміністратор / структура / типи / керування / YOUR_CONTENT_TYPE_MACHINE_NAME / видалити
Це вивів сторінку підтвердження видалення вмісту, яка потім дозволила мені видалити тип вмісту.
Для ознайомлення дивіться цю тему на Drupal.org:
https://drupal.org/node/1055460#comment-7297680
З повагою,
@cmsdave
.info
файл функції та видалити тип вмісту, тоді він фактично видалиться.
Вищеописаний метод не видаляє таксономії, але цього можна досягти, додавши наступне після відключення та видалення модуля:
// 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);
}
Ще одне рішення, яке працювало для мене безпосередньо в базі даних на моєму сайті розробки. Не забудьте завжди робити резервну копію вашої бази даних.
Щоб видалити тип вмісту вручну, створений функцією №16, що пропонує Неджо, це наступне:
- Вимкніть функцію. Іноді у мене виникають проблеми з цим - функція не вимикається. У цьому випадку видаліть код модуля функції.
- Визначте назву машини типу вмісту, який потрібно видалити, наприклад, "mytype".
- У базі даних поверніть значення таблиці node_type до значень за замовчуванням, як якщо б тип вмісту створювався вручну через інтерфейс користувача:
mysql> UPDATE node_type SET module = 'node', custom = 1, modified = 1, locked = 0 WHERE type = 'mytype';
- Очистіть кеші, щоб забезпечити доступність змін типу вмісту.
- Видаліть тип вмісту через інтерфейс користувача в адміністраторі / структурі / типах.
Якщо ви використовуєте модуль admin_menu , ви все одно побачите посилання для видалення у спадному меню Структура / Типи вмісту / [назва типу вмісту] / Видалити, навіть якщо вони не відображаються на сторінці типів вмісту.
Я б сказав, що цілком безпечно використовувати це посилання для видалення, якщо ви впевнені, що більше немає інших посилань на цей тип вмісту.