Drupal → Как удалить все материалы определённого типа

17.12.2011

Пример удаления всех материалов с типом article:

drupal_set_time_limit(600);
$nids = db_select('node', 'n')
  ->fields('n', array('nid'))
  ->condition('n.type', 'article')
  ->execute()
  ->fetchCol();
foreach ($nids as $nid) {
  node_delete($nid);
}
drupal_set_message('Удалено ' . count($nids) . ' нод');

Код можно выполнить с помощью Devel, по адресу devel/php

Похожий способ, только с применением EntityFieldQuery.

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Евгений
18.12.2011, 02:48

Как поведут себя коментарии к этим нодам в такой ситуации ?

удалятся, как и файлы, синонимы и т.п.

Роман
07.01.2013, 16:44

А не подскажете, как можно сделать, чтобы ноды с определенными nid нельзя было удалить из админки ?

Например, есть какие-то ключевые ноды и чтобы пользователь по глупости их не удалил.

Заранее благодарен !

Роман
07.01.2013, 17:04

Спасибо большое.

Смущает то, что если у владельца сайта будет доступ к логину администратора (uid=1), а он имеет на это право, то этот хук, как Вы сами пишите, не сработает.

Возможно ли, чтобы, к примеру, если нужно запретить удаление нод с nid 30 и 35, то просто перехватить команды меню 'node/30/delete' и 'node/35/delete', чтобы они не выполнялись? То есть, добавить исключения к команде 'node/*/delete'.

Есть ли такие возможности ?

если у рут-админа есть желание что-то удалить с сайта, то ни один модуль не сможет ему в этом помешать ;) поэтому не давайте владельцу сайта данные от главного админа

Роман
07.01.2013, 17:16

Понятно.

То есть, создать ему аккаунт с uid=2 и пусть оттуда работает ...

Так а вот чисто теоретический вопрос задам, если не возражаете ...

Есть ли возможность добавлять исключения к меню с %-символами ? Не было ли у Вас на эту тему поста ?

Роман
07.01.2013, 18:23

Ну, допустим, есть команда меню, прописанная в таблице menu_router как 'node/%/delete'. И при её вызове отрабатывает функция, которая осуществляет удаление ноды.

А как и что нужно сделать, чтобы, команды node/30/delete и node/35/delete обрабатывались как-то иначе , чем стандартная команда node/%/delete ?
То есть, если значения аргумента % равны 30 или 35, то обработчик будет другим - например, дополнять стандартную обработку, либо изменять её, либо вообще ничего не делать.

Алексей
09.08.2018, 01:14

Если в базе будет десятки тысяч записей и за 600 секунд не успеет всё удалиться, ничего не случится? Можно повторно будет выполнять скрипт пока вся база не очиститься?

можно, но лучше пользуйтесь views bulk operations

Алексей
17.08.2018, 18:41

При удалении появляется ошибка PDOException Object ERROR: null value in column "node_title" violates not-null constraint
Зашел в эти ноды, у них заголовок пустой. База древняя, всё могло быть.
Вопрос, как принудительно сказать друпалу, чтобы их всё равно удалял?

Добавить комментарий