HTH-C.com - Forum
Latest News Latest Threads
Neuerung: Persönliche Galerie
Informationen zur Übernahme der Erweite..
HTH Blog - Version 2.0
#HTH.Systems - Betatester gesucht
Neueröffnung - PHPKit-Award.de
HTH Webchat v3
Letzter Beitrag Happy Birthday Bottyline Weiblicher Benutzer Heute, 0:00 Zeit der letzten Antwort
Letzter Beitrag Herzlich Willkommen Botty Männlicher Benutzer 22.11.2024 - 20:45 Zeit der letzten Antwort
Letzter Beitrag Gibt es eigentlich noch jemand der PHPki.. Dooki Männlicher Benutzer 16.07.2024 - 19:47 Zeit der letzten Antwort
Letzter Beitrag PHPKit 1.6.6 WEBI Männlicher Benutzer 24.06.2024 - 12:58 Zeit der letzten Antwort
Letzter Beitrag PHPKit 1.6.6 ohne ASCE auf PHP8x Myrddin Männlicher Benutzer 22.03.2023 - 12:36 Zeit der letzten Antwort
 55.476 Posts & 4.945 Themen in 78 Foren
Forenübersicht » Support / Hilfe » Allgemein » PHP/MySQL » template parser+content

template parser+content
29 Beiträge in diesem Thema
 Seiten (2):    1     2    Next    >  
04.01.2008 - 18:49 Uhr
Beitrag: #1
Hallo allerseits.
Ich arbeite im Moment an einer Website welche mit templates aufgebaut wurde.
Dafür habe ich mich eine lange zeit durch das Web gesucht und einige funktionen gefunden.
Ich verwende dafür folgende funktion:



1
2
3
4
5
6
7
8
9
10

PHP-Quelltext


 // TEMPLATE PARSER FÜR DIE TEMPLATES.
