News mit phpBB realisieren

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
pReya
Mitglied
Beiträge: 26
Registriert: 13.10.2005 16:26
Wohnort: Altdorf b. Nürnberg
Kontaktdaten:

News mit phpBB realisieren

Beitrag von pReya »

Hallo zusammen,

ich arbeite im Moment an einer Seite, und möchte die News auf der Startseite über das phpBB realisieren, also es soll ein Forum geben, wo dann jeder Thread eine neue News ist. Aber irgendwie verzweifel ich echt an der MySQL Abfrage, weil die phpBB Datenbank ja die Struktur hat, das jeder Post ne ID bekommt, und dann in ner zweiten Tabelle der PostID ne ForumsID zugewiesen wird.

Könnt ihr mir sagen wie ich die Abfrage hinbekomme?

Das wär echt klasse!

Danke für eure Antworten!
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

Code: Alles auswählen

	$sql = 'SELECT
			  t.topic_id,
			  t.topic_time,
			  t.topic_title,
			  pt.post_text,
			  u.username,
			  u.user_id,
			  t.topic_replies,
			  pt.bbcode_uid,
			  t.forum_id,
			  t.topic_poster,
			  t.topic_first_post_id,
			  t.topic_status,
			  pt.post_id,
			  p.post_id,
			  p.enable_smilies
			FROM
			  ' . TOPICS_TABLE . ' AS t,
			  ' . USERS_TABLE . ' AS u,
			  ' . POSTS_TEXT_TABLE . ' AS pt,
			  ' . POSTS_TABLE . ' AS p
			WHERE
			  t.forum_id IN (' . >>> HIER FOREN_ID EINTRAGEN <<< . ') AND
			  t.topic_time <= ' . time() . ' AND
			  t.topic_poster = u.user_id AND
			  t.topic_first_post_id = pt.post_id AND
			  t.topic_first_post_id = p.post_id AND
			  t.topic_status <> 2
			ORDER BY
			  t.topic_time DESC';
:wink:
pReya
Mitglied
Beiträge: 26
Registriert: 13.10.2005 16:26
Wohnort: Altdorf b. Nürnberg
Kontaktdaten:

Beitrag von pReya »

Klasse, Danke. Werd das gleich mal ausprobieren! Auch wenn's schon zu umfangreich für mich is :D

Hast du das jetz grad geschrieben, oder hast du schonmal so ein Mod o.Ä geschrieben?
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

pReya hat geschrieben:Hast du das jetz grad geschrieben, oder hast du schonmal so ein Mod o.Ä geschrieben?
ezPortal von Smartor :wink:
die fetchpost.php

hier mal die function dafür:

Code: Alles auswählen

