Seite 1 von 1

RQ Mod, die Zweite

Verfasst: 10.11.2004 09:29
von musashi
Hallo,
will das Thema der "random quote" nach einer etwas längeren Zeit noch einmal aufgreifen, Acid hatte seinerzeit mal ein Gerüst gebaut. Wohl gemerkt gehts hier nicht um Zitate, die bereits in einer txt vorliegen, sondern um die zufällige generierung einer quote aus dem laufenden Forenbetrieb.

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
Nun mit {MESSAGE} in der index_body.tpl aufrufen.

1) Die Random Quote wird derzeit pro Abruf des Forums generiert. Das sollte maximal 1x (evtl. zur Vollen Stunde?) geschehen. Wichtig wäre auch, daß die Quote nicht utralt ist, sondern halt ein relativ aktuelles Posting. (Im idealfall eben aus den leztzten 60 Minuten, sollte in diesen 60 Mins kein Posting abgesetzt werden, müsste man halt zurück gehen.
2) Der Verfasser der jeweiligen Quote sollte vor der Quote erscheinen, evtl. mit Link auf sein Profil
3) Kann man die aufgerufenen stündlichen quotes irgendwie speichern damit man die später mal wieder anschauen und evtl. tagesweise abrufen kann?
4) RQ auch in overall_header.tpl aufrufbar?

Verfasst: 10.11.2004 13:05
von Mario Siebert
1) Die Random Quote wird derzeit pro Abruf des Forums generiert. Das sollte maximal 1x (evtl. zur Vollen Stunde?) geschehen. Wichtig wäre auch, daß die Quote nicht utralt ist, sondern halt ein relativ aktuelles Posting. (Im idealfall eben aus den leztzten 60 Minuten, sollte in diesen 60 Mins kein Posting abgesetzt werden, müsste man halt zurück gehen.
Du müsstest ein Script schreiben das, das Zitat in der Datenbank speichert und das dann alle 60 min per cronJob aufrufen lassen um ein anderes zitat einzufügen. Dann müsstest du nurnoch das Zitat aus der Datenbank auslesen und anzeigen lassen.
2) Der Verfasser der jeweiligen Quote sollte vor der Quote erscheinen, evtl. mit Link auf sein Profil


Du müsstest zusätzlich per poster_id die Daten des Users aus der tabelle phpbb_users auslesen.
3) Kann man die aufgerufenen stündlichen quotes irgendwie speichern damit man die später mal wieder anschauen und evtl. tagesweise abrufen kann?
Wenn du das mit dem Speichern in der Datenbank machst (siehe Antwort zu 1) ) hast du sie in der Datenbank und musst sie nurnoch auslesen z.b. die Quotes der letzten 24 Stunden or whatever you want.
4) RQ auch in overall_header.tpl aufrufbar?
Ja das geht:

page_header.php

[suche]

Code: Alles auswählen

$template->pparse('body');
[Darüber einfügen]

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
und das {MESSAGE} dann irgendwo in die overall_header.tpl packen.

HTH

Grüße Mario

Verfasst: 10.11.2004 13:11
von saerdnaer
du könntest z.b. 2 felder in der config tabelle anlegen.
falls man einen längeren text als 255 sollte man vorher das config_value feld auf text stellen.

jedenfalls schreibt man dann eine funktion die den beitrag aus der db holt und in eines der beiden felder schreibt. in das zweite feld kommt dann die momentane uhrzeit.
in die common.php kommt dann noch ne abfrage die, wenn die uhrzeit älter als 60 min ist, die funktion zum beitrag holen wieder aufruft.

dadurch braucht man nicht umbedingt nen cronjob.

ah