Skip to content

Автоматическое перемещение тем

Доброе утро!

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

 

Есть ли такой хук/реализация?

Featured Replies

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

  • Author

А как эту задачу написать, не подскажете, пожалуйста? Я с планировщиком еще не работал.

  • Author

Спасибо. А Вы не могли бы помочь написать скрипт, пожалуйста?

  • Author

Никак не пойму, как сделать этот скрипт. Как пример взял этот http://ipbskins.ru/forum/topic13812.html/page__view__findpost__p__92366

 

Но он не подходит, там удаление картинок из галереи выполняется, а мне нужно перемещение тем... Как это реализовать?

Логика примерно следующая, sql запросом меняете ид форума у тем которые находятся в определенном форуме, потом обновляете статистику форума куда была перемещена тема.

  • Author

Дело в том, что я полный ноль в написании таких скриптов :) Я даже не знаю, как задачу сделать... А функция эта нужна, без нее новости не будут работать.

 

Если это Вас не затруднит, Вы не могли бы, пожалуйста, хотя бы набросать этот скрипт?

Когда буду за компьютером наброшу вам скрипт.

  • Author

Когда буду за компьютером наброшу вам скрипт.

Большое спасибо! Пока попробую разобраться, как задачу сделать :) Тоже не знаю пока.

Задача

 

<?php

class task_item
{
protected $class;
protected $task = array();
protected $registry;
protected $DB;
protected $lang;

public function __construct( ipsRegistry $registry, $class, $task )
{
	$this->registry	= $registry;
	$this->DB		= $registry->DB();
	$this->lang		= $this->registry->getClass('class_localization');

	$this->class	= $class;
	$this->task		= $task;
}

public function runTask()
{
	$from_id = 1; // откуда
	$to_id   = 5; // куда
	$older   = 2 * 86400; // старше чем, сек

	$this->DB->update( 'topics', 'forum_id='.$to_id, 'start_date < '. ( IPS_UNIX_TIME_NOW - $older ) . ' AND forum_id='.$from_id );

	if( ( $count = $this->DB->getAffectedRows() ) > 0 )
	{
		$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . '/sources/classes/moderate.php', 'moderatorLibrary', 'forums' );
		$modfunc =  new $classToLoad( $this->registry );

		$modfunc->forumRecount( $from_id );
		$modfunc->forumRecount( $to_id );
	}

	$this->class->appendTaskLog( $this->task, 'Moved topics: ' . $count );

	//-----------------------------------------
	// Unlock Task: REQUIRED!
	//-----------------------------------------

	$this->class->unlockTask( $this->task );
}
}

  • Author

Большое Вам спасибо!

Этот .php файл нужно положить в папку /admin/applications/forums/tasks, и все, задача будет автоматически сама работать? Или ее еще нужно как-то активировать в планировщике?

Нужно добавить в менеджере задач и настроить время выполнения.

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.