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


Ответы:


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!
doub1ejack

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

Спасибо за этот код. После просмотра этого кода я отредактировал свою базу данных с помощью phpMyAdmin и отредактировал таблицу «node_type». Затем я нашел тип контекста, который я хотел удалить, и установил значение «Custom» на «1». И, наконец, я удалил его из администрации Drupal.
ANDiTKO

2
mysql> UPDATE node_type SET custom = 1, locked = 0 WHERE type = '<content type machine name>';
Марко Лаззери

Решение @ 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, Nedjo предлагает следующее:

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

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

  • Очистите кэши, чтобы обеспечить изменение типа контента.
  • Через пользовательский интерфейс admin / structure / types удалите тип контента.

0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.