Templates - Startseite anzeigen beim Aufruf von index.php

abakuz

Mitglied
Hallo zusammen,
hier kommt mein erster Beitrag.... :) :

Ich lerne grad den Umgang mit Templates und hab leider noch nicht sovie Erfahrung mit PHP.
Ich arbeite mit der Template-Klasse von phplib.
Um einen Überblick für den Umgang mit Templates zu bekommen, habe ich das Tutorial von
Nils Hitze durchgearbeitet und es funktioniert auch alles soweit.
Vielen Dank an Nils H. --> http://www.tutorials.de/tutorials23173.html

Nun zu meinem Problem:
Ich verstehe nicht wie ich es machen kann, dass beim starten von z.B. index.php mir als
erstes eine Willkommens-Seite angezeigt wird.

denn hier:

PHP:
 if(!isset($_GET["id"])) $id = 1;
 if(!isset($id)) $id = $_GET["id"];

wird ja eine id übergeben, wenn nicht nimmt er die Standard id=1 und den entsprechenden
Inhalt aus der DB.

Ich möchte aber nicht den Content, der z.B. hinter der id=1 steckt, laden, sondern eine
Startseite (z.B. index.php ) - die nicht aus der Datenbank stammt - anzeigen.

Ich hab schon einiges ausprobiert, komme aber nicht weiter.
Wie löst ihr das Problem mit der Startseite, brauche ich mehrere .tpl-Dateien, muss ich das mit "switch/case" machen...?
Fragen über Fragen, suche seit Tagen, aber leider habe ich keinen Ansatz.

Würde mich über eure Hilfe sehr freuen.
 
Also du kannst ja einfach wenn keine id übergeben wird eine anderen Variable setzten (z.B. $url). Danach kontrollierst du ob $url gesetzt ist, und wenn ja führst du eine oder mehrere Aktionen durch, wie eben z.B. die Datei includen, oder auf diese weiterleiten.

Ist dies das was du meinsch? Wenn ich dich nicht richtig verstanden habe, melde dich bitte noch mal :)

Dieses Problem habe ich bei mir gar nicht, da ich auch die Startseite in der Datenbank habe ;)
 
Danke für die schnelle Antwort.... :)
Alsooo, ich hab auch schon daran gedacht die Startseite in die DB zu packen, aber
da ich Anfänger bin, wollte ich nicht gleich übertreiben und langsam anfangen.
Da kommen mir nämlich gleich die Gedanken: "Was packe ich alles in die DB?
Wie verlinke ich die Bilder innerhalb der DB?
Liegen die Bilder auch auf der DB oder einfach nur auf dem Server.? .... :confused: .....etc...etc... ".

Aus diesem Grund wollte ich die "einfachere" Variante nehmen, aber auch diese scheint
mir nicht so einfach zu sein....*gg*

Momentan sieht mein Skript so aus:

PHP:
<?php

//Einfügen der Template Klasse von Kristian Köhntopp
require("inc/template.inc");
include("inc/db_connect.inc.php");//Meine Datenbank Verbindung

//Für FehlerMeldung (genauer)
//sonst nur: Query was empty!
error_reporting(E_ALL);
ini_set("display_errors", "1");


//Wenn keine ID uebergeben wurde
//nimmt das System die Standard ID
if(!isset($_GET["id"])) $id = "5";
if(!isset($id)) $id = $_GET["id"];

//Erstellen einer Template - Instanz
$tpl = new template();

//Datenbankabfrage zusammenstellen 
$sql = "SELECT * FROM title, content WHERE title.id = content.ct_id
AND title.id = $id";

//Datenbank wird abgefragt und Ergebnis in result gespeichert
$_result = mysql_query($sql) OR die(mysql_error());;

//Ergebniss wird im Feld ($_array) gespeichert 
$_array = mysql_fetch_assoc($_result);

//Definition der Variablen durch die die Platzhalter ersetzt werden.
$title = $_array["title"];
$content = $_array["content"];

//Template-Datei einen internen Alias zuordnen.
$tpl -> set_file ( array (
   "TEMPLATE"  		=> "templates/main.tpl",
   "HEAD"     		=> "head.html",
   "NAVI" 			=> "navi.html",
   "CONTENT" 		=> "content.html",
   "FOOTER" 		=> "footer.html"
));

