Skocz do zawartości

Aktywne tematy forum


Rekomendowane odpowiedzi

Opublikowano (edytowane)

Pisze skrypt, który ma wyświetlać na stronie głównej serwisu (nie forum) aktywne tematy z forum.

Wyciągam dane z bazy za pomocą takiego kodu:

    function ostatnie_tematy()    {

       $this->db->select('board_topics.tid , board_topics.title, board_topics.posts, board_posts.author_name, board_posts.pid, board_topics.title_seo, board_forums.name');

       $this->db->join('board_topics', 'board_topics.tid  = board_posts.topic_id');
       $this->db->join('board_forums', 'board_forums.id  = board_topics.forum_id');
       $this->db->where('board_topics.forum_id !=','35');

       $this->db->orderby("pid", "desc");

       $this->db->limit(10);
       $query = $this->db->get('board_posts');

       $result = $query->result();
       return $result;

   }

Skrypt wyciąga ostatnie posty, razem z tematem i kategorią forum.

Nie wiem tylko jak zrobić żeby tematy się nie powtarzały, ma ktoś jakiś pomysł?

Skrypt na żywo można zobaczyć na stronie: www.Szkolytanca.pl

Edytowane przez radi
Opublikowano

 W tabeli topics masz m.in datę ostatniego postu, nie musisz robić złączeń z postami.

A jak nie to SELECT DISTINCT....

A co jak potrzebuje też login osoby, która ostatnia coś napisała w danym temacie?

Opublikowano

Jest dla pierwszego i ostatniego postu: czas,nazwa i identyfikator usera.

To wiem, ale jak mam wtedy sprawdzić, który temat jest aktywny tzn, że ktoś coś nowego w nim napisał?

Jak wyciągam posty to jest to nowa aktywność, a jak wyciągam tematy to zawsze będą tylko nowe... a ja chce aktywne, czyli taki w których coś się dzieje...

  • Manager
Opublikowano

A co jak potrzebuje też login osoby, która ostatnia coś napisała w danym temacie?

Joinuj z members.

To wiem, ale jak mam wtedy sprawdzić, który temat jest aktywny tzn, że ktoś coś nowego w nim napisał?

Jak wyciągam posty to jest to nowa aktywność, a jak wyciągam tematy to zawsze będą tylko nowe... a ja chce aktywne, czyli taki w których coś się dzieje...

Nie zrobisz tego w zapytaniu SQL, a przez skomplikowany system luster, a poważniej to kodem IP.Board. Jak nie znajdziesz sposobu to Ci go podam. :P

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

  • 1 miesiąc temu...
Opublikowano

A co jak potrzebuje też login osoby, która ostatnia coś napisała w danym temacie?

Joinuj z members.

To wiem, ale jak mam wtedy sprawdzić, który temat jest aktywny tzn, że ktoś coś nowego w nim napisał?

Jak wyciągam posty to jest to nowa aktywność, a jak wyciągam tematy to zawsze będą tylko nowe... a ja chce aktywne, czyli taki w których coś się dzieje...

Nie zrobisz tego w zapytaniu SQL, a przez skomplikowany system luster, a poważniej to kodem IP.Board. Jak nie znajdziesz sposobu to Ci go podam. :)

Jakbyś był tak miły to prosiłbym o wskazówki chociaż ...

Opublikowano (edytowane)

Uh, - a co znaczy tematy 'aktywne'?

Aktywne tematy czyli takie w których się coś dzieje, pisałem o tym wyżej.

Sam znalazłem rozwiązanie w kodzie, wystarczy sortować według ostatniego postu, oto działający kod:

	
function aktywne_tematy()	{

	$this->db->select('board_topics.tid , board_topics.title, board_topics.last_post, board_topics.posts, board_topics.title_seo, board_forums.name as forum_name, board_members.name as user_name');

	$this->db->join('board_members', 'board_members.member_id = board_topics.last_poster_id');
	$this->db->join('board_forums', 'board_forums.id  = board_topics.forum_id');

	$this->db->orderby('last_post', 'desc');

	$this->db->limit(10);
	$query = $this->db->get('board_topics');

	$result = $query->result();
	return $result;

}

