Jump to content

Сделать возможность создавать "Отложенные публикации"

Featured Replies

Posted
comment_111625

Здравствуйте.

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

К примеру, добавил я десяток новостей, указал у них разные даты публикации, скажем... с интервалом в 2 часа и они автоматически добавляются в нужное время.

Необязательно делать в виде плагина/хака.

Можно обойтись php+mysql+cron.

Есть даже кое-какие наработки и мысли по реализации. Пишите в ЛС. 

Скрин для примера (нарисован мной)

2.png.3be429695ce6098c0f4f7b7817e51c72.png

comment_111846
55 минут назад, Heavenanvil сказал:

Уже не актуально. Сделал сам.

Если кому-то интересно, пишите в ЛС.

Интересует, но не код а способ его реализации и какие плюсы в выбранном методе.

comment_111849
7 минут назад, Heavenanvil сказал:

soka, плюсы по сравнению с чем?

аналогов я не нашел.

Ну вы же рассматривали наверное несколько вариантов перед созданием модификации - нативный код, плагин, крон сервера, крон форума. Прикидывали как лучше, какой способ легче, и выбрали один из них как самый оптимальный по времени создания и функциональности. Ведь наверняка в процессе создания некоторые аспекты пришлось рассмотреть, и наверное сделать по другому. Об этом хотелось бы услышать.

  • Author
comment_111851

PHP файл с MySQL запросами, запущен через cron.
Моих навыков хватило только на это, но результат меня устраивает.

comment_111852

Темы создаются из PHP файла? Всю статистику и связи обновляете запросами? Апи форума для создания не рассматривали? Структура темы для постинга.

  • Author
comment_111855

Кхм. Нет. Попробую описать алгоритм.

Создаю тему как обычно, только в параметрах ставлю галочку "Скрыть тему".
Там же в параметрах указываю дату открытия темы (взял этот параметр за основу времени будущей публикации).
Скрипт запущенный в cron сравнивает этот параметр "Дата открытия" с реальным временем и если он < или = ему,  то публикует его (меняя несколько значения в бд форума)

Никаких лазаний в бд или отдельный запуск файлов не требуется. Тема создаётся исключительно стандартными средствами форума. Лишь аппрувится в "нужное" время.

Это если вкратце.

Всю статистику и связи соответственно изменяю как нужно, запросами.

Хотел поизучать api, но было лень.

В скором времени наверно выложу свой файлик в паблик сюда, как только обкатаю. Нужно потестировать пару дней.

Я ведь ещё учусь. Если видели мои предыдущие работы (#1, #2) можете оценить костыли в моем коде, но буду рад, если кому-то мои наработки пригодятся.

comment_111857
17 минут назад, Heavenanvil сказал:

Я ведь ещё учусь. Если видели мои предыдущие работы (#1, #2) можете оценить костыли в моем коде, но буду рад, если кому-то мои наработки пригодятся.

Нда, предыдущие работы полное уныние. По смене даты сообщения вообще не понимаю как можно было умудрится написать столько кода, да еще корявого, он меняется одним sql запросом с пару left join (запрос есть на ипбскинс).

REST API для обновления темы 

POST /forums/topics/{id}
locked=0
hidden=0

  • Author
comment_111858

soka, вас никто не заставляет пользоваться моими работами.

Мне было нужно, готового решения искал, и даже писал в разделе фриланс (именно эта тема), но никто не ответил, поэтому сделал сам.

Какие проблемы?

По смене даты, там если вы не заметили есть ещё смена автора, смена состояния темы, проверка пароля. Почти половина кода это вёрстка. Но запросы не спорю, можно сильно оптимизировать.

  • Author
comment_111859

Можете сделать лучше - флаг вам в руки.

Я делал для себя и о костылях предупреждал.

Если вам будет спокойней, этот скрипт состоит лишь из одного запроса и одной переменной.

comment_111860
1 час назад, Heavenanvil сказал:

soka, вас никто не заставляет пользоваться моими работами.

Я и не собираюсь, этого еще мне хватало. Если бы мне нужно было им пользоваться я бы не стал его обсирать в качестве объективной критики. 

 

1 час назад, Heavenanvil сказал:

По смене даты, там если вы не заметили есть ещё смена автора, смена состояния темы, проверка пароля.

Автор темы/сообщения тоже меняется одним запросом, ну для обновления статистики и прочей херни можно дополнительно понаписать коду. Проверка пароля тоже делается одной строчки кода, да и не нужна она в принципе, лучше подключить ядро форума и проверять права администратора (только не говорите что вы искали и не нашли). ТС, вы же сами знаете что код унылый, и дело не в том что я могу написать лучше или хуже, или не нравится не пользуйся, а в том что это говнокод, пусть и для себя но который нужно писать нормально.

 

39 минут назад, Heavenanvil сказал:

Если вам будет спокойней, этот скрипт состоит лишь из одного запроса и одной переменной.

Это уже прогресс. Критика пошла на пользу. Для будущего развития можно рассмотреть подобные варианты

<?php

require_once 'init.php';
\IPS\Dispatcher\Build::i();

foreach( \IPS\Db::i()->select('tid', 'forums_topics', array( 'topic_open_time > 0 AND topic_open_time <= ? AND approved = -1', time())) as $tid )
{
	$topic = \IPS\forums\Topic::load( $tid );
	$topic->approved = 1;
	$topic->state    = 'open';
	$topic->topic_open_time = ;
	$topic->save();
	
	$topic->resyncLastComment();
	$topic->resyncLastReview();

	if( $container = $topic->containerWrapper() )
	{
		$container->setLastComment();
		$container->setLastReview();
		$container->save();
	}
}

или одним sql запросом 

<?php

require_once 'init.php';
\IPS\Dispatcher\Build::i();

\IPS\Db::i()->update( 'forums_topics', array('approved' => 1, 'state' => 'open', 'topic_open_time' =>  ), array( 'topic_open_time > 0 AND topic_open_time <= ? AND approved = -1', time() ) );

 

Edited by soka

  • Author
comment_111861

А я думал все начинают с говнокода :)

Проблема ещё и в том, что ядро форума вообще почти не знаю, поэтому "копаюсь" в базе напрямую.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.