Дорабатываем плагин "Мнения" (есть вопрос)

Всем привет!

Для начала хочу сказать спасибо автору данного плагина, функционал очень полезный.
Но при тестировании данного плагина выяснилось, что при появлении нового мнения пользователь об этом никак не узнает. Захотелось доработать плагин таким образом, что бы при появлении нового непросмотренного мнения надпись «Мнения обо мне» как-то изменялась, например делалсь бы жирным.

Вот так сейчас:


Как хочется:


Ищем аналоги
Функционал подсвечивания новых сообщений уже реализован в synio и, чтобы не изобретать велосипед, логично посмотреть как сделано там и перенести логику в плагин (сам шаблон плагина, отвечающий за прорисовку пункта «Мнения обо мне» \plugins\opinion\templates\skin\default\voting_info_menu.tpl).

Страница */talk:

Страница рисуется шаблоном \templates\skin\synio\actions\ActionTalk\inbox.tpl, нас интересует в нем строка 51 — проверка, есть ли новое сообщение:
{if $oTalkUserAuthor->getCommentCountNew() or !$oTalkUserAuthor->getDateLast()}

Что бы понять, куда в БД лезет метод getCommentCountNew() идем в \classes\modules\talk\mapper\Talk.mapper.class.php и видим функцию:
public function UpdateTalkUser(ModuleTalk_EntityTalkUser $oTalkUser) {
		$sql = "UPDATE ".Config::Get('db.table.talk_user')." 
			SET 
				date_last = ?, 				
				comment_id_last = ?d, 				
				comment_count_new = ?d, 	
				talk_user_active = ?d			
			WHERE
				talk_id = ?d
				AND
				user_id = ?d
		";

		if (
			$this->oDb->query(
				$sql,
				$oTalkUser->getDateLast(),
				$oTalkUser->getCommentIdLast(),
				$oTalkUser->getCommentCountNew(),
				$oTalkUser->getUserActive(),
				$oTalkUser->getTalkId(),
				$oTalkUser->getUserId()
			)
		) {
			return true;
		}
		return false;
	}


Понятно, значит нас интересует таблица _talk_user, столбец comment_count_new:


Видим, что в таблице opininion такого столбца нет. ОК, задача понятна — добавить в нашу таблицу аналогичный столбец и прописать в классе маппера плагина логику работы с ним — увеличить значение поля (аналог — increaseCountCommentNew()), считать значение поля (аналог — GetCountCommentNew()), и обнулить значение поля. Аналога этой функции в Talk.mapper.class.php я не нашел.

Поэтому вопрос, каким методом обнуляется comment_count_new таблицы _talk_user?
Так же интересует вопрос документации по БД — где можно узнать, какие столбцы какую информацию содержат (не всегда ясно из названия)?

Ну и если кто-то знает как все сделать проще, буду рад выслушать.

9 комментариев

avatar
неужели никто не знает?=)
avatar
Да, наверно никому это не надо, тому и молчат.
avatar
вам нужны добавить еще 3 поля: date_last, comment_count_new, comment_id_last. (но я бы сделал отдельную таблицу)
в date_last пишем последнюю дату прочтения сообщения (при каждом чтении идет update даты и времени)
в comment_count_new добавляется +1 пользователю который получает новое сообщение
в comment_id_last последний добавленный комментарии

из всего этого не смотря на существующие аналоги делаем выводы:
при добавлении нового комментария в таблице заполняются 3 поля date_last, comment_count_new, comment_id_last (в случае если создали все в 1 таблице). Устанавлеваем текущее время для date_last, comment_count_new = 1, comment_id_last = 0. Пользователь с user_id получает новое сообщение. Для выделения сообщения проверям последнюю дату прочтения или comment_count_new (дату прочтения проверяем в том случае если есть возможность отвечать на комментарий). После чего пользователь user_id открывает сообщение, в базе происходит update (comment_count_new =0, для данного пользователя и изменяется дата).

Как-то так.
avatar
Простите, посмотрев код, я заметил что нет такого функционала через который могли бы прочитать каждое мнение отдельно. По этому, думаю надо добавить один из функционалов (или оба):
1. Аякс (при клике на сообщение, отправляем запрос на сервер и снимаем выделение)
2. Добавить чекбоксы и кнопочку «Отметить как прочитаное»

п.с. готов реализовать функционал если научите пользоватmся гитхабом
avatar
Честно, не понял, зачем нам 3 столбца вместо одного. В ваших рассуждениях вы меняете значения стоблцов date_last и comment_count_new одновременно, значит, один столбец можем выкинуть. comment_id_last, как я понимаю, нужен только как ключ для связи с таблицой -_opinion, но я бы из-за одного столбца не стал бы выносить сущность в отдельную таблицу.
Если сможете реализовать, скажу большое спасибо, т.к. я в php не силен.
avatar
не, ну вместо того что бы минусовать лучше бы объяснили с чем не согласны
avatar
Команда КВН журналюг с Петербурга
Новости
- Все мы смотрим новости на Первом канале, однако каждый их видит по-разному. Вот так их видят мужчины.
- Индекс Доу Джонса, Ким Чен Ын, инфляция, вооруженный конфликт.
- А так их видят женщины.
- Зю-зю-зю-зю-зю, родился тигренок, зю-зю-зю-зю-зю.

Так же мне представился топикстартер читающий твой коммент :)
пысы — коммент ниже это подтвердил :))))
avatar
avatar
спасибо, сейчас потестим
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.