xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Пример удаления всех материалов с типом 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
Похожие записи

Комментарии RSS

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

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

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

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

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

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

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

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

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

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

Понятно.

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

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

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

что за исключения к меню?

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

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

http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_menu/7

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

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании