Как удалить программно сразу множество нод / пользователей

How to delete multiple nodes/users programmatically, in Drupal 7 Пример кода (удаляем все ноды с номерами больше 500):
<?php
$result= db_select('node', 'n')
    ->fields('n', array('nid') )
    ->condition('nid', 500,'>')
    ->execute();

while ($f= $result->fetchAssoc() ) {
	$nids[]= $f['nid'];
}

node_delete_multiple($nids);
?> 
Аналогично, массовое удаление пользователей:
 <?php
$result= db_select('users', 'u')
    ->fields('u', array('uid') )
    ->condition('uid', 100,'>')
    ->execute();

while ($f= $result->fetchAssoc() ) {
	$uids[]= $f['uid'];
}

user_delete_multiple($uids);
?> 
Если нашему скрипту из-за прожорливости конструкций друпала не хватает памяти, выделенной сервером (выскакивает ошибка из-за memory_limit), то перед execute() добавляем: ->range(0,1000)

3 comments on «Как удалить программно сразу множество нод / пользователей»

  1. SuperGut!
    автору +100500 в карму!!!
    А то я их автоматически на генерил, а удалять в базе не хотелось(((
    =)

  2. Эм…а как это использовать?
    Куда вставлять или отдельный файл создать нужно?

  3. Если попроще, можно в отдельный php файлик (положить его в корень сайта), только перед этим подключить Друпал:

    define(‘DRUPAL_ROOT’, getcwd());
    require_once DRUPAL_ROOT . ‘/includes/bootstrap.inc’;
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

    и затем уже этот код. После выполнения файлик удалить.

    Если посложнее – то создать мини-модуль. Но раз такой вопрос задаете, наверно, проще обойтись без модуля.

Leave a Reply

Your email address will not be published. *
You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>