Similar Topics Mod: Wie resourcenfressend?

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Similar Topics Mod: Wie resourcenfressend?

Beitrag von Darezettl »

Ich überlege, den Similar Topics Mod von Leuchte einzubauen. ( http://www.phpbb.de/moddb/mod.php?id=169 )


Allerdings würde ich vorher gern wissen, wie stark er die viewtopic ansicht bremsen wird.
Also so ungefähr halt..


hier der code:

Code: Alles auswählen

# 
#-----[ OPEN ]------------------------------------------ 
# 
viewtopic.php 

# 
#-----[ FIND ]------------------------------------------ 
# 
//
// Go ahead and pull all data for this topic
//

# 
#-----[ BEFORE, ADD ]------------------------------------------ 
# 
// Similar Topics
$sql = "SELECT topic_id
FROM ". TOPICS_TABLE ."
WHERE topic_id != $topic_id
AND MATCH (topic_title) AGAINST ('". addslashes($topic_title) ."')
ORDER BY topic_time DESC LIMIT 0,5";
if ( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, "Could not get main information for similar topics", '', __LINE__, __FILE__, $sql);
}
$topics = array();
while ( $row = $db->sql_fetchrow($result) )
{
  $topics[] = $row;
}
  $count_similar = count($topics);
if ( $count_similar > 0 )
{
  $template->assign_block_vars('similar', array(
         'L_SIMILAR' => $lang['Similar'],
         'L_TOPIC' => $lang['Topic'],
         'L_AUTHOR' => $lang['Author'],
         'L_FORUM' =>  $lang['Forum'],
         'L_REPLIES' => $lang['Replies'],
         'L_LAST_POST' => $lang['Posted'])
  );
  

for($i = 0; $i < $count_similar; $i++)
{
  $sql = "SELECT t.topic_type, t.topic_status, t.topic_id, t.topic_title, t.topic_time, t.topic_replies, t.topic_last_post_id, u.user_id, u.username, f.forum_id, f.forum_name, p.post_time, p.post_username
  FROM ". TOPICS_TABLE ." t, ". USERS_TABLE ." u, ". FORUMS_TABLE ." f, ". POSTS_TABLE ." p
  WHERE t.topic_id = '". $topics[$i]['topic_id'] ."'
  AND f.forum_id = t.forum_id
  AND p.topic_id = t.topic_id 
  AND u.user_id = p.poster_id
  GROUP BY t.topic_id";
 if ( !($result = $db->sql_query($sql)) )
 {
  	message_die(GENERAL_ERROR, "Could not get similar topics", '', __LINE__, __FILE__, $sql);
 }
  
  while ( $row = $db->sql_fetchrow($result) )
  {
   $similar = $row;
   
   $tracking_topics = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_t']) : array();
   $tracking_forums = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f']) : array();
   $topic_type =  ( $similar['topic_type'] == POST_ANNOUNCE ) ? $lang['Topic_Announcement'] .' ': '';
	 $topic_type .= ( $similar['topic_type'] == POST_STICKY ) ? $lang['Topic_Sticky'] .' ': '';
	 $topic_type .= ( $similar['topic_vote'] ) ? $lang['Topic_Poll'] .' ': '';
   $replies = $similar['topic_replies'];
   
   if( $similar['topic_status'] == TOPIC_LOCKED )
	{
		$folder = $images['folder_locked'];
		$folder_new = $images['folder_locked_new'];
	}
	else if( $similar['topic_type'] == POST_ANNOUNCE )
	{
		$folder = $images['folder_announce'];
		$folder_new = $images['folder_announce_new'];
	}
	else if( $similar['topic_type'] == POST_GLOBAL_ANNOUNCE )
	{
		$folder = $images['folder_global_announce'];
		$folder_new = $images['folder_global_announce_new'];
	}
	else if( $similar['topic_type'] == POST_STICKY )
	{
		$folder = $images['folder_sticky'];
		$folder_new = $images['folder_sticky_new'];
	}
	else
	{
		if( $replies >= $board_config['hot_threshold'] )
		{
			$folder = $images['folder_hot'];
			$folder_new = $images['folder_hot_new'];
		}
		else
		{
			$folder = $images['folder'];
			$folder_new = $images['folder_new'];
		}
	}
  if( $userdata['session_logged_in'] )
	{
		if( $similar['post_time'] > $userdata['user_lastvisit'] ) 
		{
			if( !empty($tracking_topics) || !empty($tracking_forums) || isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f_all']) )
			{
				$unread_topics = true;
				if( !empty($tracking_topics[$topic_id]) )
				{
					if( $tracking_topics[$topic_id] >= $similar['post_time'] )
					{
						$unread_topics = false;
					}
				}
				if( !empty($tracking_forums[$forum_id]) )
				{
					if( $tracking_forums[$forum_id] >= $similar['post_time'] )
					{
						$unread_topics = false;
					}
				}
				if( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f_all']) )
				{
					if( $HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f_all'] >= $similar['post_time'] )
					{
						$unread_topics = false;
					}
				}

				if( $unread_topics )
				{
					$folder_image = $folder_new;
					$folder_title = $lang['New_posts'];
					$newest_img = '<a href="'. append_sid("viewtopic.$phpEx?". POST_TOPIC_URL ."=$topic_id&view=newest") .'"><img src="'. $images['icon_newest_reply'] .'" alt="'. $lang['View_newest_post'] .'" title="'. $lang['View_newest_post'] .'" border="0" /></a> ';
				}
				else
				{
					$folder_image = $folder;
					$folder_title = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['No_new_posts'];
					$newest_img = '';
				}
			}
			else
			{
				$folder_image = $folder_new;
				$folder_title = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['New_posts'];
				$newest_img = '<a href="'. append_sid("viewtopic.$phpEx?". POST_TOPIC_URL ."=$topic_id&view=newest") .'"><img src="'. $images['icon_newest_reply'] .'" alt="'. $lang['View_newest_post'] .'" title="'. $lang['View_newest_post'] .'" border="0" /></a> ';
			}
		}
		else 
		{
			$folder_image = $folder;
			$folder_title = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['No_new_posts'];
			$newest_img = '';
		}
	}
	else
	{
		$folder_image = $folder;
		$folder_title = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['No_new_posts'];
		$newest_img = '';
	}

   $title = (strlen($similar['topic_title']) > 40) ? (substr($similar['topic_title'], 0, 37) . '...') : $similar['topic_title']; 
   $topic_url = '<a href="'. append_sid("viewtopic.$phpEx?". POST_TOPIC_URL .'='. $similar['topic_id']) .'">'. $title . '</a>';

   $author_url = append_sid("profile.$phpEx?mode=viewprofile&". POST_USERS_URL .'='. $similar['user_id']);

   $author = ( $similar['user_id'] != ANONYMOUS ) ? '<a href="'. append_sid("profile.$phpEx?mode=viewprofile&". POST_USERS_URL .'='. $similar['user_id']) .'">'. $similar['username'] .'</a>' : ( ($similar['post_username'] != '' ) ? $similar['post_username'] : $lang['Guest'] );
  
   $forum_url = append_sid("viewforum.$phpEx?f=". $similar['forum_id']);  
   $forum = '<a href="'. $forum_url .'">'. $similar['forum_name'] .'</a>';
   $post_url = '<a href="'. append_sid("viewtopic.$phpEx?". POST_POST_URL .'='. $similar['topic_last_post_id']) .'#'. $similar['topic_last_post_id'] .'"><img src="'. $images['icon_latest_reply'] .'" alt="'. $lang['View_latest_post'] .'" title="'. $lang['View_latest_post'] .'" border="0" /></a>';
   $post_time = create_date($board_config['default_dateformat'], $similar['topic_time'], $board_config['board_timezone']);
 
    $template->assign_block_vars('similar.topics', array(
         'FOLDER' => $folder_image,
         'TITLE' => $folder_title,
         'TYPE' => $topic_type,
         'TOPICS' => $topic_url,
         'AUTHOR' => $author,
         'FORUM' => $forum,
         'REPLIES' => $replies,
         'NEWEST' => $newest_img,
         'POST_TIME' => $post_time,
         'POST_URL' => $post_url)
    );
  } // while
 } // for $i
} // if ( $count_similar > 0 )
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Naja, er fragt ja alle anderen Topics ab, ob der Titel eben gleich oder ähnlich ist.
Das kann bei einem grösseren Board dann schon eine Weile dauern...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Beitrag von Darezettl »

Ok, anders gefragt:

Würdest du ihn einbauen?
Bild
Life begins @ 1/1000
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich sehe für mich, bzw. OXPUS.de keine Notwendigkeit.
Ob das auch für Dich zutrifft, kann ich nicht beurteilen.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Titus
Beiträge: 235
Registriert: Fr 18.Mär, 2005 22:23

Beitrag von Titus »

"problem" bei dem Hack ist zudem dass er steinalte Topics listet und der ein oder andere User dann versucht ist noch seinen senf dazuzugeben, daher sollte man auch ab einem bestimmten Zeitraum eine kleine Meldung mit einbauen das eben der letzte Post schon xJahre alt ist bei solchen beiträgen

interessant bei dem Hack währe die Umsetzung von Larsneo auf phpBB.de mit der stopwordliste, da IMO sonst reichlich nonsens von dem hack gefördert wird und er damit vollends sinnfrei ist ;)
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Beitrag von Darezettl »

Titus hat geschrieben:interessant bei dem Hack währe die Umsetzung von Larsneo auf phpBB.de mit der stopwordliste, da IMO sonst reichlich nonsens von dem hack gefördert wird und er damit vollends sinnfrei ist
Hä?
Was is das ?
Wer wie was warum?!?
Erklär mal. ^^
Titus
Beiträge: 235
Registriert: Fr 18.Mär, 2005 22:23

Beitrag von Titus »

die suche arbeitet mit den stopwords+synonyms (findest du in der lang_english und evtl auch in der lang_german

dabei werden gewisse wörter von der suche ausgeschlossen bzw wenn nach "bewusst" gesucht wird gelichzeitig "bewußt" mit in die suche aufgenommen kann man auch selbst definieren dass "test" gleich "testen" ist usw

die stopwords haben ja in der suche den vorteil die suchtabelle etwas zu entlasten da eben nicht jedes der,die,das,und mit aufgenommen wird, selbes passiert dann beim similartopic dass wenn in titel deines threads denn du gerade ansiehst eben "das" vorkommt er nicht jeden thread mit "das" im titel anschleppt, wenn du da etwas finetuning machst, werden die ergenisse der ähnlichen themen auch halbwegs brauchbar, andernfalls ist das höchstens zu gebrauchen wenn im thread nur ebay steht und dann auch nur ebay topics gelistet werden

die erweiterung hatte wie geschrieben larsneo IMO nur im thread mal gepostet, hatte das dann mal verbaut aber ist schon ewig wieder rausgeflogen das es mir zu viel aufwand war das halbwegs sinnvoll gestalten zu können
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Beitrag von Darezettl »

hast du noch nen link zu den edits von larsneo?
Bild
Life begins @ 1/1000
Titus
Beiträge: 235
Registriert: Fr 18.Mär, 2005 22:23

Beitrag von Titus »

Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

Ich krame dieses Thema nochmals aus...

[quote="Titus";p="56271"]-> http://www.phpbb.de/viewtopic.php?p=422047#422047[/quote]

Hat diesen Code schon mal jemand erfolgreich eingebunden:

Code: Alles auswählen

// Similar Topics
// check against stopwords and synonyms start
include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
$stopword_array = @file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/search_stopwords.txt');
$synonym_array = @file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/search_synonyms.txt');

$title_search = "";
$title_search_array = array();
$title_search_array = ( !strstr($multibyte_charset, $lang['ENCODING']) ) ?  split_words(clean_words('similar', stripslashes($topic_title), $stopword_array, $synonym_array), 'search') : split(' ', $topic_title);   

for($i = 0; $i < count($title_search_array); $i++)
{
   $title_search .= $title_search_array[$i]. ' ';
}
// check against stopwords and synonyms end

$sql = "SELECT topic_id
FROM ". TOPICS_TABLE ."
WHERE topic_id != $topic_id
AND forum_id NOT IN (4,9,16)
AND MATCH (topic_title) AGAINST ('". addslashes($title_search) ."')
ORDER BY topic_time DESC LIMIT 0,10";
Bei mir zeigt er nicht die gewünschte Wirkung. :(

Bye
Benutzeravatar
smarty
Beiträge: 128
Registriert: So 17.Jul, 2005 15:13

Beitrag von smarty »

als kleiner gedankenanstoss für die viewtopic.php (quick'n dirty - soll aber auch nur als POC dienen)

steht drüber ... ich denke nicht, dass larsneo mit quick'n dirty = getestet meint ;)


PNs sind zwar nicht immer erwünscht, aber ein unverbindlicher Hinweis auf den Thread kann nicht schaden ;)
Antworten