Sodelle, ich schmettere glatt mal die 1. Frage raus.
Mein Problem : Ich lade meine Templates für mein CMS per fopen, allerdings erhalte
ich dadurch irgendwie einen Haufen Zeilenumbrüche -> unvalider Code im nachhinein :(
Hier meine Funktion :
// Loading template
function loadtpl ($filename) {
$opentpl = fopen ($filename, 'r');
$file = fread ($opentpl, filesize ($filename));
return $file;
fclose ($file);
}
Meine index.php :
<?php
// Load Templates
$main = loadtpl ($MODULE['template']);
// Parse template and print out
$main = str_replace ('{pfad}', $a_PAGE['pfad'], $main);
$main = str_replace ('{build:navigation}', get_menu (), $main);
$main = str_replace ('{build:content}', get_content ($_GET['modul']), $main);
echo $main;
?>
Und hier könnt ihr auch das ganze gleich mal angucken (Quelltext anzeigen lassen) :
http://www.beatboxscene.de
Jemand ne Idee wie ich die Zeilenumbrüche wegbekomme bzw. woher die kommen?
xyz-48ke euch schonmal.
Edit: Stellt mal die Schriftgröße für die PHP-Highlights rauf bitte :/
kannst du den Code mit den fehlerhaften Zeilenumbrüchen - also die Ausgabe - hier kurz posten? Ich sehe auf deiner Seite nicht, was du meinst.
lG
brb
Quote
Original von xyz-207
Und hier könnt ihr auch das ganze gleich mal angucken (Quelltext anzeigen lassen) :
http://www.beatboxscene.de
;)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>....
Ich hab immer vor meiner XML Deklaration Zeileumbrüche drinnen.
*lol* das wäre mir gar nicht als Fehler aufgefallen, dachte, du hast HTML- Zeilenumbrüche.... aber im Template ist alles "sauber", oder?
Tja, da geht bei mir wieder der Perfektionist durch ;)
Japp, im Template ist bei mir alles sauber. Nur diese Zeilenumbrüche da
stören mich extrem, da dadurch bei der CSS Validierung was schief geht :(
// Loading template
function loadtpl ($filename) {
$opentpl = fopen ($filename, 'r');
$file = fread ($opentpl, filesize ($filename));
return $file;
fclose ($file);
}
das ist falsch.
gründe:
-nach return wird kein code mehr ausgeführt.
-selbst wenn der code noch ausgeführt würde, müsstest du $opentpl an fclose übergeben.
dein resultat ist nun, dass die datei bis scriptende offen bleibt. du könntest also niemals eine template 2 mal holen.
Wobei sich immernoch nicht das Problem löst ;)
Aber egal.....
Siehste mal, sowas passiert wenn man zu lange wach ist :/
xyz-48ke dir
dumme frage, aber wieso nutzt du nicht einfach file() bzw. file_get_contents() ?
ne quick'n'dirty lösung wäre, mit trim() nachzuhelfen, aber damit wirst du dich wahrscheinlich nicht zufrieden geben :D
deaktiviere mal systematisch diverse include anweisungen und schau, wann die whitespaces auftreten.
die natur (und damit auch PHP) würfelt nicht. ;)
Gute Frage :/
Wird gleich mal ausprobiert.
ich möchte in mein cms auch gerne eine template funktion einbauen...
kann man da an der gewünschten stelle nicht einfach per:
<?php include("template.html") ?> einfügen ???
und die inhalte mit preg_replace einfügen ????
also zB. {name} und dann {name} = preg_replace...
Du brauchst aber deinen Inhalt zunächst in einer Variable ;)
wobei das letztendlich keinen Unterschied macht, xyz-207 hat anstatt der Variable halt eine Funktion, die den jeweiligen Inhalt zurückgibt.
In meinen ersten Templates hatte ich unmittelbar php- includes stehen, so dass ich die templates direkt includieren konnte und nur den Vars vorher Werte zuweisen musste... nicht sehr schön, ging aber auch ;)
Zum Thema Template habe ich da noch einen Tipp.
Schaut euch da mal http://kuerbis.org/template/ an, da gibt es ne Templateklasse. Die kann man bei Bedarf ja einfach ins Deutsche übersetzen und nach Wunsch modifizieren.
Ansonsten zu den zeilenumbrüchen:
Ich benutze bei meinem Templatesystem auch file() und setze das Array dann per foreach einfach in der Variablen $file zusammen. Notfalls einfach alle "Leerzeichen" und somit auch Zeilenumbrüche am Anfang und Ende der Variablen rauswerfen. ;-)