Счетчик непрочитанных комментариев

Как можно реализовать показ непрочитанных комментариев пользователем?

Например в цикле loop чтоб после фото и превью поста было:
Написал Никi, 27.12.2012 в 22.22 | 462 комментария / 212 новых

Желательно не используя тяжеловесных плагинов.

4 Комментарии

  1. Да никаких. После трех месяцев поиска плюнул, создал в бд новую таблицу c полями [счетчик], [ИД_поста], [Кол-во_новых_комментов], [ИД пользователя] и [дата_время_просмотра]
    (numb post_id new_comm user_id post_time) и при каждом посещении страницы обновляю таблицу. Бред конечно (а если 5000 хстов в сутки будет) и нужны доработки (лень доделывать), но вроде работает.

    function unread() {
    // Подключаемси :)
    include (************);
    $db = mysql_connect(***********);
    mysql_select_db(***********);
    global $current_user;
    get_currentuserinfo();
    $i_am = $current_user->user_login;
    $i_am_id = $current_user->ID; /// ID пользователя, просматривающего сайт
    $postid = get_the_ID(); ///ID просматриваемого поста
    $null=0;	
    $i_am_c = get_comments_number( get_the_ID());  ///Общее количество комментариев поста.
    $c='zero'; /// Количество новых комментариев
    $ct=current_time('timestamp', 4);
    $sqo=mysql_query("SELECT * FROM `hlynovstan619`.`wp_comments_new` WHERE `post_id` = '".$postid."' AND `user_id`= '".$i_am_id."'" ,$db);  // Выборка из БД инфы о непрочитанных комментариях текущего поста текущего юзера
    while ($k = mysql_fetch_row($sqo))
    {		
    $c=$k[2]; //сколько коментариев пользователь видел (поле [new_comm])
    $null=$null+1; // Считаем строки (не помню, зачем это я сделал)
    }
    /*
    * Обновляем время просмотра.		
    * Если мы находимся на странице новости и наш счетчик равен нулю (посещаем страницу впервые),
    * то вставляем новую строку.
    * 
    * $c=0 мы определили вначале, и если при запросе выше мы получаем 0 строк, 
    * то $c, соответственно у нас не изменен.	*/			
    if ((is_single()) AND ($c==0)) {
    mysql_query("INSERT INTO `hlynovstan619`.`wp_comments_new` (`post_id`, `new_comm`, `user_id`, `post_time`) VALUES ('".$postid."', '".$i_am_c."', '".$i_am_id."', '".current_time('timestamp', 4)."');",$db); 	
    }
    /*Если у нас количество "новых" не равно количеству "всего", то обновляем и перезаписываем. */
    if ((is_single()) AND ($c!=$i_am_c)) { 
    mysql_query("UPDATE `hlynovstan619`.`wp_comments_new` SET `new_comm` = '".$i_am_c."' WHERE `wp_comments_new`.`post_id` =".$postid." AND `wp_comments_new`.`user_id`='".$i_am_id."';",$db);
    }			
    $new_count=$i_am_c-$c;   // Разница между записью в БД и текущим кол-вом = количество новых комментариев.
    /* Здесь немного обрабатываем для придания читаемости ссылки:
    Смотрим первое справа число (131, 1, 51, 23), и если оно равно единице или нет, то присваиваем переменным
    определенный падеж*/
    $rest = substr($new_count, -1);
    if ($rest==1) {$n=' новый';$j=' удален';$h=' комментарий';} else {$n=' новых';$j=' удалено';$h=' комментариев';}
    if ($new_count==0) { 
    echo ''; // Не выводим ничего, если счетчик равен нулю
    } else {
    $pml=get_permalink( $id );
    if ($new_count<0) {	
    $new_count=-$new_count; $new=' / '.$new_count.$h.$j; // Текст а-ля "5 комментариев удалено"
    } else {
    $new=' / '.$new_count.$n.''; // Ссылка а-ля "7 новых"
    }
    }
    echo $new;  /// PROFIT
    }

    Также в конце single.php мы обновляем время просмотра страницы с помощью запроса:

    mysql_query("UPDATE `hlynovstan619`.`wp_comments_new` SET `post_time` = '".current_time('timestamp', 4)."' WHERE `wp_comments_new`.`post_id` =".$postid." AND `wp_comments_new`.`user_id`='".$i_am_id."';",$db);

    Постскриптум: 1. Да, я пока не разбираюсь в работе с SQL средствами wordpress.
    2. Да, в коде есть баги, недочности и недочеты. Например:
    а. Нет склонений для фраз типа “2 комментарИЯ” и др.
    б. При первом посещении поста (когда еще в бд нет записи) у нас нет , соответственно записи о последнем посещении, что потом сказалось при написании кода подсветки новых комментариев на странице.
    в. Конечно же, слишком частое обращение к БД.

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

    Была мысль использовать куки, но … как-то отпала ..

    Ах да, – код выше, конечно же мой и там мои данные о полях и таблицах бд. И конечно же, надо будет указываеть свои )

  2. С первым дело не имел, – но он не обновлялся с 2005 года.

    А второй и третий – это показ только списка новых комментариев
    а). в виджете
    б). считается весь блог
    в). пока их “адаптируешь” – получится с нуля новый плагин напишешь

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*