Strona 1 z 1
Dynamiczne liczenie postów nieprzeczytanych
: 07 grudnia 2012, 16:08
autor: Wujek
Witam.
Moje forum to
http://forum.eresa.pl i właśnie dodałem bibliotekę TINYCON
http://tommoor.github.com/tinycon/, jednak nie wiem, jak wywoływać dynamicznie posty nieprzeczytane. Favicon teoretycznie będzie odświeżał się co 30 sekund, więc rozwiązanie powinno być w miarę "lekkie".
Jest coś, co może mi pomóc? Bo skrypty PHP odpadają, prawda? Będą działały tylko przy odświeżeniu, a nie o to mi chodzi/
PS Nie będę zakładał nowego tematu, ale mam jeszcze problem z prywatnymi wiadomościami. Admin może je wysyłać, lecz nikt inny (a uprawnienia ma każda grupa!)
Pozdrawiam serdecznie całą grupę PHPbb

Re: Dynamiczne liczenie postów nieprzeczytanych
: 07 grudnia 2012, 19:33
autor: Wujek
zapomniałem dodać:
Wersja phpBB: 3.0.11
nie widzę opcji edytuj
Re: Dynamiczne liczenie postów nieprzeczytanych
: 08 grudnia 2012, 15:40
autor: jaroslw
Za pomocą samego JS nie wyciągniesz danych z bazy. Do tego będziesz potrzebował PHP. Do skryptu możesz wysłać żądanie AJAX i zwracać dane (liczbę postów) w postaci JSON. Ze swojej strony mogę wspomóc kawałkiem kodu PHP, który służy u nas do wyświetlania liczby nieprzeczytanych postów:
Kod: Zaznacz cały
// Count posts since last vivist
if ($user->data['is_registered'] && $config['load_search'] && $auth->acl_get('u_search') && $auth->acl_getf_global('f_search'))
{
// Include forum_id 0 (globals) in the list and then look up and include all other forums the user is authorized to read
if (!isset($forum_ids))
{
$forum_ids[] = 0;
$sql = 'SELECT forum_id
FROM ' . FORUMS_TABLE;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($auth->acl_get('f_read', $row['forum_id']))
{
$forum_ids[] = $row['forum_id'];
}
}
$db->sql_freeresult($result);
}
$unread_posts_count = 0;
// Unread posts count
$sql = $db->sql_build_query('SELECT', array(
'SELECT' => 'COUNT(p.post_id) as total',
'FROM' => array(
POSTS_TABLE => 'p'
),
'LEFT_JOIN' => array(
array(
'FROM' => array(FORUMS_TRACK_TABLE => 'ft'),
'ON' => 'p.forum_id = ft.forum_id AND ft.user_id = ' . $user->data['user_id']
),
array(
'FROM' => array(TOPICS_TRACK_TABLE => 'tt'),
'ON' => 'p.topic_id = tt.topic_id AND tt.user_id = ' . $user->data['user_id']
)
),
'WHERE' => '(p.post_time > tt.mark_time
OR (tt.mark_time IS NULL AND p.post_time > ft.mark_time)
OR (ft.mark_time IS NULL AND p.post_time > ' . $user->data['user_lastmark'] . '))
AND ' . $db->sql_in_set('p.forum_id', $forum_ids)
));
$result = $db->sql_query($sql);
$unread_posts_count = $db->sql_fetchfield('total', false, $result);
$db->sql_freeresult($result);
$template->assign_var('UNREAD_POSTS_COUNT', $unread_posts_count);
}
W naszym przypadku przekazuje on do stylu zmienną {UNREAD_POSTS_COUNT}.
Re: Dynamiczne liczenie postów nieprzeczytanych
: 08 grudnia 2012, 17:09
autor: Wujek
Super, jest idealnie. Działa jak marzenie.
Pozdrawiam i dziękuję

Re: Dynamiczne liczenie postów nieprzeczytanych
: 09 grudnia 2012, 16:12
autor: Wujek
Witam to jeszcze raz ja.
Jednak zadanie z AJAXem przerosło mnie. (myślałem, że pójdzie gładko to uprzedziłem fakt w poprzenim poście, hehe)
Szukałem i szukałem (słowa kłuczowe: AJAX, function, PHP, refresh), ale nie znalazłem odpowiedzi. Jestem kompletnym laikiem w tym temacie.
Chciałem zrobić coś takiego: kod który podałeś chciałem wrzucić w jakąś funkcję, a ajaxem wywoływać ją. To w ogóle możliwe?
Bo o JSON'ie to już w ogóle nie mówię. To wysoka szkoła jazdy, albo ja taki głupi

Re: Dynamiczne liczenie postów nieprzeczytanych
: 09 grudnia 2012, 21:01
autor: Wujek
Pomogło mi "Call PHP function by Ajax", znajdziecie w google.
Pozdrawiam