Невозможно удалить тип содержимого компонента после удаления компонента


Проблема

Удаление функции, которая создает тип контента, скрывает ссылку "Удалить" на admin/structure/types.

Вопрос о Drupal.org

Author: Community, 2012-09-23

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();

}

При этом для этого типа контента появится кнопка "Удалить", чтобы вы могли удалить его из администратора.

Надеюсь, это кому-то поможет!

 15
Author: Aram Boyajyan, 2015-01-30 08:59:14

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

Администратор/структура/типы/управление/ИМЯ_КОНТЕНТА_ТИПА_МАШИНЫ/удалить

Это привело к появлению страницы подтверждения удаления типа контента, которая затем позволила мне удалить тип контента.

Для справки см. Это нить на Drupal.org :

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

С уважением,

@cmsdave

 11
Author: cmsdave, 2013-06-04 00:04:52

Описанный выше метод не удаляет таксономии, но этого можно достичь, добавив следующее после отключения и удаления модуля:

// 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);
}
 3
Author: Juampy NR, 2013-03-15 03:00:56

Еще одно решение, которое работало для меня непосредственно с базой данных на моем сайте разработки. Не забывайте всегда создавать резервные копии своей базы данных.

Чтобы вручную удалить тип контента, созданный функцией #16, Nedjo предлагает следующее:

  • Отключите эту функцию. Я иногда сталкивался с проблемами с этим - функция не отключается. В этом случае удалите код функционального модуля.
  • Определите имя компьютера для содержимого введите, который нужно удалить, например, "mytype".
  • В базе данных верните значения таблицы node_type к значениям по умолчанию, как если бы тип контента был создан вручную с помощью пользовательского интерфейса:

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

  • Очистите кэши, чтобы обеспечить доступность изменения типа контента.
  • Через пользовательский интерфейс в разделе администратор/структура/типы удалите тип контента.
 1
Author: cayerdis, 2014-08-07 17:53:48

Если вы используете модуль admin_menu , вы все равно увидите ссылки удалить в структуре раскрывающегося меню /Типы контента/ [имя типа контента]/Удалить, даже если они не отображаются на странице типы контента.

Я бы сказал, что довольно безопасно использовать эту ссылку на удаление, если вы гарантируете, что больше нет других ссылок на этот тип контента.

 0
Author: Mirsoft, 2015-09-18 13:12:36