Seite 1 von 1

Einen bestimmten Forum Post auf einer externen Seite anzeige

Verfasst: 11.01.2015 23:17
von shadow25990
Hi,

wie schon der Betreff sagt, versuche ich, auf meiner homepage einen bestimmten Forumpost von meinem phpBB3 3.1.2 Forum anzeigen zu lassen.

Ich bin auch schon Soweit, das ich den Forumpost sehe, aber halt ohne BB codes.

Mit dem code: http://pastebin.com/kN4WmTNx sehen ich folgendes:

Code: Alles auswählen

Test

Dies ist ein Formatierungstest

[b:3vrmuh3t]fett[/b:3vrmuh3t]

[color=#804000:3vrmuh3t]andere Farbe [/color:3vrmuh3t][phpBB Debug] PHP Notice: in file /var/customers/webs/nastrandir/nachtraid/druide_eule.php on line 35: Undefined variable: bbcode_bitfield
[phpBB Debug] PHP Notice: in file [ROOT]/includes/bbcode.php on line 136: Undefined index: bbcode_bitfield
[phpBB Debug] PHP Notice: in file [ROOT]/phpbb/template/twig/twig.php on line 152: Undefined index: style_path
[phpBB Debug] PHP Notice: in file [ROOT]/phpbb/template/twig/twig.php on line 155: Undefined index: style_parent_id
das erste echo zeigt mir also noch den Post vom Forum an.
Das sollte es normalerweise durch den BB Code gehen und es dann mit BBcodes ( in Farbe etc ) angezeigt werden.
Aber soweit kommt er nicht.

Hab mir die wiki dazu angeschaut und auch schon einiges probiert.
Aber ich komm einfach zu keiner Lösung.

Wäre sehr dankbar, wenn ihr mir das so umschreiben könntet, das es auch funktioniert :)

MFG Shadow

Re: Einen bestimmten Forum Post auf einer externen Seite anz

Verfasst: 11.01.2015 23:40
von HabNurNeFrage
Hi,

Du hast es schon fast geschafft

Die Zeile include($phpbb_root_path . 'includes/bbcode.' . $phpEx); ist nicht nötig.
In functions_content.php die Funktion generate_text_for_display() näher anschauen und den Text damit ausgeben.
Bei der Ausgabe des Textes durch diese Funktion werden die bbCodes umgewandelt.
Deinen Text aus der Datenbank einfach als Argument (sagt man das so?) übergeben.

LG

Re: Einen bestimmten Forum Post auf einer externen Seite anz

Verfasst: 11.01.2015 23:42
von Elsensee
Hey, :wink:

im phpBB Development Wiki gibt es eine schöne Vorlage zum Einbinden von Seiten in die Homepage: Vorlage für in phpBB3 eingebundene Seiten
Die war zwar noch für phpBB 3.0.x gedacht, stimmt aber zu großen Teilen so noch überein. :)

Der Anfang war also schon mal ganz gut:

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : 'forum/phpBB3/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx); 
In der Regel benötigt man aber auch noch das User-Management, was direkt danach kommt:

Code: Alles auswählen

$user->session_begin();
$auth->acl($user->data);
$user->setup(); 
Ein $db-Objekt musst du nicht extra erstellen - durch die Einbindung der common.php steht dir bereits eines zur Verfügung. :wink:
Ich liebe dieses Objekt. :D

Jetzt musst du natürlich den ganzen Mist aus der Datenbank holen. Aber du musst nicht mehr holen, als nötig. ;)

Code: Alles auswählen

$sql = 'SELECT post_text, bbcode_uid, bbcode_bitfield, enable_bbcode, enable_smilies, enable_magic_url
    FROM ' . POSTS_TABLE . '
    WHERE post_id = 1';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

if (!$row)
{
    // Beitrag konnte nicht gefunden werden - tu was du willst ;)
} 
Die Flags müssen nun noch zusammengebaut werden:

Code: Alles auswählen

$flags = (($row['enable_bbcode']) ? OPTION_FLAG_BBCODE : 0) + (($row['enable_smilies']) ? OPTION_FLAG_SMILIES : 0) + (($row['enable_magic_url']) ? OPTION_FLAG_LINKS : 0); 
Und nun gibt es in der includes/functions_content.php eine nette Funktion namens generate_text_for_display(); die das Parsen für dich komplett erledigt. :grin:

Code: Alles auswählen

$text = generate_text_for_display($row['post_text'], $row['bbcode_uid'], $row['bbcode_bitfield'], $flags); 
Und dann solltest du in der Variable $text schön geparsten Text mit HTML-Code und so bekommen.

EDIT:
@HabNurNeFrage: Ich war gründlicher :P :D

Re: Einen bestimmten Forum Post auf einer externen Seite anz

Verfasst: 11.01.2015 23:47
von shadow25990
Ein einen riesen dank an euch beide.
Endlich klappt es:)

danke danke danke:)

Re: Einen bestimmten Forum Post auf einer externen Seite anz

Verfasst: 12.01.2015 01:02
von shadow25990
Hey,

Sorry das ich noch einmal eine frage dazu habe, aber wenn ich jetzt statt einem, 7 Posts abfragen möchte, sagen wir , post_id 1, 4, 5, 7,8,9, 10 brauch man bestimmt keine 7 sql abfragen um das zu bewerkstelligen.

Hier noch einmal die fertige Syntax dank euch :) :

Code: Alles auswählen

$sql = 'SELECT post_text, bbcode_uid, bbcode_bitfield, enable_bbcode, enable_smilies, enable_magic_url
    FROM ' . POSTS_TABLE . '
    WHERE post_id = 1';
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

if (!$row)
{
    // Beitrag konnte nicht gefunden werden - tu was du willst ;)
} 

$flags = (($row['enable_bbcode']) ? OPTION_FLAG_BBCODE : 0) + (($row['enable_smilies']) ? OPTION_FLAG_SMILIES : 0) + (($row['enable_magic_url']) ? OPTION_FLAG_LINKS : 0); 
           
$allgemein = generate_text_for_display($row['post_text'], $row['bbcode_uid'], $row['bbcode_bitfield'], $flags); 
mit :

Code: Alles auswählen

SELECT post_text, bbcode_uid, bbcode_bitfield, enable_bbcode, enable_smilies, enable_magic_url FROM `phpbb_posts` WHERE post_id=1 OR post_id=2 OR post_id=3 OR post_id=4 OR post_id=5 OR post_id=6 OR post_id=7
kommt schon mal das richtige ergebnis raus laut mysql.
damit wäre dann $result ein array mit 7 Dimensionen hieß das glaube ich oder ?^^..

also wäre dann

Code: Alles auswählen

$flags = (($row['enable_bbcode']) ? OPTION_FLAG_BBCODE : 0) + (($row['enable_smilies']) ? OPTION_FLAG_SMILIES : 0) + (($row['enable_magic_url']) ? OPTION_FLAG_LINKS : 0); 
dann mit der ersten id so:

Code: Alles auswählen

$flags[0] = (($row[0]['enable_bbcode']) ? OPTION_FLAG_BBCODE : 0) + (($row[0]['enable_smilies']) ? OPTION_FLAG_SMILIES : 0) + (($row[0]['enable_magic_url']) ? OPTION_FLAG_LINKS : 0); 
Und die 0 müsste hochzählen bis 6 :O

damit wäre $flags automatisch ein array

somit sieht es dann folgender maßen aus:

Code: Alles auswählen

$allgemein = generate_text_for_display($row[0]['post_text'], $row[0]['bbcode_uid'], $row[0]['bbcode_bitfield'], $flags[0]);
$zweigemein = generate_text_for_display($row[1]['post_text'], $row[1]['bbcode_uid'], $row[1]['bbcode_bitfield'], $flags[1]); 
usw.

Ich hoffe ich liege annähernd richtig und ihr wisst was ich meine ;D
Könnt ihr mir noch mal zeigen wie es in dem fall aussehen muss?^^


danke schonmal :)

Re: Einen bestimmten Forum Post auf einer externen Seite anz

Verfasst: 12.01.2015 01:18
von D@ve
Ganz habe ich nicht verstanden, was Du möchtest... Aber sql_fetchrow() gibt eigentlich immer nur einen Datensatz des Querys aus.
Daher musst Du das nochmal in eine Schleife setzen...

Code: Alles auswählen

$result = $db->sql_query($sql)

while ($row = $db->sql_fetchrow($result));
{
  //hier kannst Du mit dem $row Array arbeiten...
} 

Re: Einen bestimmten Forum Post auf einer externen Seite anz

Verfasst: 12.01.2015 01:20
von Elsensee
Genau. Alles ab den Flags muss dan quasi in die while-Schleife rein und dann läuft das. :)

Re: Einen bestimmten Forum Post auf einer externen Seite anz

Verfasst: 12.01.2015 17:12
von shadow25990
Habt ihr eine Ahnung warum das jetzt auf meiner externen Seite angezeigt wird ?

Code: Alles auswählen

[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 1068: Cannot modify header information - headers already sent by (output started at /var/customers/webs/nastrandir/nachtraid/index.php:444)
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 1068: Cannot modify header information - headers already sent by (output started at /var/customers/webs/nastrandir/nachtraid/index.php:444)
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 1068: Cannot modify header information - headers already sent by (output started at /var/customers/webs/nastrandir/nachtraid/index.php:444)
in meiner index.php Zeile 444 ruf ich die datei auf, welche auf das phpbb3 forum / datenbank zugreift.
Wird denke ich mal an dem hier liegen: $user->session_begin();

Aber ohne dieser Zeile funktioniert der code nicht mehr :O .

Re: Einen bestimmten Forum Post auf einer externen Seite anz

Verfasst: 12.01.2015 18:21
von D@ve
Normalerweise taucht das nur auf, wenn schon Daten an den Browser gesendet wurden. Das sollte beim Aufruf von session_begin() eigentlich nicht der Fall sein.

Müsstest mal schauen, ob Du in Deiner Datei irgendwo noch leerzeichen vor <?php bzw. nach ?> hast.
Eventuell ist es auch einfach eine PHP-Fehlermeldung die an den Browser gesendet wird und diese Warning auslöst.

Gruß, Dave