Дорабатываем плагин "Мнения" (есть вопрос)
Всем привет!
Для начала хочу сказать спасибо автору данного плагина, функционал очень полезный.
Но при тестировании данного плагина выяснилось, что при появлении нового мнения пользователь об этом никак не узнает. Захотелось доработать плагин таким образом, что бы при появлении нового непросмотренного мнения надпись «Мнения обо мне» как-то изменялась, например делалсь бы жирным.
Вот так сейчас:
Как хочется:
Страница */talk:
Страница рисуется шаблоном \templates\skin\synio\actions\ActionTalk\inbox.tpl, нас интересует в нем строка 51 — проверка, есть ли новое сообщение:
Что бы понять, куда в БД лезет метод getCommentCountNew() идем в \classes\modules\talk\mapper\Talk.mapper.class.php и видим функцию:
Понятно, значит нас интересует таблица _talk_user, столбец comment_count_new:
Видим, что в таблице opininion такого столбца нет. ОК, задача понятна — добавить в нашу таблицу аналогичный столбец и прописать в классе маппера плагина логику работы с ним — увеличить значение поля (аналог — increaseCountCommentNew()), считать значение поля (аналог — GetCountCommentNew()), и обнулить значение поля. Аналога этой функции в Talk.mapper.class.php я не нашел.
Поэтому вопрос, каким методом обнуляется comment_count_new таблицы _talk_user?
Так же интересует вопрос документации по БД — где можно узнать, какие столбцы какую информацию содержат (не всегда ясно из названия)?
Ну и если кто-то знает как все сделать проще, буду рад выслушать.
Для начала хочу сказать спасибо автору данного плагина, функционал очень полезный.
Но при тестировании данного плагина выяснилось, что при появлении нового мнения пользователь об этом никак не узнает. Захотелось доработать плагин таким образом, что бы при появлении нового непросмотренного мнения надпись «Мнения обо мне» как-то изменялась, например делалсь бы жирным.
Вот так сейчас:
Как хочется:
Ищем аналоги
Функционал подсвечивания новых сообщений уже реализован в 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 комментариев
в 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, для данного пользователя и изменяется дата).
Как-то так.
1. Аякс (при клике на сообщение, отправляем запрос на сервер и снимаем выделение)
2. Добавить чекбоксы и кнопочку «Отметить как прочитаное»
п.с. готов реализовать функционал если научите пользоватmся гитхабом
Если сможете реализовать, скажу большое спасибо, т.к. я в php не силен.
Так же мне представился топикстартер читающий твой коммент :)
пысы — коммент ниже это подтвердил :))))