Portal > Foren > PHP > PHP-Programmierung > eigenes Template System mit Sprachunterstützung
Thema geschlossen
 
Themen-Optionen
Alt 11.09.2006, 18:14 Nach oben    #1
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard eigenes Template System mit Sprachunterstützung

Hallo,

ich bin neu hier. Hab mal ein bisschen gestern geguckt. Hab dort ein Template System (Tutorial) gefunden, heute nicht mehr Aber das war mir irgendwie auch nen bisschen zu schwierig
Ich kenn mich gut mit HTML, CSS und Javascript aus. Aber sehr schlecht bisher mit PHP und MySQL. Trotzdem möchte ich aber gerne ein eigenes Templatesystem erstellen mit Platzhaltern natürlich und wo ich mehrere Sprachen auswählen kann. Also so wie bei PHPBB2 {L_...}, sowas wäre super.
Ich bin zwar schon sehr froh das jetzt entlich mal Smarty bei mir läuft aber wie ich da so eine Funktion hinzufügen kann weis ich leider nicht.
Ich bin bei meinem Tutorial bis zu dem Punkt "MySQL Tabellen" gekommen. Das Wissen bis dahin reicht leder nicht aus für so ein System oder? http://tut.php-q.net/ außerdem würde ich sehr gerne wollen das Hyperlinks einen extra Platzhalter wie z.B. {H_...} bekommen. Ist das möglich?

Vielleicht könnt ihr mir hier gute Tipps und vor allem Tutorials geben die auch funktionieren (bei mir hat bisher fast keins funktioniert ).

