Чому я не можу видалити певні типи вмісту?


19

У мене є сайт Drupal 7, а в меню "Типи вмісту" лише у певних типах є посилання "видалити" у стовпці "Операції".

Усі типи вмісту містять посилання на "редагувати", "керувати полями" та "керувати відображенням", але лише деякі мають "видалити", а інші -.

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

Чому лише певні типи вмісту мають операцію видалення?

Відповіді:


15

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

Типи вмісту, які не мають посилання для видалення, створюються програмно встановленими модулями та видаляються після їх видалення .


5
У випадку, якщо хтось все ще є - у мене є тип вмісту, створений програмно, але все ще висить навколо мого сайту навіть після того, як я видалив усі його сліди з коду сайту - все ще є записи в ньому {menu_links } та {menu_router} тощо), тому вона все ще відображається у меню "Створення вмісту" тощо. Щось, очевидно, заплуталося по дорозі; Чи є якийсь хороший спосіб позбутися цього короткого (тфу) прямого злому бази даних, чого я дійсно хотів би не робити?
Джим Міллер

У мене така ж проблема. На мультисайті я експортував тип вмісту за допомогою функцій та експортував на інший. Тепер я видалив пов'язані модулі, але тип вмісту все ще є тут.

3
Ви, мабуть, є, але просто перевіряєте - чи ви видалили модулі, а також просто відключили їх?
користувач56reinstatemonica8


Я не знаю, чи ця відповідь була правильною раніше, але вона, безумовно, більше не відповідає правильності Drupal 7.23. Типи вмісту можна видалити незалежно від способу їх створення.
Kari Kääriäinen

30

Видаліть їх, перейшовши до URL-адреси /admin/structure/types/manage/content-machine-name/delete

ім'я вмісту машини - це ім'я машини типу вмісту, який ви хочете видалити. Також переконайтеся, що ви використовуєте тире у назві машини, а не підкреслюйте.


1
Дивовижно, це спрацювало дуже чудово! Я встановив Enterprise Blog та Enterprise FAQ на деякий час, але не використовував їх. Екран "Типи вмісту" не давав можливості видалити ці типи вмісту, тому ваш метод був бажаним полегшенням!
хокей2112

1
Я не очікував, що це спрацює, але воно спрацювало прекрасно. Чудово підходить для видалення типів вмісту, доданих за допомогою модуля функцій.
Citricguy

Так! Ця порада була приголомшливою. Добре працює.
Боряна Дітчева

Це власне рішення :)
petergus

Це працює, однак, якщо посилання "видалити" природним чином не відображається, це означає, що видалити його може бути не безпечно. Коли не буде типів вмісту, які використовують його, немає залежностей, немає кешованого вмісту та змінних та функцій, які ним користуються, посилання з’явиться. Тож раджу користуватися цим обережно.
Крістен

2

Як згадується hpn, Ви можете видаляти лише типи вмісту, створені вручну.

Але іноді все не йде гладко. Наступні кроки допомогли видалити типи вмісту. Перед тим, як спробувати, потрібно зробити резервну копію бази даних.

[Щоб вручну видалити тип вмісту, який було створено 1 # 16, пропонує Неджо на drupal.org:

  • Вимкніть функцію. Іноді у мене виникають проблеми з цим - функція не вимикається. У цьому випадку видаліть код модуля функції.
  • Визначте назву машини типу вмісту, який потрібно видалити, наприклад, "mytype".
  • У базі даних поверніть значення таблиці node_type до значень за замовчуванням, як якщо б тип вмісту створювався вручну через інтерфейс користувача:

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

  • Очистіть кеші, щоб забезпечити доступність змін типу вмісту.
  • Видаліть тип вмісту через інтерфейс користувача в адміністраторі / структурі / типах.

Наведені вище кроки - це те, що мені допомогло раніше, коли я виявив ці проблеми.


1

Першим кроком має бути відключення модуля, що забезпечує тип вмісту. Якщо тип вмісту був наданий функцією, вам потрібно буде видалити тип вмісту.

Для добре зробленої функції можливість видалення типу вмісту з’явиться після вимкнення функції, що забезпечує її. Це краще, ніж видалення типу вмісту з-під функції, оскільки поточна функціональність або майбутні оновлення цієї функції можуть потребувати типу вмісту.

Зауважте, що ви можете відключити функціональні модулі (адміністратор / модулі) навіть тоді, коли інтерфейс «Особливості» (досить нерозумно) стверджує, що він не може відключити модуль через конфлікти.

Якщо ви не хочете нічого робити через інтерфейс, а просто хочете зробити код, ось приклад гачка оновлення, яка вимкне функції Commons Wiki та Posts 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.