Пакетное изменение даты для постов DLE

D
На сайте с 25.02.2011
Offline
2
1538

В DLE (да и не только в нем) есть замечательная функция - отложенный постинг. Теперь представьте ситуацию у Вас есть много контента, например 100к постов, и Вы хотите его разбросать на публикацию, да так чтобы посты получили даты от минус года до плюс 2х лет.

Собственно вот сам код, написанный и проверенный на DLE

<?php  

set_time_limit(0);

class db {}
require_once('engine/data/dbconfig.php');

if (!mysql_connect(DBHOST,DBUSER, DBPASS) || !mysql_select_db(DBNAME)) trigger_error('Can not connect to database',E_USER_ERROR);

$query="SELECT * FROM `".PREFIX."_post`";
$result = mysql_query($query) or trigger_error('SQL: Query error at line '.__LINE__,E_USER_ERROR);

if (mysql_num_rows($result)>0) while ($row = mysql_fetch_assoc($result)) {
if (file_exists('stop.txt')) die('Cancel by the user!');
$query="UPDATE `".PREFIX."_post` SET `date`= DATE_ADD(FROM_DAYS( FLOOR( TO_DAYS( NOW( )) + ( RAND( ) * 1560 ) - ( RAND( ) *730 ) ) ), INTERVAL (FLOOR(RAND()*86400)) SECOND) WHERE `id`=".intval($row['id']);
mysql_query($query) or trigger_error('SQL: Query error at line '.__LINE__,E_USER_ERROR);
}


echo 'Complete';

?>

кидаем его в

www/updater.php

и запускаем

http://ваш сайт/updater.php

После того как скрипт будет выполнен, Ваши посты раскидаются по датам:

Апрель 2010 (2676)
Март 2010 (3879)
Февраль 2010 (3433)
Январь 2010 (3527)
Декабрь 2009 (3422)
Ноябрь 2009 (3088)
Октябрь 2009 (3008)
Сентябрь 2009 (2682)
Август 2009 (2736)
Июль 2009 (2506)
Июнь 2009 (2329)
Май 2009 (2131)
Апрель 2009 (1928)
Март 2009 (1914)
Февраль 2009 (1455)
Январь 2009 (1465)
Декабрь 2008 (1353)
Ноябрь 2008 (1064)
Октябрь 2008 (1007)
Сентябрь 2008 (804)
Август 2008 (685)
Июль 2008 (481)
Июнь 2008 (297)
Май 2008 (146)
Апрель 2008 (3)

Так же распишу, что означают числа в скрипте:

1560 = кол-во дней вперед, от текущей даты

730 = кол-во дней назад от текущей даты

86400 = время в секундах которое будет добавляться для генерации чч:мм:сс

В основном, конечно же, Вас будут интересовать первые два параметра.

Для тех кто хочет раскидать новости только на прошлое, запрос примет вид:

$query="UPDATE `".PREFIX."_post` SET `date`= DATE_ADD(FROM_DAYS( FLOOR( TO_DAYS( NOW( )) +  ( RAND( ) * 1 ) -  ( RAND( ) *730 ) ) ), INTERVAL  (FLOOR(RAND()*86400)) SECOND)  WHERE `id`=".intval($row['id']);
хочется пообщатся с нормальными и общительными людьми, тогда регайся (http://forum.deesing.org/index.php?app=referrals&reff=116) хочется онлайн фильмов тогда смотри (http://prokatov.pp.ua/)
surjan
На сайте с 12.03.2010
Offline
96
#1

Новости публикуются как есть? По порядку? Если да, то как сделать чтобы было в разброс.

[umka]
На сайте с 25.05.2008
Offline
456
#2

А почему нельзя сделать просто одним запросом?

$query="UPDATE `".PREFIX."_post` SET `date`= NOW()+INTERVAL(8760-17520*RAND()) HOUR";

Это тоже раскидает новости по датам в пределах ±1 год от текущей даты.

Лог в помощь!
imho-no
На сайте с 07.04.2008
Offline
186
#3

Denko, оно?

Я - советский пионер. Надо переводить бабушек через дорогу и Бога - нет. юзаю этот хостинг http://ipipe.ru/?pid=16015 (http://ipipe.ru/?pid=16015). полёт нормальный!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий