Beiträge: 3
Themen: 1
Registriert seit: 20.09.2009
20.09.2009, 17:56
(Dieser Beitrag wurde zuletzt bearbeitet: 20.09.2009, 18:03 von Philyan.)
Hey Leute,
ich hoffe, ihr könnt mir hier helfen.
Also. Ich habe eine Seite seite.php erstellt. Hier lade ich ein Template, das den kompletten Inhalt ÜBER dem Inhalt in seite.php enthält. Entsprechend lade ich noch ein Template, welches den kompletten Inhalt UNTER dem eigentlichen Inhalt von seite.php enthält.
Nun habe ich im Admin CP in ein Template ///navigation/// eingefügt. Nun habe ich ja das fertig ersetzte Template in einer Variable ($overcontent) gespeichert und möchte dort per preg_replace "///navigation///" durch "Hier kommt später die Navigation hin" austauschen.
Allerdings funktioniert dann nichts mehr, keines der beiden Templates wird angezeigt und ich habe nur noch den reinen Inhalt von seite.php.
Wenn ich nicht versuche, "///navigation///" austauschen zu lassen, wird aber ganz normal geladen.
Überhaupt habe ich das Problem, ich kann in keinem fertig zusammengesetzten Template irgendetwas austauschen und ersetzen. Z.B. Umlaute oder sowas. Es wird nicht gemeldet, dass die Funktion nicht funktioniert hätte, sondern das, was eigentlich ausgetauscht werden sollte, bleibt genauso, wie es war. Irgendwie verwirrt mich das.
Ist sowas also überhaupt möglich und wenn ja, wie?
Ich hoffe, irgendwer hat mich hier verstanden. ^^
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
Ich bau mir bei sowas immer Debugmeldungen ein und schau, was genau der Funktion wirklich gegeben wird und was sie zurückliefert. Meistens merkt man dann recht schnell den Fehler oder kann durch ausprobieren in einer interaktiven PHP Shell herausfinden warums nicht klappt.
Beiträge: 3
Themen: 1
Registriert seit: 20.09.2009
Danke schonmal für die Antwort.
Ich habe das auch schon immer wieder versucht, aber irgendwie wird das nichts.
Was ich auch sehr merkwürdig finde:
str_replace("a", "ä", $string);
funktioniert.
str_replace("ä", "ä", $string);
will partout nicht funktionieren.
Jedenfalls nützen mir die Debugmeldungen auch nichts. Es gibt keinen Hinweis darauf, dass die Funktion nicht erkannt oder nicht verwendet wurde. Nur irgendwie funktioniert sie trotzdem nicht...
Beiträge: 25.766
Themen: 269
Registriert seit: 20.09.2005
Wie lautet denn dein gesamter Code?
Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
Um da drauf antworten zu können müsste man halt wissen was denn in $string nun gerade drin steht, gerade bei Umlauten kann man da noch Zeichensatzprobleme bekommen, str_replace wird z.B. kein UTF-8 ä ersetzen wenn nach einem ISO-8859-1 ä gesucht wurde.
Beiträge: 3
Themen: 1
Registriert seit: 20.09.2009
21.09.2009, 18:09
(Dieser Beitrag wurde zuletzt bearbeitet: 21.09.2009, 22:18 von Philyan.)
PHP-Code:
<?php
define("IN_MYBB", 1);
//define("NO_ONLINE", 1); // Wenn Seite nicht in Wer ist online-Liste auftauchen soll
require("global.php");
eval("\$overcontent = \"".$templates->get("overcontent")."\";"); // Hier wird alles über dem Inhalt geladen
eval("\$undercontent = \"".$templates->get("undercontent")."\";"); // Hier wird alles unter dem Inhalt geladen
$tabelle_textseiten = "textseiten";
// Wir ermitteln, ob überhaupt eine Seite existiert, die geladen werden könnnte.
if (!empty($_GET["seite"]))
{
$seite = $_GET["seite"];
$sql_exist = "SELECT * FROM $tabelle_textseiten WHERE name='$seite'";
$res_exist = mysql_query($sql_exist);
$anz_exist = mysql_num_rows($res_exist);
if ($anz_exist == 1)
{
$seiteexistiert = true;
$sql_seite = "SELECT * FROM $tabelle_textseiten WHERE name='$seite'";
$res_seite = mysql_query($sql_seite);
$arr_seite = mysql_fetch_assoc($res_seite);
}
else
{
$seiteexistiert = false;
$sql_start = "SELECT * FROM $tabelle_textseiten WHERE name='startseite'";
$res_start = mysql_query($sql_start);
$arr_start = mysql_fetch_assoc($res_start);
}
}
else
{
$seiteexistiert = false;
$sql_start = "SELECT * FROM $tabelle_textseiten WHERE name='startseite'";
$res_start = mysql_query($sql_start);
$arr_start = mysql_fetch_assoc($res_start);
}
$seite = $overcontent;
$seite = preg_replace("|///navigation///|", "Navi", $seite);
// Wenn die angeforderte Seite existiert, wird sie angezeigt:
if ($seiteexistiert)
{
add_breadcrumb($arr_seite["heading"]);
$seite .= "<td class=\"thead\"><strong>$arr_seite[heading]</strong></td>\n</tr>\n<tr>\n<td class=\"trow1\">";
$seite .= $arr_seite["inhalt"];
}
// Wenn die angeforderte Seite nicht existiert oder gar keine angefordert wurde, wird die Startseite geladen.
if ($seiteexistiert == false)
{
add_breadcrumb("Startseite");
$seite .= "<td class=\"thead\"><strong>Startseite</strong></td>\n</tr>\n<tr>\n<td class=\"trow1\">";
$seite .= $arr_start["inhalt"];
}
$seite .= $undercontent;
output_page($seite);
?>
So. Und hier lässt sich ///navigation/// partout nicht durch irgendetwas anderes austauschen...
Die Beiden Templates sehen so aus:
Overcontent:
Code:
<html>
<head>
<title>{$settings['bbname']} - Impressum</title>
{$headerinclude}
</head>
<body>
{$header}
<table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="margin-bottom: 20px;">
<tr>
Undercontent:
Code:
</td>
</tr>
</table>
{$footer}
</body>
</html>
Vielleicht weiß ja jemand jetzt mehr. ^^
Mir würde es sehr sehr helfen. =)
EDIT:
So, ich habe mir nun geholfen.
Ich bin in die inc/functions.php gegangen und habe dort einfach in der output_page() Funktion alles geändert, wie es sein soll.
Ich bedanke mich aber trotzdem sehr für eure Hilfe!
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
Vorsicht, SQL Injection. Du willst $var = $db->escape_string($_GET...);
Beiträge: 60
Themen: 2
Registriert seit: 11.07.2007
Das sollte dann zumindest escaped sein wenn man GET / POST Variablen verarbeitet.
Siehe dazu:
mysql_escape_string oder
mysql_real_escape_string
Dies ist keine Rechtsberatung - kein Support außerhalb des Board