RQ Mod, die Zweite

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
musashi
Mitglied
Beiträge: 1585
Registriert: 04.12.2003 12:50
Wohnort: Wien
Kontaktdaten:

RQ Mod, die Zweite

Beitrag 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?
www.dsaforum.de - DAS DSA Fanforum
Mario Siebert
Mitglied
Beiträge: 2295
Registriert: 09.12.2003 15:02
Wohnort: Irgendwo im Nirgendwo

Beitrag 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
Wer gegen eine geringe Gebühr (höhe der Gebühr bestimmst du selbst!!) ein phpBB installiert oder Mods eingebaut haben möchte sollte sich melden unter: netcom_service@gmx.net - Bisherige Aufträge 68.071
Auf Anfrage führe ich auch Reparaturen/Updates und Serverumzüge durch oder baue Mods!
Benutzeravatar
saerdnaer
Ehemaliges Teammitglied
Beiträge: 4268
Registriert: 21.04.2001 02:00

Beitrag 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
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“