Seite 1 von 2

Random Quotes

Verfasst: 10.12.2003 09:06
von musashi
Hi,

wie kann man denn den "Schon gewusst" Mod so umbauen, dass das so eine Art Random Quote wird?
Sprich anstatt einen Text in die schon_gewusst.txt manuell einzufügen, sollte der Mod sich stündlich ein zufälliges Posting, welches eingegeben wurde aussuchen und zitieren.

Ein Beispiel bietet das turtleboard: http://boards.turtled.com/bestof_rq.htm ... 2003-12-08

Verfasst: 10.12.2003 14:24
von Acid
http://phpbbhacks.com/viewhack.php?id=431
..könntest auch das dafür benutzen.

Verfasst: 10.12.2003 14:25
von musashi
Ja, aber imho holt sich dieses Script kein Posting, sondern Quotet zB irgendwelche Zitate, die man mal festgelegt hat (oder?)

Verfasst: 10.12.2003 15:05
von Acid
aso.. hatte das mit "Posting" überlesen. Dann versuch´s ma mit folgendem..

Code: Alles auswählen

$sql = "SELECT p.*, pt.* FROM ". POSTS_TABLE ." p, ". POSTS_TEXT_TABLE ." pt
           WHERE p.post_id = pt.post_id ORDER BY rand() LIMIT 1";
if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Error getting random post.', '', __LINE__, __FILE__, $sql);
}
if( $row = $db->sql_fetchrow($result) )
{
	include_once($phpbb_root_path . 'includes/bbcode.'.$phpEx);

	$bbcode_uid = $row['bbcode_uid'];
	$message = $row['post_text'];

	if( !$board_config['allow_html'] && $userdata['user_level'] != ADMIN )
	{
		if( $row['enable_html'] )
		{
			$message = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $message);
		}
	}

	if( $board_config['allow_bbcode'] )
	{
		if( $bbcode_uid != '' )
		{
			$message = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($message, $bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $message);
		}
	}

	$message = make_clickable($message);

	if( $board_config['allow_smilies'] )
	{
		if( $row['enable_smilies'] )
		{
			$message = smilies_pass($message);
		}
	}

	$orig_word = array();
	$replacement_word = array();
	obtain_word_list($orig_word, $replacement_word);
	if( count($orig_word) )
	{
		$message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $message . '<'), 1, -1));
	}

	$message = str_replace("\n", "\n<br />\n", $message);

	$template->assign_vars(array(
                'MESSAGE' => $message,
	));
}
..kann z.B. in der index.php vor $template->pparse('body');
eingefügt werden. Es kann dann mit {MESSAGE} in der index_body.tpl aufgerufen werden.

Verfasst: 18.03.2004 13:38
von musashi
Zwar schon a bissl her, dennoch DANKE :)
Das Prinzip funzt wunderbar, nur ein paar Kleinigkeiten hätte ich noch:

Die Quote sollte keine Zeilenumbrüche machen
Die Quote sollte zB maximal nach 90 Zeichen abgebrochen werden und dann nen Link zu dem entsprechenden Posting haben
Eine Quote/ Stunde aus den letzten 50 Postings reicht.

Verfasst: 20.03.2004 14:57
von Acid
$message = str_replace("\n", "\n<br />\n", $message);
$message = ( strlen($message) < $length ) ? $message : substr(stripslashes($message), 0, $length) . ' ... (<a href="'. append_sid("viewtopic.$phpEx?" . POST_POST_URL . '=' . $row['post_id']) . '#' . $row['post_id'].'">kompletter Beitrag</a>)';
..füge die blaue Zeile unterhalb der grünen Zeile ein, wenn der Beitrag nach xx Zeichen abgetrennt werden soll und ein Link auf den kompletten Beitrag hinweisen soll.
include_once($phpbb_root_path . 'includes/bbcode.'.$phpEx);
..unterhalb dieser Zeile fügst du dann noch $length = '20'; (Wert für Beitragslänge) ein.

Verfasst: 22.03.2004 09:38
von musashi
Klappt alles bis auf den Zeilenumbruch nach den XXX Zeichen.
Außerdem wäre es echt cool, wenn es mit Einer RQ/Stunde und nem Archiv mit Datum klappen würde und BBCode nicht dargestellt wird, sondern alles immer als normaler Text. Sonst sieht das zum Teil albern aus.

Bei sehr kurzen Beiträgen zB nur ein Wort, macht er die Verlinkung zum Beitrag selber nicht hin. *edit* Das liegt wohl nicht an der Länge des Beitrags, sondern daran, dass in allen Beiträgen, wo das auftaucht, Sonderzeichen wie

Code: Alles auswählen

... / [ ] ( )
am Ende der XXX Zeichen sind.

Ist es möglich den poster noch mit anzeigen zu lassen? Also zB so:
Musashi: Klappt alles bis auf den Zeilenumbruch nach den XXX Zeichen.... [Beitrag anzeigen]
Zum anschauen & testen kannst Du unter -> http://www.legoquake.de/forum User: test PW: test benutzen. (Ist zwar nicht das Forum wo's letztendlich rein soll, aber zum testen reichts.

Ein weiteres Problemchen ist, dass auch Posts aus privaten Foren in der RQ angezeigt werden.

Verfasst: 25.03.2004 09:13
von musashi
*vorsichtig nach oben schubs und wegrenn* :)

Verfasst: 01.07.2004 11:15
von musashi
Möchte das Thema noch einmal aufgreifen - evtl. kann ja jemand die fehlenden Bausteine ergänzen.
Wir haben an code:

index.php
Suche:

Code: Alles auswählen

$template->pparse('body');
Darüber füge ein:

Code: Alles auswählen

//Random Quote
$sql = "SELECT p.*, pt.* FROM ". POSTS_TABLE ." p, ". POSTS_TEXT_TABLE ." pt
           WHERE p.post_id = pt.post_id ORDER BY rand() LIMIT 1";
if( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Error getting random post.', '', __LINE__, __FILE__, $sql);
}
if( $row = $db->sql_fetchrow($result) )
{
   include_once($phpbb_root_path . 'includes/bbcode.'.$phpEx);
   $length = '20';

   $bbcode_uid = $row['bbcode_uid'];
   $message = $row['post_text'];

   if( !$board_config['allow_html'] && $userdata['user_level'] != ADMIN )
   {
      if( $row['enable_html'] )
      {
         $message = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $message);
      }
   }

   if( $board_config['allow_bbcode'] )
   {
      if( $bbcode_uid != '' )
      {
         $message = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($message, $bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $message);
      }
   }

   $message = make_clickable($message);

   if( $board_config['allow_smilies'] )
   {
      if( $row['enable_smilies'] )
      {
         $message = smilies_pass($message);
      }
   }

   $orig_word = array();
   $replacement_word = array();
   obtain_word_list($orig_word, $replacement_word);
   if( count($orig_word) )
   {
   $message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $message . '<'), 1, -1));
   }

   $message = str_replace("\n", "\n<br />\n", $message);
   $message = ( strlen($message) < $length ) ? $message : substr(stripslashes($message), 0, $length) . ' ... (<a href="'. append_sid("viewtopic.$phpEx?" . POST_POST_URL . '=' . $row['post_id']) . '#' . $row['post_id'].'">kompletter Beitrag</a>)';
   $template->assign_vars(array(
                'MESSAGE' => $message,
   ));
} 
//Random Quote
ToDo's
  • Die Random Quote wird derzeit pro Abruf des Forums generiert. Das sollte maximal 1x (evtl. zur Vollen Stunde?) geschehen.
  • Der Verfasser der jeweiligen Quote sollte vor der Quote erscheinen, evtl. mit Link auf sein Profil
  • Kann man die aufgerufenen stündlichen quotes irgendwie speichern damit man die später mal wieder anschauen und evtl. tagesweise abrufen kann?
Würde mich freuen wenn wir das irgendwie hinbekommen :)

Verfasst: 02.07.2004 09:24
von musashi
Und noch was - warum kann ich das nicht in der overall_header mit {MESSAGE} aufrufen? *grübel*