Ich hoffe es mal! Denn ich plane die Version 2 der Homepage FairLife (http://www.fairlife-projekt.de)
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 11.09.2006, 19:00 Nach oben    #2
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 395
Standard

Wie, du hast gestern geguckt und heut isses nich mehr da?

http://www.developers-guide.net/forums/showthread.php?t=684
hier isses doch

http://www.developers-guide.net/forums/showthread.php?t=407
und hier noch eins ...

Wie wärs, wenn du dir zuerst mal alle Artikel von tut.php-q.net durchließt, dann ein wenig OOP auf http://php.net/oop5 , und dich dann erst an ein Template-System wagst?

Jojo

PS: Das mit der Satzstellung üben wir aber noch ein wenig...
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int

Geändert von Ben (19.06.2007 um 18:22 Uhr).
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 11.09.2006, 19:18 Nach oben    #3
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard

jo, genau das ist es!

das erste.

Gefällt mir recht gut. Hab es eingebunden und klappt mal ausnahmsweise bei mir!
Jetzt hätte ich noch zwei Fragen:

1. Wie kann ich den Platzhalter {H_...} "reservieren" in dem ersten Template System?
2. Ich möchte gerne weitere Templates unter verschiedenen Ordnern in dem "/templates" Ordner machen. Wie geht das? Also ich möchte jetzt nicht nur ein Template wo "/template/index.tpl" ausreicht, sondern z.B. "/template/default/index.tpl" einrichten und noch andere!

Wie geht das? Aber gleichzeitig das er nicht direkt geladen wird vom Index

< ------------------------------------------------------------------------------------------------ >
Doppelposting - 2ter post:
< ------------------------------------------------------------------------------------------------ >


Zitat:
Zitat von Jojo Beitrag anzeigen
Wie wärs, wenn du dir zuerst mal alle Artikel von tut.php-q.net durchließt, dann ein wenig OOP auf http://php.net/oop5 , und dich dann erst an ein Template-System wagst?

Jojo
Wenn du mal in das Tutorial guckst wirst du feststellen das außer dem Punkt "Template System Smarty" nichts interessantes mehr kommt was ich für ein Template System brauche

Geändert von Jann Hendrik (11.09.2006 um 20:44 Uhr). Grund: doppelposting
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 11.09.2006, 20:42 Nach oben    #4
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 239
Standard

Es geht ja auch nicht um ein Tutorial zu Templates, sondern darum, dass du dir PHP-Kenntnisse aneignest, damit du das gewünschte umsetzten kannst.

Dass läuft hier nicht nach dem Prinzip: Ich stelle eine Frage und die Community liefert mir Code. Gegen Geld sieht das dann schon anders aus.
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 11.09.2006, 20:45 Nach oben    #5
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 395
Standard

Nein, sicherlich nicht, aber du sagst selbst von dir, dass du nicht gut in PHP bist.

Wenn du erst bei MySQL bist, gilt es meiner Meinung nach für dich noch viel zu lernen.
Auch wenn es nicht direkt was mit deinem Template-System zu tun hat ist es dennoch zwingendes Grundwissen.

@Artemis danke, war zu langsam


Desweiteren könntest du mit dem Grundwissen, das wir dir anraten deine Fragen selbst lösen, wobei ich nicht genau weiß, was du mit 1. meinst.
assign() ?
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 13.09.2006, 17:05 Nach oben    #6
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard

So, ich hab mir jetzt alles von MySQL im Tutorial durchgelesen, dann OOP, Regex und Sessions, allerdings von Sessiona hab ich ehrlich gesagt nichts so richtig verstanden!
Aber für ein Template System brauch ich das ja auch nicht und wie soll ich es weiter machen eurer Meinung nach?

Ich sollte mir das OOP ja erst durchlesen!
Ich hab mir danach heir das Template System angeguckt, verstehe immer noch nicht alles. Aber vorher hab ich nix verstanden davon, jetzt wenigstens etwas!

Immer noch die 2 Fragen.
1. Ist es möglich mehrere Templates in Ordnern zu erstellen ohne sie direkt mit der load Funktion zu laden und an die bereits bestehende Seite "anzuhängen"
2. Ist es auch möglich mehrere Sprachen zu erstellen?
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 13.09.2006, 19:52 Nach oben    #7
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 395
Standard

Sicherlich ist das möglich, aber so leid es mir tut:
Hier bekommst du für lau keinen fertigen Code (außer in den Tutorials).
Versuch doch mal, das Templatesystem nachzuschreiben (nicht copy&paste) und dann versuche, deine Ideen zu implementieren.
Wenn du nicht weiterkommst und schon nen Anfang hast, dann helfen dir sicherlich alle Leute hier gerne.

Grüße,
Jojo
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 13.09.2006, 21:02 Nach oben    #8
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard

Hi, ich bin schon dran das Skript direkt mit meinen Modifikationen neu zu schreiben
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 13.09.2006, 21:06 Nach oben    #9
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.482
Standard

Zitat:
Zitat von jjelliss Beitrag anzeigen
Hi, ich bin schon dran das Skript direkt mit meinen Modifikationen neu zu schreiben
Fein. Bei konkreten Fragen kannst du dich ja dann hier melden.

Viel Erfolg.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 13.09.2006, 21:25 Nach oben    #10
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard

Oh, aha.
Nagut, guck ich mal!
Da ich allerdings recht genaue Vorstellungen von meiner Seite habe was sie alles können soll/muss und was meine Klasse können muss - muss ich fast alles neu schreiben!
Aber - ich muss sagen, wenn man solche Sachen selber schreibt wird einem sowas viel verständlicher.
Aber trotzdem, weis ich noch viel zu wenig über PHP schätze ich - das kommt erst bei der Anwendung denke ich!
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 13.09.2006, 22:39 Nach oben    #11
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard

Ok, meine erste Frage

ich bin grad dran mir für all meine Verzeichniss einen Platzhalter zu erstellen.

Weiter --> Wenn ich jetzt nach der ersten Vorlage vorgehe und ein Template lade gelten die Platzhalter doch nur für dieses eine Template oder?
Was muss ich da machen damit das nicht so ist?
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 13.09.2006, 22:49 Nach oben    #12
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.482
Standard

Welche "Vorlage"?

Ich verstehe überhaupt nicht, was du eigentlich machen willst.
Hilfreich ist immer eine Codepassage, kann auch eine Programmablaufplan sein, heißt, dass du uns helfen kannst, wenn irgendwie darstellst, was du machen willst (was z.B. wann geschehen soll bzw. das Gegenteil) und was nicht klappt.


Ins Blaue geraten.
Wenn du in Skript A ein Template lädst und dort einem Template etwas zuweist (mit einer entsprechenden Methode), dann ist das natürlich in Skript B weg.

Hm ..

Stell deine Frage bitte etwas ausführlicher. Danke.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 13.09.2006, 23:08 Nach oben    #13
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard

Fast richtig,
ich parse den Code noch nicht, denn ich probiere ständig rum!

Also - ich lade ja die komplette Klasse in der Index.php z.B.
darin leg ich ja auch ein Template fest. Dieses wird dann mit open über fopen aufgerufen. Aber jetzt möchte ich das der Code in Template 2 auch auf Platzhalter überprüft wird, jedoch ohne dieses direkt mit open() zu laden

Ich benutzer diese Vorlage: http://www.developers-guide.net/forums/showthread.php?t=684

Geändert von Ben (19.06.2007 um 18:23 Uhr).
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 13.09.2006, 23:26 Nach oben    #14
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 395
Standard

Zitat:
Zitat von jjelliss Beitrag anzeigen
Fast richtig,
ich parse den Code noch nicht, denn ich probiere ständig rum!

Also - ich lade ja die komplette Klasse in der Index.php z.B.
darin leg ich ja auch ein Template fest. Dieses wird dann mit open über fopen aufgerufen. Aber jetzt möchte ich das der Code in Template 2 auch auf Platzhalter überprüft wird, jedoch ohne dieses direkt mit open() zu laden

Ich benutzer diese Vorlage: http://www.developers-guide.net/forums/showthread.php?t=684
Das ist nich möglich, da du ja irgendwie das Template durchsuchen musst.
Aber dazu musst du es ja erst einlesen!
Allerdings kannst du es ja einlesen und auf Platzhalter überprüfen, ohne es zu parsen und auszugeben. Davon hält dich ja niemand ab.

Allerdings ist dies ein Fall der sicherlich nicht so in der Vorlage vorgesehen ist.
Du musst diese Funktionalität eben selbst implementieren.

Hoffe ich konnte dir helfen.

Grüße,
Johannes
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int

Geändert von Ben (19.06.2007 um 18:23 Uhr).
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 14.09.2006, 02:47 Nach oben    #15
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.482
Standard

Zitat:
Zitat von Jojo Beitrag anzeigen
Allerdings ist dies ein Fall der sicherlich nicht so in der Vorlage vorgesehen ist.
Aus gutem Grund. Das, was du machen willst ergibt für mich nämlich genau keinen Sinn.

Mach dir doch mal klar, wie so ein Template-System prinzipiell laufen sollte.
  • Template auswählen, z.B. abhängig von der URL, die aufgerufen wurde oder je nach Skript
  • Template einlesen, z.B. aus einer Textdatei
  • den Platzhaltern im Template Daten zuweisen
  • "parsen", d.h. die Plaltzhalter mit den entsprechenden Daten ersetzen
  • Template ausgeben, z.B. im Browser

Das, was du da schilderst findet, zumindest in meinem Ablaufplan, überhaupt keine Verwendung!

Vielleicht erklärst du wirklich mal etwas genauer
Zitat:
Zitat von Ben Beitrag anzeigen
was du eigentlich machen willst.
Ist sicherlich auch in deinem Sinne, wenn wir verstehen, was du vorhast!

Danke.
Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 14.09.2006, 08:38 Nach oben    #16
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard

Also - stellt euch doch mal vor.

Eine richtig "aufwändige Seite" mit mehreren Designs.
So - dafür brauch ich natürlich mehrere Template.
Ein Template das mit dem Design simpleBlue z.B. ausgeführt wird, eins das mit simpleGrey ausgeführt wird und eins das z.B. mit simpleRed ausgeführt wird.

So - das sind 3 verschiedene index.tpl Seiten, jede mit einem anderen Stylesheet für die verschiedenen Designs (logisch?)

So - jetzt bringt es mir natürlich nix wenn sag ich mal z.B. nur simpleBlue geparst wird und die anderen Template Dateien nicht!

Aber der User möchte natürlich nicht gleichzeitig alle drei Designs sehen sondern sich für eins entscheiden. SimpleBlue, dann soll simpleGrey und simpleRed nicht ausgegeben aber geparst werden.

So - auf der simpleBlue index.tpl kann man ja dann per Dropdown Menü (Formular) z.B. mit GET ein anderes Design einfach auswählen!


Jetzt verstanden????
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 14.09.2006, 08:46 Nach oben    #17
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.482
Standard

Zitat:
Zitat von jjelliss Beitrag anzeigen
der User möchte natürlich nicht gleichzeitig alle drei Designs sehen sondern sich für eins entscheiden. SimpleBlue, dann soll simpleGrey und simpleRed nicht ausgegeben aber geparst werden.
Totaler Schwachsinn.

Sorry, wenn ich das so deutlich sagen muss.
Das ist unnötig aufgewendete Rechenleistung. Ein Template wird nur dann geparsed, wenn es auch benötigt wird.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 14.09.2006, 08:56 Nach oben    #18
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard

Gut, anderes Beispiel:

Es wird von einem User aufgerufen, es wird aber nicht geparst!

Jetzt verstanden?

Ich kann im Moment nur sagen das \simpleBlue\index.tpl geparst und aufgerufen wird.

So - jetzt ruft aber ein User simpleGrey auf. PHP stellt fest das diese Datei ja gar nicht in der index.php steht und öffnet diese Datei als Text

so - und jetzt????

Jetzt verstanden??????????ß
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 14.09.2006, 09:09 Nach oben    #19
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.482
Standard

Du meinst, dass User A das Template simpleBlue und User B das Template simpleRed nutzen will und du deshalb beim Aufruf der index.php beide Templates parsen willst?


Deine Programmablauflogik ist falsch.
  • Aufruf der index.php
  • es wird festgestellt welcher User die Datei aufruft (der User ist ja eingeloggt und kan demnach z.B. über eine Session-Variable identifziert werden)
  • anhand der zuvor ermittelten Daten, z.B. der User mit der ID 4 und/oder dem Namen Hans, liest du jetzt aus seinen Einstellungen den zu verwendenden Style aus, z.B. simpleBlue
  • das Template wird eingelesen
  • ... weiter wie zuvor beschrieben

Stell dir folgende Situation vor. Du hast 242 Styles, wobei nur drei davon genutzt werden. Jetzt müsstest du bei jedem Seitenaufruf ALLE Styles parsen. Jou, das ist ein Paradebeispiel von ineffizienter Programmierung.

Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Alt 14.09.2006, 10:54 Nach oben    #20
Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 42
Standard

So, ich bins wieder und hab ein riesen Problem,
ich hab versucht das TemplateSystem erstmal nur für Sprachdateien und Standart Platzhalter zu erstellen, mit dieser kleinen If Anweisung hab ich herausgefunden das die Variable $template gar nicht übergeben wurde
PHP-Code:
if(!isset($template)) {
echo 
"Die Variable wurde nicht gesetzt";

trotzdem das System "eigentlich" richtig konfiguriert sein müsste. Es wird anscheinend jetzt so aussehen als hätte ich das alles kopiert und eingefügt, dem ist aber nicht so.
Ich füg mal meine Index.php und meine "class.php" an.
index.php:
PHP-Code:
<?php
include("class.php");
$tpl = new Template();
$tpl->load("index.tpl");
$tpl->out();
if(!isset(
$template)) {
echo 
"Die Variable wurde nicht gesetzt";
}

?>
class.php
PHP-Code:
<?php
class Template {

    protected 
$languageDir            =        'language/';
        protected 
$leftDelimiterL    =        '{L_';
        protected 
$rightDelimiterL    =        '}';
    protected 
$templateDir            =        'template/';
        protected 
$leftDelimiter    =        '{$';
        protected 
$rightDelimiter    =        '}';
        
    public function 
template($tpl_dir ""$lang_dir "") {
            
            if(!empty(
$tpl_dir)) {
            
$this->templateDir $tpl_dir;
            }
            if(!empty(
$lang_dir)) {
            
$this->languageDir $lang_dir;
            }
        return 
true;
    }
    public function 
load($file) {
        
$this->templateName $file;
        
$this->templateFile templateDir.$file;
    
        if(!empty(
$this->templateFile)) {
            if(
$fp = @fopen($this->templateFile,"r")) {
            
$this->template fread($fpfilesize($this->templateFile));
            
fclose ($fp);            
            }    
            else {
                
$message "Das Template konnte nicht geladen werden";
                return 
$message;
                return 
false;
            }
        }
        
$this->replaceFunction();
        return 
true;
    }
    public function 
assign($replace$replacement) {
        
$this->template str_replace($this->leftDelimiter.$replace.$this->rightDelimiter,$replacement,$this->template);
        return 
true;    
    } 
            public function 
loadLanguage($files)
            {
                
$this->languageFiles $files;
                    for (
$i=0;$i<count($this->languageFiles);$i++) {
                    if (!
file_exists($this->languageDir.$this->languageFiles[$i])) {
                        return 
false;
                    }
                    include(
$this->languageDir.$this->languageFiles[$i]);
                }
                
$this->replaceLanguage($lang);
                return 
$lang;
            }
                            protected function 
replaceLanguage($lang)
                            {
                    
$this->template preg_replace("/".$this->leftDelimiterL."(.*)".$this->rightDelimiterL."/isUe""\$lang[strtolower('\\1')]"$this->template);
                    return 
true;
            
                            }
    public function 
out()
    {
        echo 
$template;
        return 
true;
    }

?>
Es wäre schön wenn ihr euch den Code mal angucken könntet was da falsch gelaufen sein könnte!

Dann hab ich noch eine andere Frage undzwar wieso steht in out() echo und nicht include oder require/require_once? Er soll den Text ja nicht ausgeben sondern laden!

Geändert von Ben (14.09.2006 um 10:57 Uhr). Grund: Code-Tags in PHP-Tags umgewandelt
jjelliss ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Thema geschlossen

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] Ein eigenes Templatesystem schreiben