Działający przykład znajdziecie na www.Szkolytanca.pl

Szukałem też takiego pluginu żeby pokazywał się na forum, ale znalazłem tylko to: [HSC] Recent Posts (Portal Plugin)

post-1287-0-76684700-1289904986_thumb.pn

To jest moduł dla Portalu, wie ktoś gdzie znajdę coś takiego ale dla forum, albo jak przerobić ten plugin żeby działał na forum?

Chodzi oto żeby po prawej stronie pokazywały się Aktywne tematy a nie tylko ostatnio dodane...

Edytowane przez radi
  • Manager
Opublikowano

Przerobienie tego kodu nie jest trudne - zajrzyj do plików, jak są budowane zapytania do bazy, a na pewno sobie poradzisz. Przykładowy kod:

	$this->DB->build( array(
								'select'	=> 'noti.*',
								'from'		=> array( 'rc_modpref' => 'noti' ),
								'where'		=> "(m.member_group_id IN(" . $group_ids . ") " . ( count($secondaryWhere) ? "OR " . implode( ' OR ', $secondaryWhere ) : '' ) . ") AND moderator.forum_id LIKE '%,{$report_data['FORUM_ID']},%'",
								'add_join'	=> array(
													array(
														'select'	=> 'm.member_id, m.members_display_name as name, m.language, m.members_disable_pm, m.email, m.member_group_id',
														'from'		=> array( 'members' => 'm' ),
														'where'		=> 'm.member_id=noti.mem_id',
														),
													array(
														'select'	=> 'moderator.member_id, moderator.group_id',
														'from'		=> array( 'moderators' => 'moderator' ),
														'where'		=> 'moderator.member_id=m.member_id OR moderator.group_id=m.member_group_id',
														),
													)
						)		);
	$this->DB->execute();

	if ( $this->DB->getTotalRows() )
	{
		while( $r = $this->DB->fetch() )
		{
			$r['member_id']	= $r['mem_id'];

			$mods[] = $r;
		}
	}

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano

Przerobienie tego kodu nie jest trudne - zajrzyj do plików, jak są budowane zapytania do bazy, a na pewno sobie poradzisz. Przykładowy kod:

	$this->DB->build( array(
								'select'	=> 'noti.*',
								'from'		=> array( 'rc_modpref' => 'noti' ),
								'where'		=> "(m.member_group_id IN(" . $group_ids . ") " . ( count($secondaryWhere) ? "OR " . implode( ' OR ', $secondaryWhere ) : '' ) . ") AND moderator.forum_id LIKE '%,{$report_data['FORUM_ID']},%'",
								'add_join'	=> array(
													array(
														'select'	=> 'm.member_id, m.members_display_name as name, m.language, m.members_disable_pm, m.email, m.member_group_id',
														'from'		=> array( 'members' => 'm' ),
														'where'		=> 'm.member_id=noti.mem_id',
														),
													array(
														'select'	=> 'moderator.member_id, moderator.group_id',
														'from'		=> array( 'moderators' => 'moderator' ),
														'where'		=> 'moderator.member_id=m.member_id OR moderator.group_id=m.member_group_id',
														),
													)
						)		);
	$this->DB->execute();

	if ( $this->DB->getTotalRows() )
	{
		while( $r = $this->DB->fetch() )
		{
			$r['member_id']	= $r['mem_id'];

			$mods[] = $r;
		}
	}

Zapytań nie trzeba przerabiać, chodzi oto jak się ustawia czy coś ma się pojawiać na forum czy na portalu?

Bo skrypt działa i pokazuje aktywne tematy ale tylko na portalu, a ja chce żeby się wyświetlał na pasku po prawej na forum.

Dopiero zaczynam się bawić szablonami IPB i nie bardzo wiem gdzie mam szukać...

  • Manager
Opublikowano

Trzeba trzeba. Poradnik jak się tworzy rozszerzenia znajdziesz tutaj: http://community.invisionpower.com/resources/documentation/index.html/_/developer-resources/hooks/start-here-creating-a-hook-r397

Nie baw się w szablonach, bo niczego dobrego tam nie wymyślisz. Jak się uczyć to porządnie.

  • Lubię to 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.