Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Statische Seiten über Templates erstellen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Statische Seiten über Templates erstellen

    Hallo,

    ich versuche gerade Daten aus der Datenbank auszulesen und in eine Datei zu schreiben. Dabei handelt es sich um einfach News(Titel, Text und Bild). Hintergrund ist einfach ich möchte nicht bei jedem Aufruf der Seite einen Datenbankaufruf machen.

    Etwas in die Datei zu schreiben ist ja noch recht leicht. In etwa so:
    PHP-Code:
      $fp fopen(news1.php"w");
          
    fputs($fp"<b>Titel</b><p>Text</p>");
      
    fclose($fp); 
    Jetzt würde ich nur gerne den Inhalt der Datei news1.php über ein Template befüllen. In etwa so:

    PHP-Code:
      define ("newTemplate"newsTemplate.php);
      
    $title"Titel";
      
    $content"Text";

      
    $fp fopen(news1.php"w");
          
    fputs($fpnewTemplate);
      
    fclose($fp); 
    newsTemplate.php
    PHP-Code:
    <b><?php echo $tile?></b>
    <p><?php echo $text?></p>
    Die Ausgabe ist ja dann so einfach mit
    PHP-Code:
    include oneColumnTemplate 
    Aber wie Übergebe ich ein Template mit den Variablen beim Schreiben der Datei. Im Oben genannten Beispiel wird es ja einfach ausgegeben.

    Vielen dank für jegliche Hilfe

  • #2
    Dein "<?php echo $title; ?>" ist garnicht nötig, wenn du ein Statisches Template erzeugen willst, du brauchst nur einen platzhalten z.b. {title} o.ä. dann ließt du den gesamten text aus deinem Template via file_get_contents() und Tauscht die Platzhalten mit Text aus deiner DB via str_replace() aus danach schreibst du einfach eine neue Datei, in deinen Cache ordner, von dem du dann nur noch die Datein, mit fertigem Text anzeigen brauchst. das machst du wieder per file_get_contents() und echo, wobei dies dann der normale aufruf eines Users ist ... ich hoffe, ich habe es halbwegs verstädnlich erklärt
    PHP-Code:
    if ( $humans >= ) {
       
    war ();

    Kommentar


    • #3
      Ja, okay, dass wäre eine möglichkeit, aber ich will das Template auch an anderer Stelle benutzen. Dort sollen die Inhalte dann nicht statisch angezeigt werden.

      Kommentar


      • #4
        Das komplette Design dieser Anwendung scheint mir neben der Mütze zu sein. Warum nicht die Daten bei jedem Seitenaufruf neu aus der Datenbank lesen, ins Template einbauen und die fertige Seite dann ausgeben? Wenn du so viel parallele Besucher pro Milisekunde hast, dass du wirklich Angst um die Performance gaben müsstest, dann ist der Inhalt der Tabelle sowieso im Ram gecached und steht beliebig schnell zur Verfügung.

        Ich würde ein Grundtemplate mit {platzhaltern} versehen und diese dann per str_replace() oder strtr() durch dynamische Daten ersetzen.
        [PHP]if ($var != 0) {
        $var = 0;
        }[/PHP]

        Kommentar


        • #5
          Ich finds lustig. Immer wenn es hier in Forum um den Einsatz (erst recht um den Nachbau) von Temlateengines geht, heißt es: „Nutz doch <? echo $xy ?> , geht genauso gut“. Jetzt, wo es um <?php echo ?> geht, wird zum Nachbasteln von Template-Features via str_replace geraten.
          Wirds dann etwas komplexer („Ich brauch ein IF“) dann heißt es bestimmt: „Sowas können Templateengines, guck Dir mal welche an.“ Und kurz darauf werden die Kritiker den „benutz doch Inline-PHP“ Tenor anstoßen.

          Fazit: Guck Dir Templateengines an. Herumgefrickel mit str_replace führt bloß zu weiteren Fragen in naher Zukunft.
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            Oder weiter auf dem Pfad der Tugend (Inline-PHP) wandeln und Output Buffering nutzen:

            PHP-Code:
            <?php

            function outputTemplate($tplFile, array $vars)
            {
                
            extract($vars);
                include 
            $tplFile;
            }

            function 
            renderTemplate($tplFile, array $vars)
            {
                
            ob_start();
                
            outputTemplate($tplFile$vars);
                return 
            ob_get_clean();
            }

            $vars['title']   = 'Titel';
            $vars['content'] = 'Text';

            $renderedTemplate renderTemplate('demo.phtml'$vars);
            file_put_contents('./cache/demo'$renderedTemplate);

            Kommentar


            • #7
              Vielen Dank fürs Feedback.

              Mit str_replace hört sich recht uninteressant an. Ich werde mir mal ein paar Templateengines anschauen bzw den Ansatz vonmermshaus weiterverfolgen.

              Kommentar

              Lädt...
              X