//verarbeite template (bezeichnung temp kann beliebig gewählt werden)
$tpl->parse("temp", "templates/main.tpl");
$tpl->parse("temp", "HEAD");
$tpl->parse("temp", "NAVI");
$tpl->parse("temp", "CONTENT");
$tpl->parse("temp", "FOOTER");


//Inhalt den Platzhaltern zuordnen
//Ersetzen der dynamischen Variablen aller Komponenten, bevor
//die schablone(Template) geparst wird!!
$tpl->set_var("TITLE", "$title");
$tpl->set_var("CONTENT", "$content");
$tpl->set_var("DATUM", date("d.m.y", time()));


//verarbeite das template
$tpl->parse("ausgabe", "TEMPLATE");

//Template parsen = Platzhalter durch Inhalt ersetzen, dann ausgeben
//p = (print) Ausgabe der gesamten Seite
$tpl->p("ausgabe");

?>

Es funktioniert auch wunderbar, es wird mir aber immer nur, im {CONTENT} - Bereich, der Inhalt angezeigt
der hinter der jeweiligen id steckt.
Wenn ich versuche die id irgendwie zu manipulieren, dann stimmt natürlich die SQL Abfrage nicht mehr und es erscheint ein Fehler.

Mein Problem ist, das ich nicht weiss wie ich nun die Startseite im {CONTENT} - Bereich als erstes anzeigen lasse.
Mit include hab ich es auch schon probiert, die Seite landet natürlich nicht da wo ich sie haben will, weil ja nicht angegeben
wurde, im welchen Bereich sie angezeigt werden soll.

Meinst Du mit der Variablen setzen z.B. das hier -->
$tpl -> setVariable($url);

Ich glaub ich muss noch viel lernen..... ;)
 
Zuletzt bearbeitet:
Nein, nicht ganz, meiner Meinung nach müsste dies etwa so aussehen:

PHP:
<?php

//Einfügen der Template Klasse von Kristian Köhntopp
require("inc/template.inc");
include("inc/db_connect.inc.php");//Meine Datenbank Verbindung

//Für FehlerMeldung (genauer)
//sonst nur: Query was empty!
error_reporting(E_ALL);
ini_set("display_errors", "1");


//Wenn keine ID uebergeben wurde
//nimmt das System die Standard ID

// ------------------------------------------------------------
// Hier die $url setzten
//-------------------------------------------------------------
if(!isset($_GET["id"])) $url = "index.php";

if(!isset($id)) $id = $_GET["id"];



// Tempalte oder File
if (empty($url)) {


//Erstellen einer Template - Instanz
$tpl = new template();

//Datenbankabfrage zusammenstellen 
$sql = "SELECT * FROM title, content WHERE title.id = content.ct_id
AND title.id = $id";

//Datenbank wird abgefragt und Ergebnis in result gespeichert
$_result = mysql_query($sql) OR die(mysql_error());;

//Ergebniss wird im Feld ($_array) gespeichert 
$_array = mysql_fetch_assoc($_result);

//Definition der Variablen durch die die Platzhalter ersetzt werden.
$title = $_array["title"];
$content = $_array["content"];

//Template-Datei einen internen Alias zuordnen.
$tpl -> set_file ( array (
   "TEMPLATE"          => "templates/main.tpl",
   "HEAD"             => "head.html",
   "NAVI"             => "navi.html",
   "CONTENT"         => "content.html",
   "FOOTER"         => "footer.html"
));

//verarbeite template (bezeichnung temp kann beliebig gewählt werden)
$tpl->parse("temp", "templates/main.tpl");
$tpl->parse("temp", "HEAD");
$tpl->parse("temp", "NAVI");
$tpl->parse("temp", "CONTENT");
$tpl->parse("temp", "FOOTER");


//Inhalt den Platzhaltern zuordnen
//Ersetzen der dynamischen Variablen aller Komponenten, bevor
//die schablone(Template) geparst wird!!
$tpl->set_var("TITLE", "$title");
$tpl->set_var("CONTENT", "$content");
$tpl->set_var("DATUM", date("d.m.y", time()));


//verarbeite das template
$tpl->parse("ausgabe", "TEMPLATE");

//Template parsen = Platzhalter durch Inhalt ersetzen, dann ausgeben
//p = (print) Ausgabe der gesamten Seite
$tpl->p("ausgabe");

}
else {
  include($url);
}

