Статус темы

vovchik542

Новичок
Статус темы

Всем доброй ночи!
Пишу свой форум. Суть вопроса такова: как сделать статус темы, тоесть, например, чтобы в зависимости от того просмотрел тему пользователь или нет, была картинка напротив или нет. Если делать с помощью ПХП, хранить для каждого пользователя список просмотреных тем и т.д), будет накладно очень. Думаю, можно решить етот вопрос как-то более елегантно с помощью cookies.
Заранее спасибо!
 

Фанат

oncle terrible
Команда форума
наоборот.
куки - накладно, а а база - единственный выход.
 

Саня

Guest
Сравнивай время последнего захода пользователя на форум и время последнего сообщения в теме.
 

neko

tеam neko
Саня
и какое это имеет отношение к тому просмотрена тема или нет?
 

Magnat

Guest
а что если создать табличку, в которой просто хранить id каждой темы, которую пользователь просмотрел...
при записи новой темы она по умолчанию у него будет непросмотренной. как он просматривает, ты записуешь id в поле с юзверем... да.. при каждой регистрации заводи поле для юзверя в табличке.. в которые и будешь вносить id. ID можешь вносить в одно поле. через запятую или двоеточие....
конечно это не лучший выход из этой ситуации :))) Лучше всего посмотри как это например на пхпББ форуме устроено :))
 

Фанат

oncle terrible
Команда форума
Саня
какое отношение имеет "время захода" (что оно вообще означает? заход в тему? просмотр списка тем?) к сообщению в теме?

-~{}~ 26.12.04 12:57:

Magnat
во-первых, ты не понимаешь, что такое база данных и как ей пользоваться. подучи, пожалуйста, этот вопрос. Запомни раз и навсегда:
- программный код создается ОДИН РАЗ, программистом. при эксплуатации программы код не меняется.
- структура бд (состав и структура таблиц) создается ОДИН РАЗ, программистом. при эксплуатации программы структура бд не меняется

во-вторых, на форуме пхпбб "это" не реализовано
 

vovchik542

Новичок
Всем спасибо за ответы.
Я уже сделал. Вроде просто и работатет.
Есть обьект TopicSatus, в нем массив с id просмотренных тем(для каждого пользователя свой екземпляр).
-При просмотре темы, если пользователь зарегистрирован, пытаемся прочитать сериализаваный обьект TopicStatus.
-Если его нет, создаем новый.
-Помечаем тему как прочитанную(с помощью методов класса).
-Сериализуем обьект.

-В списке тем просто проверяем(с помощью методов класса) или она прочитана этим пользователем.

Если интересно могу код кинуть.

-~{}~ 26.12.04 14:19:

Magnat

Почти так же)

-~{}~ 26.12.04 14:19:

Фанат

Я без БД пока:)

-~{}~ 26.12.04 14:21:

Саня

Так можно отмечать темы в которых есть непросмотренные посты, мне пока ето не нужно. Но за идейку спасибо:)
 

Фанат

oncle terrible
Команда форума
Ба, у нас тут ООП используется. объект с массивом.
все по-взрослому. и даже работает.
и даже при нагрузке в два одновременных посетителя?
уважаю
 

Фанат

oncle terrible
Команда форума
Издеваюсь, а что?
Ты первый такой талант, который решил отслеживать прочитанность тем объектами.
Правда, забыл указать, где ты их хранишь. Но суть от этого не меняется, в общих чертах уже смешно

Куда кидать - читаем правила. там все написано
 

vovchik542

Новичок
PHP:
class TopicStatus {
	var $_visited;
	
	function IsVisited($forumid, $chapterid, $topicid)
	{
		if (isset($this->_visited[$forumid][$chapterid][$topicid]))
			return 1;
		else 
			return 0;
	}
	function SetVisited($forumid, $chapterid, $topicid)
	{
		$this->_visited[$forumid][$chapterid][$topicid] = 1; 
	}
	function SetUnvisited($forumid, $chapterid, $topicid)
	{
		$this->_visited[$forumid][$chapterid][$topicid] = 0; 
	}						
}

class HDD {
//...
    function SaveTopicStatus($TopicStatus, $username)
    {
    	$topicstatusdir = '_userstopicstatus';
    	$file = $topicstatusdir."/".$username.".txt";
        if (!file_exists($topicstatusdir)) mkdir($topicstatusdir);
        $packed_status = serialize($TopicStatus);
        $of = fopen($file, 'w');
        fwrite($of, $packed_status);
        fclose($of);
    }
    function ReadTopicStatus($username)
    {
    	$topicstatusdir = '_userstopicstatus';
    	$file = $topicstatusdir."/".$username.".txt";
    	if (file_exists($file))
    	{
    		$of = fopen($file, 'r');
    		$filedata = fread($of, 10000);
    		$unpacked_status = unserialize($filedata);
    		fclose($of);
    		return $unpacked_status;
    	}
    	return 0; 
    }
//...
С классом удобнее в плане расширяемости, планирую добавить в него еще
-есть новое сообщение
-тема популярна
-...

К тому же весь форум на ООП построен. Быстродействие меня пока не волнует.
 

vovchik542

Новичок
SiMM

Сорри.. просмотрел.

-~{}~ 26.12.04 14:54:

SiMM

А если нужно большой кусок кода показать, куда?? В правилах нет такого положения.
 

Фанат

oncle terrible
Команда форума
да ладно. с этим, как раз, ок.
в экран влезает.

Вот сама реализация - это да...
 

Фанат

oncle terrible
Команда форума
Вообще, странное ощущение создается.
С одной стороны, видно, что человек умеет писать.
Отсюда возникает зиссонанс, когда видишь совершенно неподобающее отношение к данным.
 

vovchik542

Новичок
Фанат
совершенно неподобающее отношение к данным
Во-первых, я не профи и даже не умеющий. Во-вторых, я здесь чтобы учится и с вопросом "как сделать лучше". Так что очень рад конструктивной критике:) Я так понял моя ошибка в структуре, а не конкретно в коде? Как бы сделал(и) ты(Вы)??

-~{}~ 26.12.04 15:10:

SiMM
Наверное кидать в личные сообщения. А если всем показать хочется:)
 
Сверху