Ankündigung

Einklappen
Keine Ankündigung bisher.

Auskommentierung von HTML zeichen.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Auskommentierung von HTML zeichen.

    Ich bin mir nicht sicher wo das hingehört...

    Ich möchte ein Template System schreiben das so funktioniert.
    Es existieren die Dateien "header_default.php" und "footer_default.php".
    In beiden Dateien ist ein abschnitt mit PHP und ein Layout Code.
    Abgetrennt durch
    und
    Die Layoutcodes sind komplet in HTML ohne einen "echo" befehl davor.
    Jetzt möchte ich das das Script die Seiten einliest und ausgibt.
    Hierzu benutze ich folgendes Script:

    [code]
    <?php
    $f1=fopen("./base/templates/header_default.php","r");
    $f2=fopen("./base/templates/footer_default.php","r");
    $header="";
    $footer="";
    $z1=true;
    while($z1){
    $z1=fgets($f1,100);
    $header.=$z1."\n";
    }
    $z2=true;
    while($z2){
    $z2=fgets($f2,100);
    $footer.=$z2."\n";
    }
    $header=explode("",$header);
    $header2=explode("",$header[1]);
    $header2=str_replace('<? show_menu(0,0);?>',"_NAVI_",$header2);
    $header2=str_replace('<? echo $userlinks; ?>',"_LOGIN_",$header2);
    $header2=str_replace('<? echo $page_title; ?>',"_PAGE_TITEL_",$header2);

    $footer=explode("",$footer);
    $footer2=explode("",$footer[1]);
    $footer2=str_replace('<? echo $submenu;?>',"_SUBMENU_",$footer2);


    if($user_permissions[admin] == 1 || $user_permissions[coadmin] == 1) {

    $page_title="Template System

  • #2
    stripslashes() oder sowas ?

    Kommentar


    • #3
      k... jetzt setzt er aber immernoch nicht _NAVI_ um... muss ich bei "str_replace()" was beachten, wenn ich Funktionen in PHP einsetzen will?

      Also:
      Code:
      <?php
      str_replace("_NAVI_","<?php showmenu(0,0);?>",$header);
      ?>

      Kommentar


      • #4
        Du öffnest die Header-Datei und kopierst den Inhalt in eine Variable (übrigens sehr umständlich; ein file_get_contents() würde reichen). Jetzt erstezt du in dieser Variable ein paar Werte und bindest die Datei, der die Daten entspringen ein und erwartest, dass die Änderungen an deinem Variablen-Wert nun die Datei geändert haben (bzw. auch nicht, denn du gehst ja davon aus, dass du diesen Schritt jedes mal wiederholen musst).

        Also entweder, du schreibst die geänderten Daten in eine temp. Datei (siehe das Cache-System von Smarty) oder du benutzt eval(), um das Template-Skript aus der Variable heraus ablaufen zu lassen.

        Andere Ansätze wären z.B., die Ausgabe der einzubettenden Elemente vorab zu generieren und dann eben deine Tags (__NAV__ etc.) direkt durch die Ausgabe zu ersetzen. Oder du benutzt preg_replace_callback(), um die Tags weder durch PHP-Code, noch durch fertige HTML-Komponenten zu ersetzen, sondern quasi durch Methodenaufrufe, die dir die Ausgabe machen.

        Den PHP-Code, der in deinem Template steht, der lässt sich auch auslagern, denn entweder kannst geht es dort darum, die im Template benötigten Werte zusammenzustellen. Dann solltest du diesen Mechanismus vereinheitlichen, so dass alle Templates auf das gleiche Interface zugreifen. Oder er enthält Business-Logik und dann hat er dort eh nichts verloren, denn dort würde ja u.A. entschieden, welches Template eingebunden werden soll. Es wäre also unsinnig, diesen direkt an das Template zu knüpfen, wenn noch nichtmal klar ist, dass dieses überhaupt eingebunden werden soll.

        Zurück zu den Ersetzungen:
        Wenn du eh schon nur so rudimentäre Funktionen benutzt (letztlich nur ein Include aus dem Template heraus), dann kannst du doch auch gleich PHP in dein Template reinschreiben. Andernfalls, wenn das komplexer werden soll und du Platzhalter, Bedingungen, Schleifenkonstrukte etc. einbauen willst, dann nimm doch lieber gleich Smarty. Diese Template-Engine funktioniert ja genau nach dem Prinzip, Smarty-Tags durch PHP-Code zu ersetzen und dies Template mit PHP-Code dann einzubinden.

        Basti

        PS:
        Setze mal dein error_reporting hoch! Es ist für deine Arbeit sicher nicht förderlich, die Ausgabe von Parser-Meldungen zu unterdrücken.

        Kommentar

        Lädt...
        X