Почему я не могу удалить определенные типы контента?


19

У меня есть сайт Drupal 7, и в меню «Типы контента» только некоторые типы имеют ссылку «удалить» в столбце «Операции».

Все типы контента имеют ссылки для «редактирования», «управления полями» и «управления отображением», но только у некоторых есть «удалить», а у других нет.

Я проверил свои разрешения для своего пользователя, и у меня есть Administer content types- но это, кажется, одно глобальное разрешение для всех типов контента, поэтому я до сих пор не понимаю, почему некоторые удаляются, а другие нет.

Почему только определенные типы контента имеют операцию удаления?

Ответы:


15

Вы можете удалять только те типы контента, которые созданы вручную (через admin/structure/types/add).

Типы контента, которые не имеют ссылки для удаления, создаются программно установленными модулями и будут удалены после их удаления .


5
В случае, если кто-то еще здесь - у меня есть тип контента, который был создан программно, но все еще висит вокруг моего сайта, даже после того, как я удалил все его следы из кода сайта - для него все еще есть записи в {menu_links } и {menu_router} и т.п., так что он все еще отображается в меню «создать контент» и т.п. Что-то, очевидно, испортилось на этом пути; Есть ли какой-нибудь хороший способ избавиться от этого (тьфу) прямого взлома базы данных, чего я ДЕЙСТВИТЕЛЬНО хотел бы не делать?
Джим Миллер

У меня точно такая же проблема. На мультисайте я экспортировал тип контента с помощью компонентов и экспортировал в другой. Теперь я удалил связанные модули, но тип контента все еще здесь.

3
Вы, вероятно, имеете, но просто проверяете - удалили ли вы модули, а также просто отключили их?
user56reinstatemonica8


Я не знаю, был ли этот ответ верным ранее, но он, конечно, больше не корректен с Drupal 7.23. Типы контента могут быть удалены независимо от того, как они были созданы.
Кари Kääriäinen

30

Удалите их, перейдя на URL /admin/structure/types/manage/content-machine-name/delete

content-machine-name - имя машины того типа контента, который вы хотите удалить. Кроме того, убедитесь, что вы используете тире в имени машины, а не подчеркивания.


1
Круто, это сработало очень хорошо! Некоторое время назад я установил Enterprise Blog и Enterprise FAQ, но в итоге не использовал их. Экран Content Types не дал возможность удалить эти типы контента, так что ваш метод был долгожданным облегчением!
hockey2112

1
Я не ожидал, что это сработает, но это сработало прекрасно. Отлично подходит для удаления типов контента, добавленных с помощью модуля функций.
Citricguy

Ага! Этот совет был потрясающим. Работает хорошо.
Борина Дитчева

Это актуальное решение :)
petergus

Это работает, однако, если ссылка «удалить» не отображается естественным образом, это означает, что удалить ее может быть небезопасно. После того, как нет типов контента, использующих его, нет зависимостей, нет кэшированного контента, а также переменных и функций, которые его используют, появится ссылка. Поэтому я советую использовать это с осторожностью.
Кристия

2

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

Но иногда дела идут не так гладко. Следующие шаги помогли удалить типы контента. Вы должны сделать резервную копию базы данных, прежде чем пытаться это.

[Чтобы вручную удалить тип контента, который был создан 1 # 16 Nedjo предлагает в drupal.org:

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

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

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

Вышеуказанные шаги - это то, что помогло мне раньше, когда я обнаружил эти проблемы.


1

Отключение модуля, предоставляющего тип контента, должно быть первым шагом. Если тип контента был предоставлен функцией, вам все равно нужно удалить тип контента.

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

Обратите внимание, что вы можете отключить функциональные модули (admin / modules), даже если интерфейс Feature (довольно глупо) утверждает, что не может отключить модуль из-за конфликтов.

И если вы не хотите что-либо делать через интерфейс и просто хотите делать код, вот пример ловушки обновления, которая отключает функции Wiki и сообщений Commons, а затем удаляет типы контента, которые они предоставляют.

<?php
/**
 * Remove unused features and content types.
 */
function example_update_7001() {
  // Delete one (spam) piece of wiki content.
  node_delete(2731);
  // Disable Feature modules.
  module_disable(array('commons_wikis_pages', 'commons_wikis', 'commons_posts'));
  // Delete content types.
  node_type_delete('wiki');
  node_type_delete('post');
}
?>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.