Как удалить узлы старше X дней?


У кого-нибудь есть фрагмент для удаления узлов старше 1 дня? Я хотел бы запустить это в задачах cron.

 3
Author: kiamlaluno, 2011-10-15

2 answers

Вы можете использовать модуль Автоматическое истечение срока действия .

Этот модуль позволяет администраторам сайтов устанавливать время истечения срока действия для типов контента.

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

Перед истечением срока действия узла пользователю, создавшему этот узел, отправляется предупреждающее сообщение. Если у пользователя есть соответствующие права, он может затем продлить узел.

 2
Author: uwe, 2011-10-15 21:58:27

У меня были проблемы с D7 с использованием автоматического истечения срока действия, и в итоге я использовал HOOK_cron() в пользовательском модуле:

function mymodule_cron() {

// we only want to deal with messages (a content type)
$message_type = "message";

// grab all messages
$message_nodes = node_load_multiple(array(), array('type' => $message_type));
// set up the timestamp for the expiry
$message_search_date = strtotime("- 30 days"); // UNIX timestamp for 30 days ago

// now loop through messages, & if they are old, expire them
  foreach($message_nodes as $m) {

    $obj = entity_metadata_wrapper('node', $m);

    // when was it last updated, & is it still published?
    $last_update = $obj->changed->value();
    $published = $obj->status->value();

    // if it's still published & it's not recent, then unpublish it
    if(($message_search_date > $last_update) && $published<>0) {
        $obj->status = 0;
        $obj->save();
    }
  }
}
 4
Author: Rod, 2013-05-16 09:08:15