?>


Weisst du wie ich es meine? Wenn du diese Variante wählst, passe auf Cross Site Scripting und SQL-Injektion auf :D
 
Die beiden Links zu Wiki sind sind sehr nützlich, mit dem Thema "Sicherheit" werde
ich mich noch ausgiebig beschäftigen müssen. Zum Glück läuft bei mir - im Moment -
alles lokal.... :-)

Ich habe den Code, wie Du es vorgeschlagen hast, erweitert.
Leider kommen dann die Fehler:

Code:
Notice: Undefined index: id....
--> für Zeile:
PHP:
if(!isset($id)) $id = $_GET["id"];
Gleich drunter erscheint der Inhalt von der Startseite.

Das ist leider nicht so wie ich es mir vorstelle.
Das wäre natürlich eine Möglichkeit, doch ich möchte den Inhalt der Startseite nur im {CONTENT}-Bereich darstellen.
So müsste die Startseite, den gesamten Inhalt (Layout) etc.. beinhalten, aber das möchte
ich ja vermeiden.

Du verstehst sicherlich was ich meine?!
 
Dann mach es so:

PHP:
if(isset($_GET['"id"])) $id = $_GET["id"];

Ich bin mir nicht sicher aber was passiert wenn du hier einfach im Content index.php schreibst?
PHP:
//Template-Datei einen internen Alias zuordnen.
$tpl -> set_file ( array (
   "TEMPLATE"          => "templates/main.tpl",
   "HEAD"             => "head.html",
   "NAVI"             => "navi.html",
   "CONTENT"         => "index.php",
   "FOOTER"         => "footer.html"
));
 
Nachdem ich den Code mit

PHP:
if(isset($_GET["id"])) $id = $_GET["id"];

ausgetauscht habe, wird die Seite fehlerfrei dargestellt, d.h, ich sehe einfach
meinene Dummy-Text-Eintrag: "Willkommen auf...." (ohne Layout etc...)

anschliessend habe ich ersetzt:
PHP:
"CONTENT" => "content.html",

durch
PHP:
"CONTENT" => "index.php",

doch das hat leider keinerlei Auswirkung auf die Darstellung des vorhergenannten...
da steht immer noch ""Willkommen auf....".
 
Ja dann musst du natürlich die if-Bedingung oben wieder rausnehmen, damit er nich mehr index.php includet, sondern das macht was er auch bei jeder anderen Seite macht.

Sprich probier mal was passiert wenn du den Code nimmst den du zuvor am Anfang gepostet hast und dannersetzte dort content.html durch index.php. Wenn dies geht lohnt es sich dann weiter zu coden und das ganze dynamisch zu machen :)
 
Re: Templates - Startseite anzeigen beim Aufruf von index.php - PROBLEM GELÖST

Es Klaaappppt......Super.....
Die einfachste Variante hatte ich natürlich nicht ausprobiert...*gg*

Ich habe - wie Du vorgeschlagen hast - den gesamten ursprünglichen Code genommen
( Thread: 13.10.05 11:10 ) und einfach an der Stelle:

PHP:
//Template-Datei einen internen Alias zuordnen.
$tpl -> set_file ( array (
   "TEMPLATE" => "templates/main.tpl",
   "HEAD"    => "head.html",
   "NAVI"     => "navi.html",
   "CONTENT" => "content.html",
   "FOOTER"  => "footer.html"
));

content.html mit index.php ersetzt....
Und siehe da, es steht alles da wo es stehen soll.
Das zeigt mir wiederum das es sich lohnt, zu lernen, einfach zu denken..... :-)

Es gibt natürlich noch viele andere Fragen, aber die Antwort zur Frage in diesem Thread ist somit beantwortet.

Vielen, vielen Dank für Deine Mühe!
 
Zurück