function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length)
{
	global $db, $board_config;

	$sql = 'SELECT
			  t.topic_id,
			  t.topic_time,
			  t.topic_title,
			  pt.post_text,
			  u.username,
			  u.user_id,
			  t.topic_replies,
			  pt.bbcode_uid,
			  t.forum_id,
			  t.topic_poster,
			  t.topic_first_post_id,
			  t.topic_status,
			  pt.post_id,
			  p.post_id,
			  p.enable_smilies
			FROM
			  ' . TOPICS_TABLE . ' AS t,
			  ' . USERS_TABLE . ' AS u,
			  ' . POSTS_TEXT_TABLE . ' AS pt,
			  ' . POSTS_TABLE . ' AS p
			WHERE
			  t.forum_id IN (' . $forum_sql . ') AND
			  t.topic_time <= ' . time() . ' AND
			  t.topic_poster = u.user_id AND
			  t.topic_first_post_id = pt.post_id AND
			  t.topic_first_post_id = p.post_id AND
			  t.topic_status <> 2
			ORDER BY
			  t.topic_time DESC';
	if ($number_of_posts != 0)
	{
		$sql .= '
			LIMIT
			  0,' . $number_of_posts;
	}
	//
	// query the database
	//
	if(!($result = $db->sql_query($sql)))
	{
		message_die(GENERAL_ERROR, 'Could not query announcements information', '', __LINE__, __FILE__, $sql);
	}
	//
	// fetch all postings
	//
	$posts = array();
	if ($row = $db->sql_fetchrow($result))
	{
		$i = 0;
		do
		{
			$posts[$i]['bbcode_uid'] = $row['bbcode_uid'];
			$posts[$i]['enable_smilies'] = $row['enable_smilies'];
			$posts[$i]['post_text'] = $row['post_text'];
			$posts[$i]['topic_id'] = $row['topic_id'];
			$posts[$i]['topic_replies'] = $row['topic_replies'];
			$posts[$i]['topic_time'] = create_date($board_config['default_dateformat'], $row['topic_time'], $board_config['board_timezone']);
			$posts[$i]['topic_title'] = $row['topic_title'];
			$posts[$i]['user_id'] = $row['user_id'];
			$posts[$i]['username'] = $row['username'];

			//
			// do a little magic
			// note: part of this comes from mds' news script and some additional magics from Smartor
			//
			stripslashes($posts[$i]['post_text']);
			if (($text_length == 0) or (strlen($posts[$i]['post_text']) <= $text_length))
			{				
				$posts[$i]['post_text'] = bbencode_second_pass($posts[$i]['post_text'], $posts[$i]['bbcode_uid']);
				$posts[$i]['striped'] = 0;
			}
			else // strip text for news
			{
				$posts[$i]['post_text'] = bbencode_strip($posts[$i]['post_text'], $posts[$i]['bbcode_uid']);
				$posts[$i]['post_text'] = substr($posts[$i]['post_text'], 0, $text_length) . '...';
				$posts[$i]['striped'] = 1;
			}
			//
			// Smilies
			//
			if ($posts[$i]['enable_smilies'] == 1)
			{
				$posts[$i]['post_text'] = smilies_pass($posts[$i]['post_text']);
			}
			$posts[$i]['post_text'] = make_clickable($posts[$i]['post_text']);
			//
			// define censored word matches
			//
			$orig_word = array();
			$replacement_word = array();
			obtain_word_list($orig_word, $replacement_word);
			//
			// censor text and title
			//
			if (count($orig_word))
			{
				$posts[$i]['topic_title'] = preg_replace($orig_word, $replacement_word, $posts[$i]['topic_title']);
				$posts[$i]['post_text'] = preg_replace($orig_word, $replacement_word, 	$posts[$i]['post_text']);
			}
			$posts[$i]['post_text'] = nl2br($posts[$i]['post_text']);
			$i++;
		}
		while ($row = $db->sql_fetchrow($result));
	}
	//
	// return the result
	//
	return $posts;
} // phpbb_fetch_posts
pReya
Mitglied
Beiträge: 26
Registriert: 13.10.2005 16:26
Wohnort: Altdorf b. Nürnberg
Kontaktdaten:

Beitrag von pReya »

Hmm, also irgendwie komm ich mit dem Code auch nicht wirklich weiter!

Kann mir vllt. jemand den Code geben um nur den Threadtitel, Datum&Uhrzeit, Verfasser, und Inhalt auszugeben. Und vorallem die dann auch wieder ausgeben zu lassen?

Beschäftige mich jetz erst seit ca. 2 Wochen mit PHP, also verzeiht bitte meine Unwissenheit!
Benutzeravatar
V1tzl1
Mitglied
Beiträge: 157
Registriert: 10.10.2005 15:31

Beitrag von V1tzl1 »

UPDATE


Hio ich hab da auch schon meine Probleme mit gehabt und bin schließlich zu dieser Lösung gekommen:
also du musst diesen Code in einer PHP Datei speichern

Code: Alles auswählen

<?php 
/*************************************************************************** 
 *                                news2.php 
 *                            ------------------- 
 *   begin                : Saturday, Feb 13, 2001 
 *   copyright            : (C) 2001 The phpBB Group 
 *   email                : support@phpbb.com 
 * 
 *   $Id: index.php,v 1.99.2.3 2004/07/11 16:46:15 acydburn Exp $ 
 * 
 * 
 ***************************************************************************/ 

/*************************************************************************** 
 * 
 *   This program is free software; you can redistribute it and/or modify 
 *   it under the terms of the GNU General Public License as published by 
 *   the Free Software Foundation; either version 2 of the License, or 
 *   (at your option) any later version. 
 * 
 ***************************************************************************/ 

define('IN_PHPBB', true); 
$phpbb_root_path = './'; 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

// 
// Start session management 
// 
$userdata = session_pagestart($user_ip, PAGE_INDEX); 
init_userprefs($userdata); 
// 
// End session management 
// 

include($phpbb_root_path . 'includes/page_header.'.$phpEx); 
$template->set_filenames(array( 
      'body' => 'test.tpl') 
   ); 
  
 $sql = "SELECT 
           topic_id, 
           topic_title, 
           topic_poster, 
           topic_time 
         FROM 
           topics 
         WHERE 
           forum_id = '13' 
         ORDER BY 
           topic_time DESC 
         LIMIT 
           0,4 
        "; 
$newsquery = mysql_query($sql); 
while($row = mysql_fetch_object($newsquery)) 
 { 
  // BEGIN usernamen finden
      $query = "SELECT username, user_id FROM users WHERE user_id = '".$row->topic_poster."'"; 
      $query = mysql_query($query); 
      while($row2 = mysql_fetch_object($query)) 
       { 
        $poster = $row2->username; 
       } 
  // END username finden
  // BEGIN Inhalt finden
      $query = "SELECT post_id FROM posts WHERE topic_id = '".$row->topic_id."' ORDER BY post_time LIMIT 1"; 
      $query = mysql_query($query); 
      while($row2 = mysql_fetch_object($query)) 
       { 
        // BEGIN PostID zu Inhalt umwandeln
            $query2 = "SELECT * FROM posts_text WHERE post_id = '".$row2->post_id."'"; 
            $query2 = mysql_query($query2); 
            while($row3 = mysql_fetch_object($query2)) 
             { 
              $inhalt = $row3->post_text; 
             }
        // END PostID zu Inhalt umwandeln
        
       }
  // END Inhalt finden 
  $template->assign_block_vars('news2', array( 
      'NDATUM' => date("d.m.y H:i", $row->topic_time), 
      'NEWS' => "<a href=\"viewtopic.php?t=".$row->topic_id."\">".$row->topic_title."</a>", 
      'AUTOR' => $poster, 
      'INHALT' => $inhalt 
    )); 
} 

// 
// Generate the page 
// 
$template->pparse('body'); 

include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 

?>
Dann brauchst du noch die Datei news.tpl mit folgendem Inhalt

Code: Alles auswählen

<table border="1"> 
<!-- BEGIN news2 --> 
 <tr> 
  <td > 
   {news2.NDATUM}      <!-- Zeit / Datum --> 
  </td> 
  <td> 
   {news2.NEWS}        <!-- Ueberschrift --> 
  </td> 
  <td> 
   {news2.AUTOR}       <!-- Autor --> 
  </td> 
 </tr> 
 <tr> 
  <td colspan="3">{news2.INHALT}</td> 
 </tr> 
<!-- END news2 -->
</table> 
Wenn du jetz deine php Datei aufrufst, bekommst du eine Tabelle mit:
Datum/Zeit | <a href="Zeigt den Inhalt der Neuigkeit im Forum">Newsüberschrift</a> | Autor | Inhalt

Ich weiß der Code ist wirklich nicht das gelbe vom Ei, aber er sollte funktionieren ;)

Edit: Demo gibts unter http://www.nilzos.bolwerk.de/wbtg/ oben im Menue
(nur ohne den Inhalt, da das das Design nen bisschen sprengen würde :roll: )

Edit: Meine güte war der Code verbuggt, ich hab ihn mal geändeert und jetz laüft er
Zuletzt geändert von V1tzl1 am 25.10.2005 13:26, insgesamt 2-mal geändert.
pReya
Mitglied
Beiträge: 26
Registriert: 13.10.2005 16:26
Wohnort: Altdorf b. Nürnberg
Kontaktdaten:

Beitrag von pReya »

Danke V1tzl1!

Das will aber bei mir trotzdem nich so recht funktionieren. Kannst du dich mal bei mir per ICQ melden? Dann würd ich dir gerne noch ein paar Fragen stellen!
Benutzeravatar
Martin Truckenbrodt
Mitglied
Beiträge: 1143
Registriert: 15.08.2003 23:16
Wohnort: Südthüringen
Kontaktdaten:

Beitrag von Martin Truckenbrodt »

Hallo,
Alternative RSS bzw. RDF Parser, wie es hier auf phpbb.de verwendet wird.

Gruß Martin
Advanced Block MOD 1.1.4 ist released! - Verhindere Spam auf Deinem phpBB3 Board mit Stop Forum Spam, BotScout, Akismet, Project Honey Pot und verschiedenen IP-RBL und Domain-RBL DNS Blacklisten! - Meine MODs - phpBB Complete Core
Benutzeravatar
V1tzl1
Mitglied
Beiträge: 157
Registriert: 10.10.2005 15:31

Beitrag von V1tzl1 »

Code debuggt, siehe Update oben
dominik12
Mitglied
Beiträge: 29
Registriert: 15.08.2005 12:55
Kontaktdaten:

Beitrag von dominik12 »

Habe den Code ausprobiert, bekomme aber folgende Meldung beim Aufruf der PHP-Datei:

Code: Alles auswählen

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/web/bernd/rat/projektz/index.php on line 57
Antworten

Zurück zu „Coding & Technik“