Как удалить узлы старше X дней?
У кого-нибудь есть фрагмент для удаления узлов старше 1 дня? Я хотел бы запустить это в задачах cron.
2 answers
Вы можете использовать модуль Автоматическое истечение срока действия .
Этот модуль позволяет администраторам сайтов устанавливать время истечения срока действия для типов контента.
Конечные пользователи, создающие контент с установленным автоматическим сроком действия, не могут контролировать время истечения срока действия. Им может быть разрешено обновлять контент в течение одного или нескольких циклов.
Перед истечением срока действия узла пользователю, создавшему этот узел, отправляется предупреждающее сообщение. Если у пользователя есть соответствующие права, он может затем продлить узел.
У меня были проблемы с 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();
}
}
}