"АвтоРотация" сообщений из теме №1 в тему №2

Автор satory, 30 октября 2011, 01:08:10

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

satory

Доброго дня!
Господа, ответов не нашел, по этому решил создать тему!
Задача:
Копировать все сообщения из темы №1 в тему №2, автоматически, по расписанию.
Начал играть, пока самое начало, буду очень рад и благодарен помощи, советам итд от старших!
Итак сейчас имею SQL код:

-- Чистим временную таблицу

TRUNCATE TABLE `smf_messages_ed_p48`;


-- Отбираем интересующие нас темы из нужных разделов и помещаем во временную/рабочую таблицу
-- id_topic       - Искомая/интересующая нас тема
-- id_board       - Искомый/интересующий раздел

INSERT INTO
`smf_messages_ed_p48`
(`id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `body`, `icon`, `approved`)
SELECT
`id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `body`, `icon`, `approved`
FROM
`smf_messages` WHERE
`id_topic`='109' AND
`id_board`='28';


-- Обновляем информация перед добавлением в таблицу сообщений
-- id_topic       - В какую тему вставляем
-- id_board       - В какой раздел вставляем
-- modified_name  - Имя того, кто якобы модифицировал (у нас это "добрый робот", чтоб все по чесноку ;) )
-- modified_time  - Время модификации (тут, тупо - now, а точнее  UNIX_TIMESTAMP() как в smf)

UPDATE `smf_messages_ed_p48`
SET `id_topic`='164', `id_board`='23', modified_name='добрый робот', modified_time=UNIX_TIMESTAMP();


-- Собственно, вставляем отобранные и модифицированные данные в основную таблицу сообщений!

INSERT INTO
`smf_messages`
(`id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `body`, `icon`, `approved`)
SELECT
`id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `body`, `icon`, `approved`
FROM
`smf_messages_ed_p48`;


-- И на последок, обновим количество ответов, сколько их на самом деле
-- Параметры те-же - нужыне нам темы и разделы + общее количество

UPDATE `smf_topics` SET `num_replies`=(SELECT COUNT(*)
FROM  `smf_messages`
WHERE  `id_topic` =  '109'
AND  `id_board` =  '28')
WHERE `id_topic`='164' AND `id_board`='23'
Не позволяй душе лениться! :)

satory

Все по задумке автоматизируется, а суть проста:
Есть закрытый раздел, информация из которого по прошествии (3х дней) копируется в другой, открытый раздел!
Пока есть сложности с подсчетом сообщений как минимум, на сегодня пока все %)
Не позволяй душе лениться! :)

Bugo

#2
Для начала добавьте в таблицу scheduled_tasks новую строчку, как на скриншоте (см. во вложении). (Правда, id_task у вас почти наверняка будет другой.)

Затем в Modifications.{ваш_язык}.php вставьте пару строк:

$txt['scheduled_task_topic_rotation'] = 'Перенос тем из одного раздела в другой';
$txt['scheduled_task_desc_topic_rotation'] = 'Укажите периодичность запуска в соответствии с предпочтениями.';


И, наконец, в самый конец Subs.php добавьте новую функцию:

function scheduled_topic_rotation()
{
global $sourcedir;

$source_topics = array(1);
$toBoard = 1;

require_once($sourcedir . '/MoveTopic.php');

moveTopics($source_topics, $toBoard);

return TRUE;
}


В массиве $source_topics указываются id нужных тем, в $toBoard — id раздела, в который должны быть перемещены темы. Через Диспетчер задач контролируем периодичность запуска, либо запускаем вручную, по желанию. Никаких новых MySQL-запросов придумывать не нужно.

GeorG

Цитата: satory от 30 октября 2011, 01:10:13Пока есть сложности с подсчетом сообщений
Пересчитать из админки, не помогает? (Конечно об автоматизме, не приходится мечтать тогда).
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

satory

Bugo, GeorG благодарю светлые друже!
Щас продолжу!
(из админки кнопка пересчета - да спасает, как штык нож  :D)
Не позволяй душе лениться! :)

satory

Bugo - Я в шоке! Благодарствую!!!  :)
Подскажите, поглядев немного в MoveTopic.php - это будет именно перенос, но не копирование сообщений верно?!?
(пока делаются бэкапы еще не запускал...)
Простота - гениальна, Вы подтвердили это! ;)
Но "тыкать" бэз бэкапов страшновато...
Не позволяй душе лениться! :)

Bugo

Это именно перенос, так как используется стандартная функция перемещения тем. И в конце выполнения этой функции запускается функция пересчета статистики, так что никуда тыкать вручную не придется. Достаточно будет всё сделать по предложенной мною инструкции.

satory

Да... Понял уже ;) Спасибо за ответ!
А из этого переноса, можно копию сделать??? именно Стандартными средствами? без "отсебятины" моей?
В теории думается что да... но мыслей пока 0 :(
Нам важно КОПИрование именно! Т.е. из id=1 в id=2 но именно copy! (уж кому, а Вам думаю понятно!)
Спасибо!!!
Не позволяй душе лениться! :)

Bugo

#8
http://wiki.simplemachines.org/smf/Integration_hooks#integrate_create_topic

Или, чтоб не грузить голову хуками, покопаться в моде http://dragomano.ru/page/copy-topics

satory

#9
Вас понял! Спасибо! Осознаю ныне...

ЦитироватьИли, чтоб не грузить голову хуками, покопаться в моде http://dragomano.ru/page/copy-topics
Мысли читаете  O0
Не позволяй душе лениться! :)

Nitro

Доброго времени суток всем!

Подскажите, пожалуйста, а кто нить решал задачу копирования_сообщений из одной темы в другую? Автоматизация не нужна...
Может есть аддон по аналогии с приведенным выше типа Copy-Post?

Заранее спасибо.