function gettemplate($template,$endung="htm")
{
$templatefolder "templates";
return 
str_replace("\"","\\\"",implode("",file($templatefolder."/".$template.".".$endung)));
}
function 
dooutput($template) {
echo 
$template;


In meiner index.php verwende ich also die aufrufe für das ganze !!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

PHP-Quelltext


<?php
session_start 
();
include(
"funktions.php");
.
Hier sind noch ein paar kleine Sachen wie mysql zugriff usw.
.
// Sql Abfrage f&uuml;r Daten der Hauptseite (Seitenbreite,Name,Copyright,Metatags).
$sql "SELECT * FROM site_config";
    
$result mysql_query($sql) OR die(mysql_error());
    
    if(
mysql_num_rows($result)) {
       while( 
$row mysql_fetch_assoc($result) ) {
    
$row array_map('htmlspecialchars'$row);
$site_width $row['site_width'];
$site_name $row['site_name'];
$site_copy $row['site_copy'];
$site_metatags $row['site_metatags'];

}
}
if (
$_SESSION['loggedin'] == TRUE) {
} else {
eval (
"\$infobar = \"".gettemplate("infobar")."\";");
}
//jetzt der Aufruf, wo die Templates geholt wird und die Platzhalter ersetzt werden.
eval ("\$site_kopf = \"".gettemplate("s_kopf")."\";");
eval (
"\$site_content = \"".gettemplate("content")."\";");
eval (
"\$site_fuss = \"".gettemplate("s_fuss")."\";");
eval(
"dooutput(\"".gettemplate("site")."\");");

?>  

Im content ist die variable $content eingebaut. Und genau an dieser Stelle soll nun per switch oder GET übergabe der richtige Content eingefügt werden.

Ich habe z.B. im Ordner Content mehrere Dateien liegen, wie z.B. die Userlist.php
In dieser datei sind die mysql abfrage für die ausgabe und die template ausgabe



1
2

PHP-Quelltext


eval ("\$content .= \"".gettemplate("userlist")."\";");

Aber mein Problem ist das ich erstmal noch ein switch bräuchte oder ähnliches um die Dateien zu wechseln.

Hoffe ihr könnt mir helfen!!

Mfg. Oliver

 
Zum Anfang der Seite
05.01.2008 - 00:47 Uhr
Beitrag: #2
Joa dann mach doch nen switch  lachend
Im großen und ganzen keine schwierige Sache




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

PHP-Quelltext


switch($_GET['content']) {

    case 
"gb":
        eval (
"\$content = \"".gettemplate("gb")."\";");
        break;

    case 
"forum":
        eval (
"\$content = \"".gettemplate("forum")."\";");
        break;

    default: 
        eval (
"\$content = \"".gettemplate("start")."\";");
        break;
}


das funktioniert wie folgt : index.php?content=gb
hinten dran kann alles mögliche musste nur immer mit case angeben

Mit default wird festgelegt was passiert wenn nichts von den angegeben dabei ist

 
Zum Anfang der Seite
05.01.2008 - 13:11 Uhr
Beitrag: #3
Hallo und erstmal vielen Dank.
Ich habe mir dein Beispiel angeschaut und war irgentwie verwirrt. Anhand deinem Beispiel lädt er allerdings doch nur das Template und nicht die dazugehörige php datei. Aber Ich habe das ganze jetzt anders gelöst und es klappt alle wunderbar.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

PHP-Quelltext


// Contentfunktion zum laden der Inhalte.

$dateien = array(); //Erstellt einen neuen Array $dateien
$dateien['start'] = "content/start.php"//f&uuml;r jede Section ein neue Variable
$dateien['userlist'] = "content/userlist.php";  //usw.
$dateien['userinfo'] = "content/userinfo.php";
$dateien['profil'] = "content/profil.php";  
$dateien['suche'] = "content/suche.php"
$dateien['register'] = "content/register.php"
$dateien['guestbook'] = "content/guestbook.php"


if(isset(
$_GET['action']) AND isset($dateien[$_GET['action']]))
{
  if(!
file_exists($dateien[$_GET['action']])) echo "Die Datei ist nicht vorhanden.";

 include 
$dateien[$_GET['action']]; 
}
else
{
  include 
$dateien['start']; 


Was mir aufgefallen ist, dass die verwendete Templatefunktion dem des phpkit sehr ähnlich ist.
Deshalb habe ich auch erstmal gedacht, man könnte das like phpkit machen mit der GET Übergabe.

Also zum Laden des Contents ist jetzt alles da.
Allerdings hab ich nun ein paar kleinere Probleme mit der Navigation. Ich habe in meinem Haupttemplate links und rechts tabellen angelegt die neben den eigentlichen "Content" stehen. Dort habe ich Variablen eingesetzt ( $nav_links, $nav_rechts). Ich würde gerne so Sachen wie Login oder Suche in Boxen packen und die dann an der richtigen Stelle einfügen lasse. Ist es irgentwie möglich so eine einfache version der Navigation wie beim phpkit zu erstellen, also Boxen in den Variablen zu verwenden ??

Mfg. Oliver

 
Zum Anfang der Seite
06.01.2008 - 12:24 Uhr
Beitrag: #4
Gut ok
Klar is das machbar.
Musste doch eigentlich nur dein Template machen als "Box" machst ne tabelle
Titel usw. rein und dann den eigentichen kram
dann machste eval ("\$box= \"".gettemplate("start")."\";"); und baust sie so ein
Sollte doch eigentlich gehen. Weis zwar nich wie dein Code aussieht aber denke mal is machbar so.

 
Zum Anfang der Seite
06.01.2008 - 13:58 Uhr
Beitrag: #5
Ok danke, an sowas ähnlichem habe ich auch gedacht.
Also meine index.php ist ja oben beschrieben, allerdings ist jetzt noch



1

PHP-Quelltext

eval ("\$navigation_right = \"".gettemplate("navigation_right")."\";");

dazugekommen. In meiner content.htm, dort wo der Inhalt liegt ist nun für die rechte navi



1

PHP-Quelltext

$navigation_right 
eingefügt worden. Nun müsste ich ja im Prinzip eine Abfrage machen, ob jemand eingeloggt ist oder nicht. Wenn nicht, dann soll er das template mit dem loginformular anzeigen. Wenn doch, dann zeige mir das template mit der Schnellzugriffliste an z.B. Aber ich würde ja gerne mehrere "Boxen machen" Ich habe auch als template für navigation_right einen einfachen Quellcode verwendet:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

PHP-Quelltext


<table border="0" cellspacing="0" cellpadding="0" width="140">
<
table border="0" cellspacing="0" cellpadding="0" width="140">
<
tr>
<
td width="100%" height="25" style="background-image: url(images/navigation_top.png); background-repeat:no-repeat">$navigation_title</td>

</
tr>
</
table>
<
table border="0" cellspacing="0" cellpadding="0" width="140">
<
tr>
<
td width="8" style="background-image: url(images/left.png)"><img border="0" alt="0" height="6" width="8" src="images/blank.gif" /></td>
<
td width="100%" valign="top">$navigation_body</td>
<
td width="8" style="background-image: url(images/right.png)"><img border="0" alt="0" height="6" width="8" src="images/blank.gif" /></td>
</
tr>
</
table>
<
table border="0" cellspacing="0" cellpadding="0" width="140">
<
tr>
<
td width="140" height="25" style="background-image: url(images/navigation_foot.png); background-repeat:no-repeat"></td>
</
tr>
</
table>
</
table>

Ich würde jetzt gerne eine Abfrage aufbauen welche Boxen sozusagen in einer Datenbank speichert.
Dazu gebe ich eine ID anhand der man die box identifizieren kann, die Position, ob als 1. oder 2 oder... Box sowie dem Zugehörigen Inhalt. Das ganze soll dann den Inhalt $navigation_right füllen und als Grundtemplate die navigation_right.htm nutzen !! Nun meine Frage: Ich müsste das ja sozusagen "virtuell erstellen".
Im Prinzip einfach, mysql abfrage mit ID, Position, Inhalt. Wie könnte man denn eine einfache Abfrage realisieren ??

Mfg. Oliver

 
Zum Anfang der Seite
06.01.2008 - 14:51 Uhr
Beitrag: #6
Naja du machst halt ne Abfrage an die Datenbank und holst die Daten raus.
Mit ner While Schleife gibste dann alles aus und so kannste dann auch mehrere Boxen machen die dann der Reihe nach ausgegeben werden.
Ich weis nur leider nicht wie weit deine Kenntnisse reichen dazu zwinkern
Brauchste nur nen Denkanstoß oder Code?

 
Zum Anfang der Seite
06.01.2008 - 16:04 Uhr
Beitrag: #7
Naja, beides wäre nicht schlecht  
Vielleicht lässt sich ja was zusammen entwickeln.
Die Hauptsache wäre erstmal überhaupt ein System zu haben.
Da es im prinzip dem des phpkit ähnich sein könnte denke ich mal vielleicht auf sowas zurückzugreifen !!
Aber erstmal schauen  zwinkern

Also meine PHP Kenntnisse reichen schonmal soweit aus dass ich mich mit dem einfachen "bereichen" auf jeden fall zurechtkommen kann. Alles was so "Profi" ist, da muss ich mich sehr lange durchlesen und oft beschäftigen !!  Glücklich

Mfg. Oliver

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von xlanhackerx - 06.01.2008 - 16:06 Uhr
 
Zum Anfang der Seite
07.01.2008 - 15:35 Uhr
Beitrag: #8
Dann bleib doch beim Kit grosses Lachen
da haste alles was du brauchst ^^

 
Zum Anfang der Seite
07.01.2008 - 17:43 Uhr
Beitrag: #9
Ne genau das möchte ich ja nicht.. Vielleicht kannst du mir ja irgentwie nen simplen Code oder Tipp geben der mir weiterhelfen könnte. Ich habe bereits eine mysql datenbank mit dem tabellennamen: navigation!!
Dort sind die felder: (id,titel,position,content). Ich würde jetzt gerne eine abfrage erstellen welche schaut, ob ein Eintrag in der Datenbank steht: Also z.B. Title: Loginbox (dies erscheint im header des templates (navigation_right.htm) dann die ID des eintragen (1) sowie dem Content ($box = login). Dabei soll dann die Variable $box einem anfang der includeten Datei entsprechen also include('navigation/box/login.box.php) sein.
Ich hoffe ihr versteht mich !! Für andere Vorschläge bin ich gerne bereit !!

Mfg. Oliver

 
Zum Anfang der Seite
08.01.2008 - 15:49 Uhr
Beitrag: #10
also du machst erstmal ne abfrage ob was drin is in der datenbank



1
2
3
4
5
6
7
8
9
10
11
12

PHP-Quelltext



$abfrage mysql_query("SELECT * FROM navigation ORDER BY position ASC");
if(
mysql_num_rows($abfrage) == 0) echo "bei dieser ausgabe sind keine eintr&auml;ge vorhanden";

while(
$navi mysql_fetch_array($abfrage)) {

  
$box $navi['box']
 
// usw. blablabla.....
 
include 'navigation/box/'.$box.'.box.php';

}


Hier kommt ne Meldung wenn nix drin is in der DB und wenn was drin is wird es ausgelesen und die datei.php wird includet der reihe nach

 
Zum Anfang der Seite
09.01.2008 - 19:05 Uhr
Beitrag: #11
Hmm. danke das hat mir sehr geholfen, allerdings verstehe ich hier jetzt etwas nicht.
Wo kommt denn die Variable her



1

PHP-Quelltext

$box $navi['box'];
??
Ich habe ja nur 4 Felder, ID, Titel, Position und content !! Muss ich vielleicht da was ändern ??
Ich hab mal einen Testeintrag gestartet, ID="1", Titel="Login", Position="1", Content="login".
Allerdings wird es nichts includet !



1
2
3
4

PHP-Quelltext


Warningmain(navigation/box/.box.php) [function.main]: failed to open streamNo such file or directory in /www/htdocs/w0093762/test/CMS/index.php on line 74

Warning
main() [function.include]: Failed opening 'navigation/box/.box.php' for inclusion (include_path='.:/usr/share/php:..'in /www/htdocs/w0093762/test/CMS/index.php on line 74


Man sieht, er hat keine Variable vor der .box.php deshalb kann er nix finden !!

Vielleicht kannst du ja nochmal den Code erklären !!

Mfg. Oliver

 
Zum Anfang der Seite
09.01.2008 - 21:03 Uhr
Beitrag: #12
Ups tut mir leid da habe ich mich wohl verleiten lassen
Hier der richtige Code:




1
2
3
4
5
6
7
8

PHP-Quelltext


$abfrage mysql_query("SELECT * FROM navigation ORDER BY position ASC");
if(
mysql_num_rows($abfrage) == 0) echo "bei dieser ausgabe sind keine eintr&auml;ge vorhanden";
while(
$navi mysql_fetch_array($abfrage)) {
  
$box $navi['Content]
 // usw. blablabla.....
 include '
navigation/box/'.$box.'.box.php';
}


Für was hast du eigentlich Titel und Content? Nur ma so nebenbei.
Falls du in deiner Datenbank Content kleingeschrieben hast dann ändere das im Code bitte.

$navi ist ein array in dem alle Datensätze aus deiner Datenbanktabelle drin stehen und mit while geb ich alle der Reihe nach aus.
danach lege ich die Variable 4box fest in dem ich im Prinzip das Feld Content auslese von den Datensatz wo die Schleife gerade ist.

Nun sollte der Code aber gehen.

 
Zum Anfang der Seite
10.01.2008 - 21:13 Uhr
Beitrag: #13
Ja das hatte ich mir auch überlegt. Ich hab ja irgentwie nur ne angabe machen müssen, Position, content. Ok hab das geändert und es funzt eigentlich einwandfrei.. Allerdings muss ich noch ein bischen am Design usw Arbeiten, bin ja auch mehr am Anfang von allem !!
Wenn jemand schauen möchte, Seite (test)

PS: Bitte nix zur Userlist sagen, ich weiß die muss noch umgebaut werden, sowie der Aktivierungslink, da muss auch noch einiges gemacht werden.. einfach ohne aktivierungslink einloggen, geht auch, ist aber noch nix los..

Mfg. Oliver

 
Zum Anfang der Seite
11.01.2008 - 14:05 Uhr
Beitrag: #14
Das wird schon noch
Wenn du Probleme hast weiste ja wo du nachfragen musst zwinkern

 
Zum Anfang der Seite
11.01.2008 - 18:31 Uhr
Beitrag: #15
Danke, ich hab jetzt nur noch 2 Felder in meiner " navi datenbank". Position und content. Ich hab da jetzt mal noch ne andere frage, und zwar würde ich ja gerne den Login folgendermaßen realisieren:

index.php?login=1

Das heißt ich muss eine Abfrage machen mit if submit login und dann den Code zum checken und blablabla.
Aber ich muss auch noch ein Verstecktes input feld anlegen mit value="1" oder??
Im Moment leitet mich mein loginformular auf /login.php weiter, dort wird gecheckt und dann per header wieder auf index.php zurückgeleitet !! Ich würde auch gerne das gleiche mit logout machen, also index.php?logout=1
Warum ?? Weil ich dann templates verwenden könnte, allerdings ist da jetzt wieder ein neues Problem.
Da man ja im Prinzip schon auf der Seite ist, vielleicht schon ein bischen geklickt hat und dann sich einloggen möchte, wird man ja wieder auf die Startseite also index.php geleitet. Also müsste ich doch einfach statt dem normalen header ein urldecode einsetzen oder ?? Hoffe ich hab mich nicht zu undeutlich ausgedrückt  überrascht

Mfg. Oliver

 
Zum Anfang der Seite
 Seiten (2):    1     2    Next    >  

Ähnliche Themen
 
Support Support » Template u. Style - Letzte Antwort von k!r!ka am 03.08.13, 20:09 Template u. Style  (03.08.13, 20:09)
Support Support » Template für Forenkategorien? - Letzte Antwort von Obumba am 30.04.13, 15:04 Template für Forenkategorien?  (30.04.13, 15:04)
Styles Styles » HTH-C Clan Template - Letzte Antwort von Instanz am 28.06.07, 16:35 HTH-C Clan Template  (28.06.07, 16:35)
Support Support » Newpost Template - Letzte Antwort von LiQuid am 23.08.07, 09:30 Newpost Template  (23.08.07, 09:30)
Styles Styles » HTH-C Clan Template - Letzte Antwort von David am 22.09.07, 13:55 HTH-C Clan Template  (22.09.07, 13:55)

HTH-C.com - Webmedien & Community