HTML ausgabe per templates

  • Hi


    will von 100en echo wegkommen und templates machen..

    was für möglichkeiten gibt es zur ausgabe??

    mfg

  • Hi,

    du könntest eine Template-Engine wie z.B.
    Smarty] benutzen.
    In PHP übergibst Du dann Variablen mit z.B. HTML
    Inhalt an Smarty und kannst Sie dann in der HTML-Seite
    einbinden. {$meineVar} etc....

    Oder habe ich deine Frage falsch verstanden?

    Gruß VivaLosTioz

    2 Mal editiert, zuletzt von VivaLosTioz (30. August 2008 um 10:34)

  • also ich machs so:

    1) Grundseite: 'tpl/index.tpl' ist eine HTML-Seite mit Platzhaltern wie §CONTENT§
    2) Die wird mit file_get_contents(); in eine Variable gelesen.
    3) Mittels str_replace(); ersetze ich diese Platzhalten durch Datenbank-Einträge, andere Templatefile, oder anderes.
    4) Am ende kommt genau 1 echo-Befehl, der die Variable, die bearbeitet wurde ausgibt.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • vielen Dank für die Antworten!
    war genau das was ich gemeint habe!

    tolles forum :)

    mfg

  • Ich hab mir eine eigene gemacht:
    Nicht so umfangreich wie Smarty, hat aber schon ein paar Funktionen:
    Mit { } kann man auch Definitionen einbinden, die kann man sowohl innerhalb des Templates als auch im PHP machen, zusätzlich sind noch Parameter möglich, z. B. {quote |name| |text|}.

    Das ist dann aber schon etwas mehr Arbeit.
    Kannst natürlich erstmal einfache Platzhalter verwenden. ;)

  • Habe mir smarty nun angeschaut, ist wirklich etwas umfangreich. Außerdem ist die Serverauslastung bei mehreren Usern für meinen Server zu hoch^^

    Überlege nun auch etwas eigenes zu schreiben.
    Da man es bestimmt oft einsetzen kann und meinen Wünschen anpassen.

    Wieviel Zeit hast du investiert? Einfach so aus Ineresse!

    mfg

  • Also das geht in ein paar zeilen

    Die wichtigsten funktionen sind file_get_contents() und str_replace()

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Hat schon was gedauert.
    Aber ich würde wirklich erstmal nur mit einfachen Platzhaltern arbeiten, wenn du dann wirklich mal noch flexibler werden willst, kannst du mehr Funktionen einbauen.
    Am besten objektorientiert in PHP, schau mal hier und hier.
    Dann kannst du wirklich ganz einfach neue Funktionen einbauen.
    Kannst den Code vom Template entweder in einer Datenbank speichern oder in einer Datei, dann kannst du davor in der Klasse eine eigene Funktion schreiben und später kannst du problemlos wechseln. ;)
    Noch ein Hinweis, wenn dir Effizienz wichtig ist:
    Wenn es eine etwas umfangreichere Syntax gibt, überleg dir mal, ob manche Schritte nicht jedes Mal genau gleich ausgeführt werden, die kannst du dann einmal beim Anlegen ausführen und das Ergebnis speichern.

    Aber wie gesagt: Fang erstmal mit ganz einfachen Platzhaltern an. ;)
    Das schaffst du dann sicher schnell! Wenn was unklar ist - zur OOP zum Beispiel - frag einfach hier nochmal nach. ;)

  • also ich machs so:

    1) Grundseite: 'tpl/index.tpl' ist eine HTML-Seite mit Platzhaltern wie §CONTENT§
    2) Die wird mit file_get_contents(); in eine Variable gelesen.
    3) Mittels str_replace(); ersetze ich diese Platzhalten durch Datenbank-Einträge, andere Templatefile, oder anderes.
    4) Am ende kommt genau 1 echo-Befehl, der die Variable, die bearbeitet wurde ausgibt.

    Mal ne Zwischenfrage: Warum so umständlich?

    Ich nehme z.B. einfach für jede Seite (also Startseite und alle Unterseiten) je eine Datei. Kann .html oder auch .php sein, wobei man .html per .htaccess durch den PHP-Parser schicken muss. Und die Datei sieht dann etwa so aus:

    <?php

    require "php/body.php";

    body_start();

    include "html/content.html";

    body_end();

    ?>

    In die Funktion body_start() kommt alles rein was vor dem Content fürs Layout und die Navi nötig ist. Die Funktion body_end() sorgt für Footer z.B. und fertig. Die Datei content.html kann bei Bedarf natürlich noch weitere PHP-Funktionen aufrufen.

    Also ich finde, mit dem System hat man die perfekte Trennung von Content und Design. Und ist wesentlich übersichlicher als bei Content Management Systemen.

  • @jojo:
    Wenn man es so falsch macht wie der, dann sind die Systeme dumm ;)

    man kann auch platzhalter (beispiele von mir) wie §TABLE_ROWS§ oder §LOGIN_OR_STATS§ verwenden ;)

    damit hat man auch schleifen und abfragen mit einem platzhalter ;)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • LinuxMan:
    Ja und wenn du abfragen oder Datenbank-Einträge brauchst, die in ner schleife ausgelesen werden müssen?

    Damit hast du auch keine PHP und HTML-Trennung ;)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Damit hast du auch keine PHP und HTML-Trennung ;)

    Doch. Habe eben ja nur die Grundidee gepostet. Wenn man da weiter strikt, dann kann man z.B. das hier machen:

    <?php

    require "php/init.php";

    body_start(); include "html/content.html; body_end(); ?>

    die php/init.php enthält dann alles was an PHP gebraucht wird:

    <?php

    require "php/body.php"
    require "php/irgendwas1.php";
    require "php/irgendwas2.php";

    $globalURL="http://......";
    $globalIrgendwas=FALSE; # halt alles hier rein was auf jeder Seite gebraucht wird

    ?>

    Dann könnte php/irgendwas1.php z.B. Funktionen für Datenbankabfragen beinhalten. php/irgendwas2.php hält Funktionen für Mailversand, oder was auch immer.

    Und im Endeffekt habe ich halt im Stammverzeichnis alle Seiten die zur Domain gehören. Im Unterverzeichnis php alle Skripte und im Unterverzeichnis html den Content, der ja zur Hauptsache aus HTML-Code besteht. Ein kurzes <?php show_guestbook(); ?> in der HTML-Datei sollte ja wohl kein Problem der Unübersichtlichkeit sein. Oder?

  • wenn dus so machst: ja dann passts

    aber wie legst du zeilen in tabellen rein, die du aus datenbanken ausliest?

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • In Kurzform:

    <?php

    function show_data_table_xyz() {

    $datas=mysql_fetch_row($queryResult);

    $result="<table><tr><td>".$datas[0]."</td><td>".$datas[1]."</td><td>";
    $result.=$datas[2]."</td><td>".$datas[3]."</td></tr></table>\n";

    echo $result;

    return; }

    ?>

    Im HTML-Code wird dann diese Funktion an der Stelle eingefügt, wo die Tabelle hin soll.

  • aber das ist keine trennung ;)
    sondern aufsplittung von kleinen code-teilen ;)
    aber keine trennung von HTML und PHP

    Something big is coming. And there will be pirates and ninjas and unicorns...