Пакетное изменение даты для постов DLE
В DLE (да и не только в нем) есть замечательная функция - отложенный постинг. Теперь представьте ситуацию у Вас есть много контента, например 100к постов, и Вы хотите его разбросать на публикацию, да так чтобы посты получили даты от минус года до плюс 2х лет.
Собственно вот сам код, написанный и проверенный на DLE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?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('Cancelled 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://site.ru/updater.php
После того как скрипт будет выполнен, Ваши посты раскидаются по датам:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Апрель 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) |
--[добавлено 09.11.2010]--
По просьбе посетителя добавил, так же генерацию случайного времени, т.е. дата теперь будет иметь вид: 21.04.2010 11:45:01, вместо 21.04.2010 00:00:00
Так же распишу, что означают числа в скрипте:
1560 = кол-во дней вперед, от текущей даты
730 = кол-во дней назад от текущей даты
86400 = время в секундах которое будет добавляться для генерации чч:мм:сс
В основном, конечно же, Вас будут интересовать первые два параметра.
--[добавлено 25.01.2011]--
Для тех кто хочет раскидать новости только на прошлое, запрос примет вид:
1 2 3 |
$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']); |
--[добавлено 20.11.2013]--
Аналогичный скрипт для WordPress: Пакетное изменение даты постов в WordPress
--[добавлено 05.02.2019]--
В связи с тем, что PHP 7+ отказались от поддержки функций семейства mysql_, переписал скрипт на mysqli_. Изменений не много:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php set_time_limit(0); class db {} require_once('engine/data/dbconfig.php'); $link = mysqli_connect(DBHOST,DBUSER, DBPASS, DBNAME); if (!$link) trigger_error('Can not connect to database',E_USER_ERROR); $query="SELECT * FROM `".PREFIX."_post`"; $result = mysqli_query($link, $query) or trigger_error('SQL: Query error at line '.__LINE__,E_USER_ERROR); if (mysqli_num_rows($result)>0) while ($row = mysqli_fetch_assoc($result)) { if (file_exists('stop.txt')) die('Cancelled 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']); mysqli_query($link,$query) or trigger_error('SQL: Query error at line '.__LINE__,E_USER_ERROR); } echo 'Complete'; |
Версия не требующая подключения dbconfig.php, но требующая указать данные подключения к базе в самом скрипте
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php define('DBHOST', 'localhost'); define('DBUSER', 'mysql'); define('DBPASS', 'mysql'); define('DBNAME', 'sandbox'); define('PREFIX', 'dle'); $link = mysqli_connect(DBHOST,DBUSER, DBPASS, DBNAME); if (!$link) trigger_error('Can not connect to database',E_USER_ERROR); $query="SELECT * FROM `".PREFIX."_post`"; $result = mysqli_query($link, $query) or trigger_error('SQL: Query error at line '.__LINE__,E_USER_ERROR); if (mysqli_num_rows($result)>0) while ($row = mysqli_fetch_assoc($result)) { if (file_exists('stop.txt')) die('Cancelled 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']); mysqli_query($link,$query) or trigger_error('SQL: Query error at line '.__LINE__,E_USER_ERROR); } echo 'Complete'; |
--[добавлено 08.02.2019]--
Написал скрипт, где все это можно сделать в пару кликов: https://github.com/orlov0562/ddle
--[добавлено 13.02.2019]--
Обновил скрипт , скачать можно тут: ddle.php, репозиторий тут: https://github.com/orlov0562/ddle
Добавил обновление комментариев
Между комментариями можно задать интервал (по-умолчанию от 1 до 7 дней).
Работает это так:
- обновляется дата поста
- выбираются все комментарии к посту с сортировкой по дате добавления
- поочередно комментарии обновляются
- к дате поста добавляется случайное смещение из заданного диапазона (например, 2 дн, из диапазона от 1 дн до 7дн )
- это смещение, выбирается относительно даты поста/комментарияТ.е. даты комментариев внутри одного поста будут обновлены от даты поста, в настройках можно задать интервал времени между комментариями
Author: | Tags: /
| Rating:
54 comments.
Write a comment