Невозможно удалить тип содержимого компонента после удаления компонента
5 answers
Решение
Использование 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();
}
При этом для этого типа контента появится кнопка "Удалить", чтобы вы могли удалить его из администратора.
Надеюсь, это кому-то поможет!
Для меня решением было загрузить страницу удаления вручную, так как на странице типов контента нет ссылки "удалить". Для этого вам просто нужно создать URL-адрес самостоятельно, следуя той же структуре URL-адреса, что и страница удаления для других типов контента:
Администратор/структура/типы/управление/ИМЯ_КОНТЕНТА_ТИПА_МАШИНЫ/удалить
Это привело к появлению страницы подтверждения удаления типа контента, которая затем позволила мне удалить тип контента.
Для справки см. Это нить на Drupal.org :
Https://drupal.org/node/1055460#comment-7297680
С уважением,
@cmsdave
Описанный выше метод не удаляет таксономии, но этого можно достичь, добавив следующее после отключения и удаления модуля:
// 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, Nedjo предлагает следующее:
- Отключите эту функцию. Я иногда сталкивался с проблемами с этим - функция не отключается. В этом случае удалите код функционального модуля.
- Определите имя компьютера для содержимого введите, который нужно удалить, например, "mytype".
- В базе данных верните значения таблицы node_type к значениям по умолчанию, как если бы тип контента был создан вручную с помощью пользовательского интерфейса:
mysql> UPDATE node_type SET module = 'node', custom = 1, modified = 1, locked = 0 WHERE type = 'mytype';
- Очистите кэши, чтобы обеспечить доступность изменения типа контента.
- Через пользовательский интерфейс в разделе администратор/структура/типы удалите тип контента.
Если вы используете модуль admin_menu , вы все равно увидите ссылки удалить в структуре раскрывающегося меню /Типы контента/ [имя типа контента]/Удалить, даже если они не отображаются на странице типы контента.
Я бы сказал, что довольно безопасно использовать эту ссылку на удаление, если вы гарантируете, что больше нет других ссылок на этот тип контента.