Индикатор "New" в нестандартном месте

Автор crazyASD, 16 ноября 2011, 18:01:04

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

crazyASD

Добрый день форумчанам! Возник такой вопрос, нужно добавить индикатор нового сообщения в профиле напротив ссылок:
Новые сообщения с последнего визита
Новые ответы на ваши сообщения.


С личными сообщениями вроде разобрался, а для action=unread;all;  и action=unreadreplies не пойму как сделать.
Сон разума порождает монстров
Wordpress - рулит!  SMF 2.0.11

crazyASD

С Личными сообщениями разобрался:

if ($context['allow_pm'])
           echo $txt[144], ' [ <a href="', $scripturl, '?action=pm">', $context['user']['messages'], '|<b>', $context['user']['unread_messages'], '</b></a> ] ';
           if ($context['user']['is_logged'] && $context['user']['unread_messages'])
            echo '<a href="' . $scripturl . '?action=pm"><img src="' . $settings['images_url'] . '/new.gif" border="0" /></a>';


С индикатором в топиках не могу, пробовал вот такой код:

if ($context['user']['is_logged'] && $context['showing_all_topics'])
            echo '
                        <a class="unreadlink" href="', $scripturl, '?action=unreadreplies', $context['querystring_board_limits'], ';sort=last_post', $context['sort_by'] == 'last_post' && $context['sort_direction'] == 'up' ? ';desc' : '', '"><img alt="" src="', $settings['images_url'], '/new.gif /></a>';

Но он не хочет работать.
Подскажите пожалуйста!
Сон разума порождает монстров
Wordpress - рулит!  SMF 2.0.11

Beer

У меня было так:

index.template.php


/*Иконка если пришло новое личное сообщение*/
if ($context['user']['unread_messages'] > 0)
echo'
<span class="middletext">| <a href="', $scripturl, '?action=pm"><img src="'.$settings['images_url'].'/message_pm_new.gif" title="Новые личные сообщения: ', $context['user']['unread_messages'], '"></a></span>
', $txt['newmessages3'], ': <b><a href="', $scripturl, '?action=pm">', $context['user']['unread_messages'], '</a></b></span><br />


crazyASD

Так мне нужно, если непрочитанные сообщения на форуме есть, а не личные, вот в чем фишка!
Сон разума порождает монстров
Wordpress - рулит!  SMF 2.0.11

Nitro


GeorG

А самому рискнуть?

Тут вот под версию RC4 есть, думаю установится под эмуляцией (см. вложение) - http://www.simplemachines.org/community/index.php?topic=171948.msg2862106#msg2862106
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

Nitro

Цитата: GeorG от 12 сентября 2012, 13:21:11
А самому рискнуть?

Тут вот под версию RC4 есть, думаю установится под эмуляцией (см. вложение) - http://www.simplemachines.org/community/index.php?topic=171948.msg2862106#msg2862106

Обязательно рискну чуть позже, если не найду решения лучше. За ссылку спасибо, я как раз ее сам тоже нашел:)
Просто на данный момент нет возможности проверить самому, без напильника оно точно не встанет, я посмотрел, там достаточно различий(
отсюда и вопрос. Думал мб кто-то уже имел опыт...

З.Ы. Порыл вопрос на оф сайте, кому интересно пара методик:
http://www.simplemachines.org/community/index.php?topic=171948.40
http://www.simplemachines.org/community/index.php?topic=290798.0
http://www.simplemachines.org/community/index.php?topic=337604.0

GeorG

Нормально он устанавливается, ошибка только в не найденном турецком файле перевода, на это можно забить и установить. Перевод конечно надо сделать там две строчки всего и поместить его в файл Modifications.russian[-utf8].php в зависимости от кодировки.
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

Nitro

Цитата: GeorG от 12 сентября 2012, 20:43:30
Нормально он устанавливается, ошибка только в не найденном турецком файле перевода, на это можно забить и установить. Перевод конечно надо сделать там две строчки всего и поместить его в файл Modifications.russian[-utf8].php в зависимости от кодировки.
Да перевод то ерунда.
Только вот по приведенным мной выше ссылкам я прочитал что во 2й версии структура базы немного поменялась, к которой он там выполняет запрос...

GeorG

Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

Nitro

Смотрите, например в версии которая оформлена модом запрос в базу выполняется так:

$request = db_query("
         SELECT MIN(lmr.ID_MSG)
         FROM {$db_prefix}boards AS b
            LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = b.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER)

а в новом уже так:

$request = $smcFunc['db_query']('', "
         SELECT MIN(lmr.id_msg)
         FROM {db_prefix}boards AS b
            LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = $id_member)

может это конечно и не существенно... пока ковыряюсь, чем закончится отпишу.

В любом случае спасибо за комментарий!


Nitro

В общем итог, мне по сути нужна была только сама функция:
правки в Load.php взял отсюда: http://www.simplemachines.org/community/index.php?topic=171948.msg2862106#msg2862106

Остальное у меня все равно кастомное;)

Всем спасибо, все работает. :coolsmiley:

Nitro

#12
Еще один вопросик по появился по данному решению, мб опытные програмеры помогут, вроде не сложно, но никак не могу сообразить.
Сейчас у меня есть вот такой запрос в Load.php, который считает все непрочитанные темы за все время:

//Count unread topics
$request = $smcFunc['db_query']('', "
SELECT COUNT(*)
FROM {db_prefix}topics AS t
LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = $id_member)
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = t.id_board AND lmr.id_member = $id_member)
WHERE t.$query_this_board
AND t.id_last_msg > $earliest_msg
AND IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) < t.id_last_msg",
      array(
      )
   );
list ($user_info['unread_topics']) = $smcFunc['db_fetch_row']($request);
$smcFunc['db_free_result']($request);


Их кол-во совершенно четко совпадает с /index.php?action=unread;all;start=0  (кстати, если кто-то прояснит новичку тут смысл start=0, скажу отдельное спасибо. Пробовал тупо подставлять другие значения или убирать его вовсе - выборка не меняется...)


А требуется изменить его так, что-бы он считал непрочитанные темы с момента последнего посещения.
Это значение должно совпадать с кол-вом тем по выборке ?action=unread

Надеюсь, не слишком запутанно описал:)

Заранее благодарен всем за советы.

З.Ы. А еще, если подскажете в каком файле в принципе строится ?action=unread буду оч признателен. Там сильно не хватает кнопки "отметить все темы прочитанными" :(

З.З.Ы. С отметить прочитанными разобрался, вспомнил о настройке в админке после того как залез в код, вопрос снят;)