PHP Include Befehl in Template Datei?

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

  • PHP Include Befehl in Template Datei?

    Hi Leute,

    Ich arbeite an einem Download System für meine Homepage und bin über was sehr ärgerliches gestoßen. Ich versuch es mal zu Beschreiben.

    In meinem Download System wird aus einer Template Datei eine Beschreibung in eine Liste geladen, den Parameter bekommt er aus der URL.

    In der Template Datei ist ein php Include Befehl, der aber nicht funktioniert. Das ist sehr wichtig für die Quersummen, die ich für di Dateien berechnet habe. Guckt euch mal die source Codes an:


    ***PHP Script***

    PHP-Code:
    <?php
    $datei 
    $_GET['edc'];
    if (
    preg_match('/^\d+$/'$datei) !== 1)
    {
      die(
    'Ungültiger Parameter');
    }
    elseif(!
    file_exists($_SERVER['DOCUMENT_ROOT'].'/1/2/'.$datei.'.dbd'))
    {
      die(
    'Ungültiger Parameter');
    }

    $inhalt file($_SERVER['DOCUMENT_ROOT'].'/1/2/'.$datei.'.dbd');
    $zuordnung = array();

    foreach (
    $inhalt as $value
    {
      
    $line explode('=',$value);     
      
    $zuordnung[$line[0]] = $line[1];
    }

    $fp fopen("1.htm""r");

    while (!
    feof($fp))
    {
        
    $tpl fgets($fp4096);
        foreach (
    $zuordnung as $var => $value)
        {
           
    $tpl str_replace("{".$var."}",$value,$tpl);
        }
        echo 
    $tpl;
    }
    ?>
    ***Template Datei***

    PHP-Code:
    <html>

    <head>
    <link rel="stylesheet" type="text/css" href="../1/4/1.css">
    </head>

    <body>
    <table border="0" cellpadding="0" cellspacing="0" width="645" height="350">
        <tr>
            <td height="35" align="center" colspan="4"><font size="5">{01}</font></td>
        </tr>
        <tr>
            <td valign="top" rowspan="21" widht="100%" height="100%">
    <iframe scrolling="auto" border="0" frameborder="0" src="1/1/{02}/1.htm" width="230" height="100%">
    <font size="2">Ihr Browser unterstützt Inlineframes nicht 
    oder zeigt sie in der derzeitigen Konfiguration nicht an.</font></iframe></td>
            <td rowspan="26">&nbsp;</td>
            <td colspan="2"><font size="3">Download Details:</font></td>
        </tr>
        <tr>
            <td><font size="1">Name der Datei</td>
            <td>{03}</td>
        </tr>
        <tr>
            <td>Version</td>
            <td>{04}</td>
        </tr>
        <tr>
            <td>Sprache</td>
            <td>{05}</td>
        </tr>
        <tr>
            <td>Autor</td>
            <td>{06}</td>
        </tr>
        <tr>
            <td>Lauffähig unter</td>
            <td>{07}</td>
        </tr>
        <tr>
            <td>Datei Größe</td>
            <td>{08}</td>
        </tr>
        <tr>
            <td>Kategorie</td>
            <td>{09}</td>
        </tr>
        <tr>
            <td>Lizenz</td>
            <td>{10}</td>
        </tr>
        <tr>
            <td>Kaufpreis</td>
            <td>{11}</td>
        </tr>
        <tr>
            <td>Mein Eindruck</td>
            <td>{12}</td>
        </tr>
        <tr>
            <td>Verfügbar seit</td>
            <td>{13}</td>
        </tr>
        <tr>
            <td>EDC Download Code</td>
            <td>{14}</td>
        </tr>
        <tr>
            <td>Quersumme CRC</td>
            <td><a href="1/3/1/{15}"><?php include "1/3/1/{15}"?></a></td>
        </tr>
        <tr>
            <td>Quersumme MD5</td>
            <td><a href="1/3/2/{16}"><?php include "1/3/2/{16}"?></a></td>
        </tr>
        <tr>
            <td height="20"></td>
            <td height="20"></td>
        </tr>
        <tr>
            <td colspan="2"><font>Informationen zur Datei</td>
        </tr>
        <tr>
            <td>Archiv Typ</td>
            <td>{17}</td>
        </tr>
        <tr>
            <td>Wiederherstellung möglich</td>
            <td>{18}</td>
        </tr>
        <tr>
            <td>Veränderungen möglich</td>
            <td>{19}</td>
        </tr>
        <tr>
            <td>Kompression</td>
            <td>{20}</td>
        </tr>
        <tr>
            <td valign="bottom" align="center" rowspan="5" width="230" height="49">
    <a href="1/4/{03}" onmouseover="B1.src='1/1/db1a.png';" onmouseout="B1.src='1/1/db1.png';">
    <img src="1/1/db1.png" border="0" width="180"height="49" name="B1"></a></td>
        </tr>
        <tr>
            <td>Progressives Archiv</td>
            <td>{21}</td>
        </tr>
        <tr>
            <td>Authentizitätsinformationen</td>
            <td>{22}</td>
        </tr>
        <tr>
            <td>Passwort</td>
            <td>{23}</td>
        </tr>
        <tr>
            <td>Selbstentpackend</td>
            <td>{24}</font></td>
        </tr>
    </table>
    </body>

    </html>
    ***und hier die Beispiel Beschreibung***

    PHP-Code:
    01=Überschrift
    02
    =000001
    03
    =datei.zip
    04
    =Version
    05
    =Sprache
    06
    =Autor
    07
    =Lauffähig unter
    08
    =Datei Größe
    09
    =Kategorie
    10
    =Lizenz
    11
    =Kaufpreis
    12
    =Mein Eindruck
    13
    =Verfügbar seit
    14
    =EDC Download Code
    15
    =beispiel.sfv
    16
    =beispiel.md5
    17
    =Archiv Typ
    18
    =Wiederherstellung möglich
    19
    =Veränderungen möglich
    20
    =Kompression
    21
    =Progressives Archiv
    22
    =Authentizitätsinformationen
    23
    =Passwort
    24
    =Selbstentpackend 
    in der template Datei sind bei {15} und {16} include befehle dabei, die die Quesumme anzeigen sollen. Ich will damit schaffen dass der Inhalt der .md5 und .sfv angezeigt werden, und gleichzeitig die Dateien zum download angeboten werden. aber wenn die seite geladen ist, wird an der stelle nix angezeigt. Ich habe lange gegooglelt und in etlichen Foren wurde eine Lösung mit SSI gezeigt, aber leider unterstützt sowas mein Webspace nicht. Und eine Lösung mit Javascript ist mir zu umständlich. Ich habs auch mit umbenennen der template datei in 2.php versucht, kein ergebniss. Hat jemand ein Rat, wie ich dieses Problem lösen könnte?
    Zuletzt geändert von salim_aliya; 11.11.2007, 13:48.
    MFG
    salim_aliya
    Lesen, lernen, ausüben und Ziele erreichen...

  • #2
    Das liegt daran, dass der Code der Template Datei so nicht den PHP Parser erreicht. Da könnte
    eval() helfen, aber ob das die beste Lösung ist, ist fragwürdig.

    Die simpelste und performantere Lösung dürfte es sein, die Platzhalter durch PHP-Code (Variablen) zu ersetzen und die Datei zu includen. Dann musst du nicht erst selbst die Platzhalter "parsen" und dir irgendeinen "Workaround" für die includes ausdenken und bist flexibler.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Warum sollte ein PHP-Befehl in der Datei geparst werden, wenn du die Datei nicht durch den Interpreter schickst??? Entweder eval(), nicht zu empfehlen oder ein INCLUDE in deiner Template-Engine nachempfinden. Schau dir an, wie andere Template-Klassen das machen. Du bist nicht der erste, der dieses Rad erfindet...

      Kommentar


      • #4
        Original geschrieben von Griecherus
        Die simpelste und performantere Lösung dürfte es sein, die Platzhalter durch PHP-Code (Variablen) zu ersetzen und die Datei zu includen. Dann musst du nicht erst selbst die Platzhalter "parsen" und dir irgendeinen "Workaround" für die includes ausdenken und bist flexibler.
        Danke für deine Antwort erstmal! Deine erste lösung sehe ich mir an. Aber was meinst in deiner zweiten Lösung mit "durch PHP ersetzten"? Sry, ich hab wenig ahnung von PHP.
        MFG
        salim_aliya
        Lesen, lernen, ausüben und Ziele erreichen...

        Kommentar


        • #5
          Original geschrieben von TobiaZ Schau dir an, wie andere Template-Klassen das machen. Du bist nicht der erste, der dieses Rad erfindet...
          OK, mach ich! Danke für deine Antwort!
          MFG
          salim_aliya
          Lesen, lernen, ausüben und Ziele erreichen...

          Kommentar


          • #6
            PHP-Code:
            // template_01.php (ich benutze gerne .phtml für Template Dateien)

            ... HTML ...
            <table>
                <tr>
                    <td>Ein normaler "Platzhalter":</td>
                    <td><?php echo $placeholder_name?></td>
                </tr>
                <tr>
                    <td>Einbinden eines Dateiinhalts</td>
                    <td><?php include($file_name); ?></td>
                </tr>
            </table>
            ... HTML ...
            Das erspart dir zum einen, eine Template Engine zu benutzen oder selbst eine zu entwickeln, ist in der Regel um einiges schneller als eine Template Engine und (Achtung: hier gehen die Meinungen auseinander) zweckmäßiger.
            Nieder mit der Camel Case-Konvention

            Kommentar


            • #7
              Jau, das ist auf jeden Fall simpler, als ne komplette "Engine" aufzubauen. Natürlich könnte man den HTML-Quelltext auch direkt in die Datei schreiben, aber darüber wollen wir hier wirklich nicht streiten. Finde ich eine saubere alternative für Lange HTML-Quelltexte.

              Kommentar


              • #8
                Hi Leute,

                Hui, ich hab das sehr lange angesehen, herumprobiert, aber bin leider zu keinem Ergebniss gekommen :-(

                Aber ich habe mir überlegt, 1.htm jetzt nicht mehr als Template zu laden, sondern in die PHP Datei einzubauen. In der Datei soll oben jetzt der PHP Script stehen und unter dem PHP Script der HTML Quellcode. Somit muss der include befehl ja ausgeführt werden, oder?

                Aber da fängt es wieder mit den Problemen an. Ich hab zwar sehr lange herumprobiert, habe am script was geändert oder hinzugefügt, aber entweder ist garnix passiert, oder alles endete als fehlermeldung in der endlosschleife.

                Ich bräuchte jetzt ein script, das die .dbd datei einliest und den inhalt (ihr wisst sicher, in welcher form) unten in Platzhalter in der HTML Datei einfügt. Wie gesagt habe lange herumprobiert, aber nix dabei rausgekommen. *seufz* Kann einer einen Denkanstoß geben?

                Oder kennt Ihr befehle in anderen Sprachen, die den include in PHP ersetzen könnten? Ich habe leider keine gefunden.
                Zuletzt geändert von salim_aliya; 11.11.2007, 21:30.
                MFG
                salim_aliya
                Lesen, lernen, ausüben und Ziele erreichen...

                Kommentar

                Lädt...
                X