LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
27.05.2012, 23:06:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Непрочитанные комментарии  (Прочитано 3411 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Fanamura
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 31


« : 11.04.2009, 04:28:50 »

Думаю, кто тусует на Хабре поймут сразу. Хоробы реализовать для зарегистрированных такую фичу: если за время отсутствия человека добавились новые комментарии то они каким-либо образом выделяются Azn Если использовать древо как форму вывода комментариев, то получится очень и очень удобно
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #1 : 12.04.2009, 22:59:21 »

Ну по идее это можно реализовать не затрагивая код компонента - на уровне шаблона комментариев посредством использования cookies. Т.е. при открытии какой-либо страницы с комментариями, прямо в шаблоне устанавливать время последнего просмотра. А при отображении - для комментариев, у которых дата больше, чем считанное из cookie значение, добавлять некий дополнительный стиль CSS.
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #2 : 30.11.2010, 10:41:12 »

Хотел узнать, не реализовывал ли кто?

Smart, там скорее не даты а количество просмотренных комментариев хранить нужно.
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #3 : 30.11.2010, 13:35:43 »

Smart, там скорее не даты а количество просмотренных комментариев хранить нужно.
даты - проще, ибо нет никакого 100% способа узнать, просмотрел ли пользователь комментарий или нет, а вот предположить, что если он на этой странице был такого-то числа, то он прочитал все, что там есть - можно.
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #4 : 30.11.2010, 14:33:51 »

Мы немного о разных вещах говорим. Отмечать новые комментарии при их просмотре тоже интересная идея, но наиболее востребована, как мне кажется и что подтверждено просьбами пользователей, функция отметки о наличии новых комментариев при просмотре материалов в виде блога (списка) (либо при открытии главной страницы компонента MyBlog).


Чтобы не трогать базу, я пробую идею с куками.
При просмотре списка материалов достаточно просто считать куки и добавить нужный стиль в темплейт. А вот сохранить куку (при просмотре материала) не так просто. Дело в том, что в самом шаблоне этого сделать нельзя (кука должна сохраняться до вывода контента в браузер). Поэтому, как вариант, я предлагаю использовать к примеру, системный плагин JComments (раз уж это имеет дело к jcomments).

Хотел бы спросить у Сергея лучшее место в плагине для того, чтобы установить эту куку. Разумеется, в этом месте кода желательно получить данные о:
id пользователя
названии объекта (компонента)
id материала

Очень жду ответа
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #5 : 30.11.2010, 15:02:15 »

Дело в том, что в самом шаблоне этого сделать нельзя (кука должна сохраняться до вывода контента в браузер).
Ну так процесс формирования страницы и вывода ее в браузер - разные процессы, и никаких проблем установить cookies из шаблона сайта или шаблона комментариев нет. Тут другая проблема, что если включено кэширование, то код формирования страницы вызваться не будет, и соотв. делать это на уровне шаблона сайта не получится, а вот на уровне шаблона комментариев (например в tpl_tree.php) - можно.
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #6 : 01.12.2010, 20:10:05 »

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

Я предлагаю включить эту функциональность в стандарт. Все исправления (их совсем немного) могу скинуть сюда.

Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #7 : 01.12.2010, 20:58:27 »

Скинь на почту, я посмотрю, обсудим и может быть включу, если не возникнет каких-то принципиальных (на мой взгляд) проблем. А можно в принципе и тут опубликовать, в принципе без разницы.
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #8 : 01.12.2010, 22:58:06 »

Сергей, спасибо что откликнулся.

Запоминаем количество просмотренных пользователей комментариев:
файл шаблона tpl_tree.php, функция render(), добавить в начало
 (время жизни и название куки, возможно, требует пересмотра)
Код:
$object_id = $this->getVar('comment-object_id');
$object_group = $this->getVar('comment-object_group');

$count = JComments::getCommentsCount($object_id, $object_group);
$user =& JFactory::getUser();

if ($user->id != 0) setcookie ($user->id.$object_group.$object_id, $count, time() + 3600*24*60,'/');




Если пользователь добавляет комментарий, учитываем это
jcomments.ajax.php, function addComment, строка 520 добавить:

Код:
if ($comment->userid != 0) setcookie ($comment->userid.$comment->object_group.$comment->object_id, $count, time() + 3600*24*60,'/');



У меня настроен свой вывод комментариев, но скорее всего для стандартного отображения изменяем tpl_links.php, function getCommentsLink()
строка 92, заменяем
Код:


switch($style) {
case -1:
return '<span class="' . $css . '">' . $text . '</span>';
break;
default:

return '<a href="' . $link . '#comments" class="' . $css . '">' . $text . '</a>';
break;
}

на

Код:

$object_id = $this->getVar('comment-object_id');
$object_group = $this->getVar('comment-object_group');

$user =& JFactory::getUser();

if ($user->id != 0) {
$sessioncount=(int) $_COOKIE[$user ->id.$object_group.$object_id];
$css .= ((int)$count > $sessioncount)? ' newcomments' : '';
$newcommentsTitle = ((int)$count > $sessioncount)? JTEXT::_('NEW COMMENTS') : JTEXT::_('NO NEW COMMENTS'); //для добавления в титл ссылки
}

switch($style) {
case -1:
return '<span class="' . $css .$newcomments '"  title=".$newcommentsTitle.">' . $text . '</span>';
break;
default:

return '<a href="' . $link . '#comments" class="' . $css . '" title=".$newcommentsTitle.">' . $text . '</a>';
break;
}

Последнее - не проверял, но должно работать.
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #9 : 02.12.2010, 16:46:47 »

Вместо строчки:
Код:
$count = JComments::getCommentsCount($object_id, $object_group);
лучше сделать вот так:
Код:
$count = $this->getVar('comments-count', 0);

И еще, если убрать из имени cookie идентификатор пользователя, то это все будет работать и для гостей. Мне кажется, что это будет правильнее.
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #10 : 02.12.2010, 18:46:42 »

Спасибо за поправку! Если убрать идентификатор, то разные пользователи сайта, заходящие с одного браузера , будут видеть ошибочный результат.
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #11 : 02.12.2010, 19:19:21 »

Согласен, идентификатор оставим, а вот проверку, на авторизованного пользователя - уберем. Тогда 2 разных авторизованных пользователя в одном браузере увидят разное, а гости - сами виноваты.
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #12 : 02.12.2010, 22:59:43 »

И все-таки, это может поставить гостей в тупик  Roll Eyes  dry
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #13 : 03.12.2010, 15:00:24 »

И все-таки, это может поставить гостей в тупик  Roll Eyes  dry
ну гостей многое может поставить в тупик, например тот факт, что введенное имя и e-mail сохраняются в cookies... но за 2 года жалоб на это можно сказать не было - один раз только спросили как это отключить.
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #14 : 03.12.2010, 19:24:30 »

Я скорее не про сам факт хранения куки, а про изменение стиля на их основе. Вот сел ты за компьютер, открыл сайт, а там у половины материалов стоит подсветка "новых комментариев", при том, что ты не прошел авторизацию.
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #15 : 07.02.2011, 22:57:11 »

Уточнение, использование переменной, имя которой начинается с цифры нежелательно. К тому же, судя по всему, для этого лучше использовать массив.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet