MyBB Forenübersicht include???
am 11.05.2008 - 17:12 Uhr in
Guten Tag,
ich benutze ein MyBB Forum und möchte eine Übersicht der neuen Forentehmen in Drupal angezeigt bekommen, dazu habe ich folgenden Code:
<?php
error_reporting('E_ALL');
// Daten für Verbindung zur Datenbank (Hier eigene Daten eintragen)
$dbhost = "Localhost";
$dbuser = "xxxxxxx";
$dbpassword = "xxxxxxxx";
$dbdatabase = "xxxxxxx";
// Präfix
$prefix = "mybb_";
// URL zum Forum
$url = "http://fiesta.nachtblock.de/forum";
$viewable_forums = "2"; // Sichtbare Foren mit Kommatas trennen! Also z.b "10,15";
$viewable_forums = str_replace(","," OR ",$viewable_forums);
// Anzahl der Themen
$limit = "8";
// Überlange Themen kürzen (0 = Nein, x = Anzahl der auszugebenden Zeichen)
$length = "45";
// Globales
define("KILL_GLOBALS", 1);
define("NO_ONLINE", 1);
define("IN_MYBB", 1);
chdir("forum");
require("global.php");
chdir("../");
### Konfiguration ###
// Themen aus Datenbank holen
echo "<div>";
$query = $db->query("SELECT subject,uid,tid,fid,lastpost,lastposter,lastposteruid FROM ".TABLE_PREFIX."threads WHERE visible='1' AND fid NOT IN ('17','18','22','103','105','113','172') ORDER BY lastpost DESC LIMIT 0,".$limit."");
while($threads = $db->fetch_array($query))
{
// Forum ermitteln
$query2 = $db->query ("SELECT pid FROM ".TABLE_PREFIX."posts WHERE tid = '".$threads['tid']."' AND dateline = '".$threads['lastpost']."'");
$post = $db->fetch_array($query2);
// Betreff kürzen?
if ($length != 0)
{
if (strlen($threads['subject']) > $length)
{
$threads['subject'] = substr($threads['subject'],0,$length) . "..";
}
}
// Letzte Beiträge auslesen
$date = date("d.m.Y", $threads['lastpost']);
echo "<div id=\"start\"><img src=\"http://fiesta.nachtblock.de/site/themes/fiesta/images/iconf.gif\" alt=\"\" width=\"32\" height=\"32\" style=\"float:left; margin-right:5px; margin-bottom:3px;\">» <a href=\"".$url."/showthread.php?tid=".$threads['tid']."&pid=".$threads['pid']."#pid".$threads['pid']."\" target=\"_blank\">".$threads['subject']."</a>
<br /><span style=\"font-size:8pt\">gepostet am ".$date." von ".htmlentities($threads['lastposter'])."</span></div>
<div align=\"center\"><img src=\"http://fiesta.nachtblock.de/images/line01.gif\" alt=\"\" width=\"100%\" height=\"1\"></div>
";
}
echo"</div>";
?>
Jetzt möchte ich das in die page.tpl.php include lassen an einer gewissen stelle, aber Drupal mag das anscheinend nicht und erstellt eine weisse Seite sobald der Include befehl mit diesen Code drinnen steht. Verstehe die Welt nicht warum das nicht geht. An meinen Code kann es wohl nicht liegen da das problemlos auch in anderen CMS funktioniert hat. Wäre nett wenn jemand einen Rat für mich hat.
Gruss SaschaCap
- Anmelden oder Registrieren um Kommentare zu schreiben
PHP Tag
am 11.05.2008 - 20:59 Uhr
Ich würde im ersten Schritt einmal versuchen, das schliessende PHP-Tag
?>
Ahoi tumblingmug, aber ich
am 11.05.2008 - 23:27 Uhr
Ahoi tumblingmug,
aber ich muss doch am Ende jedes php Tag das abschliessende ?> machen sonst würde ja der PHP code offen bleiben?
Versteh das erhlich gesagt mit den BOM nicht, hab zwar den Wiki Artikel gelesen aber werde da einfach nicht draus schlau *grins*.
Ja läuft auf einen Linux Server (CentOs 5.1).
lg SaschaCap
Nee bei Drupal läuft dit
am 11.05.2008 - 23:40 Uhr
Nee bei Drupal läuft dit ein Bisschen anders, also kannste ruhig vertrauen. Nur bei Themes muss ein Schließtag vorhanden sein.
Und ein BOM (ByteOrderMark)ist das  ,welches am Anfang einer Datei sitzt. Ältere Editoren benötigen dies um UTF-8 zu erkennen, aber heutzutage beherrscht doch jeder guter Editor/IDE eine Ausgabe auch ohne BOM.
----------------------------------------
Alle Angaben ohne Gewähr!!:D
http://www.tobiasbaehr.de/
SaschaCap schrieb aber ich
am 12.05.2008 - 09:41 Uhr
aber ich muss doch am Ende jedes php Tag das abschliessende ?> machen sonst würde ja der PHP code offen bleiben?
Probieren geht über Studieren :)
Moin Moin, ok wenn es in
am 12.05.2008 - 11:48 Uhr
Moin Moin,
ok wenn es in Drupal anders läuft nehme ich mal das schluss Tag weg, aber dennoch funktioniert es nicht. -__-
Hab auch mal einen anderen Code probiert da ist das selbe Problem. Kann es vielleicht sein, dass Drupal mit irgendetwas nicht zurecht kommt wie z.B. mit zwei verschiedene Datenbanken? Also das Forum liegt auf einer anderen Datenbank als wie Drupal.
Die DB-Zugriffe sollten
am 12.05.2008 - 14:35 Uhr
Die DB-Zugriffe sollten nicht das Problem sein. Wenn Du das mit einer Datei mit folgendem Inhalt versuchst (bitte auch ohne error_reporting()):
<?php
print "Include Test";
?>
funktioniert das Ganze dann auch nicht??
Wenn Du andererseits Deine oben gepostete Datei direkt als PHP-Datei aufrufst, gibt sie nur die Div's zurück wie erwartet? Gibt sie noch etwas davor zurück (Fehlermeldungen, Leerzeilen, -zeichen => dazu bitte in den Quellcode schauen)?
Hallo tumblingmug, Wenn ich
am 12.05.2008 - 17:37 Uhr
Hallo tumblingmug,
Wenn ich mit
<?php
print "themen.php";
?>
Wenn ich meine Datei direkt abrufe: (http://fiesta.nachtblock.de/themen.php) wird alles normal angezeigt und hab mit Firebug keine Fehlermeldung. Im Quellcode gibt sie die divs zurück wie erwartet.
Hast du schon mal getestet ob das bei Drupal überhaupt geht fremde Scripts per php zu Includen oder liegt das jetzt nur an mir?
lg SaschaCap
SaschaCap schrieb
am 12.05.2008 - 22:16 Uhr
Wenn ich mit
<?php
print "themen.php";
?>
Ja schon - aber das Drumherum wird doch auch angezeigt, oder? Ich meine: es gibt nicht nur eine komplett weisse Seite wie vorher, sondern eben an der Stelle, wo Du das Include eingefügt hast, den String "themen.php"?!
Hast du schon mal getestet ob das bei Drupal überhaupt geht fremde Scripts per php zu Includen
Ja, das geht schon in Drupal. Ein Include als solches macht kein Problem. Was da aber passiert in der inkludierten Datei, ich denke beinahe, dass das eben die Probleme macht. Ich habe das require(...) in Verdacht. Kannst Du das bitte mal auskommentieren und versuchen, ob nun immer noch ein Whitescreen kommt?
EDIT:
Du schreibst oben:
Drupal mag das anscheinend nicht und erstellt eine weisse Seite sobald der Include befehl mit diesen Code drinnen steht
Ich hatte das so verstanden, dass eine komplett weisse Seite "ausgegeben" wird (white screen of death) - meintest Du aber hingegen, dass ab dem Include nichts mehr ausgegeben wird? Das wäre ein grosser Unterschied.
Nabend, glaub ich hab mich
am 12.05.2008 - 23:27 Uhr
Nabend,
glaub ich hab mich falsch Ausgedrückt. Alles was nach den Include kommt wird nicht mehr ausgegeben also weg. Da der Content bereich nach den Include kommt hab ich mich fälschlicher weise falsch ausgedrückt, sorry.
Mhh hoffe du meinst das require() im Script denn im Drupal wüsste ich nicht wo ich require() benutze. Wenn ich also das im script auskommentiere oder gar umschreibe in include() passierd auch nichts.
Ja schon - aber das Drumherum wird doch auch angezeigt, oder? Ich meine: es gibt nicht nur eine komplett weisse Seite wie vorher, sondern eben an der Stelle, wo Du das Include eingefügt hast, den String "themen.php"?!
Ja alles wird normal angezeigt inklusive den String "themen.php".
Gut, Du musst Dich da
am 12.05.2008 - 23:55 Uhr
Gut, Du musst Dich da herantasten. Ich kann den gleichen Fehler provozieren (also keine Ausgabe mehr ab dem "include"), wenn ich in der includeten Datei ein
<?php
require('template.php');
?>
Ich würde es jetzt so machen: alles Verdächtige (zur Not eben alles) auskommentieren und testen, die Kommentarzeichen Zeile für Zeile entfernend. Ich denke ja fast immer noch, dass der Hund diese globals.php sein muss - aber wie auch immer. Poste mal Deine Ergebnisse - vor allem die Fehlerlösung, wenn Du sie gefunden hast.
So hab jetzt viel rum
am 13.05.2008 - 01:15 Uhr
So hab jetzt viel rum getestet aber dennoch funktioniert nichts! Es gab nur eine Fehlermeldung als ich bei require(global.php); durch include und den direkten Pfad zum Script angegeben habe:
Direct initialization of this file is not allowed.
Please make sure IN_MYBB is defined.
Wozu die globals.php
am 13.05.2008 - 11:28 Uhr
Die globals.php brauchst Du offenbar nur für die Datenbank-Klassen. Du kannst doch auch die ungewrappten PHP-Funktionen zum Auslesen der MySQL-DB verwenden und die Globals-Geschichten raushauen. Dann ist das Script relativ unabhängig und liest eben einfach eine drupalfremde DB aus.
Möglicherweise lädt ja auch die globals.php ihrerseits noch jede Menge Includes und Requires nach und da reicht dann einfach der PHP-Ausführungsspeicher nicht?
Also:
<?php
function db_connect($dbhost, $dbuser, $dbpassword, $dbdatabase) {
$link = mysql_connect($dbhost, $dbuser, $dbpassword);
if ($link) {
$db = mysql_select_db($dbdatabase);
}
if ($db) {
return TRUE;
} else {
return FALSE;
}
}
$db_is_connected = db_connect($dbhost, $dbuser, $dbpassword, $dbdatabase);
if ($db_is_connected) {
// Forum ermitteln
$query = mysql_query('SELECT subject,uid,tid,fid,lastpost,lastposter,lastposteruid
FROM ...');
while($threads = mysql_fetch_array($query)) {
// ...
}
}
?>
usw. usf. Die Konstante TABLE_PREFIX in den verwendeten Abfragen müsstest Du dann entweder vorher noch definieren oder einfach mit dem tatsächlich verwendeten Präfix ersetzen.
Dieser ganze Code gehört aber nicht (und sowieso nicht) in eine Template-Datei. Im nächsten Schritt müssten die DIVs, anstatt mit
<?php echo ...?>
direkt ausgegeben zu werden, in eine Variable $mybb einlesen werden, die dann als Template-Variable zur Verfügung gestellt wird. Ob der PHP-Code bei Drupal 6 dann (ebenso wie noch bei D5) in der Funktion _phptemplate_variables() in der Datei template.php untergebracht wird, weiss ich augenblicklich nicht, sollte sich aber leicht herausbekommen lassen. Im Template jedenfalls sollte ganz am Ende nur noch<?php print $mybb ?>
stehen müssen.