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ę TINYCONhttp://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 :mrgreen:

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