Dynamiczne liczenie postów nieprzeczytanych

Pomoc przy instalacji oraz użytkowaniu phpBB 3.0.x. Forum nie służy do zgłaszania znalezionych błędów, innowacji lub problemów związanych ze stylami i modyfikacjami.
Wujek
Posty: 5
Rejestracja: 07 grudnia 2012, 16:01

Dynamiczne liczenie postów nieprzeczytanych

Post autor: Wujek » 07 grudnia 2012, 16:08

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 :)

Wujek
Posty: 5
Rejestracja: 07 grudnia 2012, 16:01

Re: Dynamiczne liczenie postów nieprzeczytanych

Post autor: Wujek » 07 grudnia 2012, 19:33

zapomniałem dodać:
Wersja phpBB: 3.0.11

nie widzę opcji edytuj

jaroslw
Zasłużony
Posty: 4524
Rejestracja: 10 grudnia 2005, 18:48
Kontakt:

Re: Dynamiczne liczenie postów nieprzeczytanych

Post autor: jaroslw » 08 grudnia 2012, 15:40

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}.
Pobierz styl: we_universalwe_clearblue
Nowości i aktualizacje: FacebookGoogle+Twitter

Wujek
Posty: 5
Rejestracja: 07 grudnia 2012, 16:01

Re: Dynamiczne liczenie postów nieprzeczytanych

Post autor: Wujek » 08 grudnia 2012, 17:09

Super, jest idealnie. Działa jak marzenie.
Pozdrawiam i dziękuję :)

Wujek
Posty: 5
Rejestracja: 07 grudnia 2012, 16:01

Re: Dynamiczne liczenie postów nieprzeczytanych

Post autor: Wujek » 09 grudnia 2012, 16:12

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:

Wujek
Posty: 5
Rejestracja: 07 grudnia 2012, 16:01

Re: Dynamiczne liczenie postów nieprzeczytanych

Post autor: Wujek » 09 grudnia 2012, 21:01

Pomogło mi "Call PHP function by Ajax", znajdziecie w google.
Pozdrawiam

Zablokowany

Wróć do „Użytkowanie”