wucher wichtel: Wie wird das Design bei Blogs o.ä. gehandelt?

Hallo!

Also, nachdem mein Problem mit einem Template-Script ins Archiv gewandert ist, stelle ich nochmal eine Frage zu diesem Thema.

Das Template-Script brauche ich bei verschiedenen Sachen, um das Design vom eigentlichen Programmcode zu trennen. Ich habe es mir so gedacht, dass es ein Template-File gibt. Die statischen Sachen werden ins Template reingeschrieben. Aber den aktuellen, dynamischen Inhalt, der von mir in eine Variable geschrieben wird, funktioniert nicht. Nähere (Problem-)beschreibung siehe Archiv.

Die Antwort auf meine erste Frage interessiert mich immer noch. Warum klappt das nicht?

Aber mir kam noch eine Idee: Vielleicht machen es alle anderen (die Galerien oder Blogs o.ä. schreiben), ganz anders...

Mich interessiert: Gibt es andere Möglichkeiten, mein Problem zu lösen? Wie macht ihr das?

Ich könnte natürlich auch in jede Datei einzeln das gesamte Design schreiben (wie bei herkömmlichen HTML-Dateien eben auch). Aber das gefällt mir nicht so, da es eher starr ist und man das Design nicht so leicht ändern kann.

Vielen Dank für eure Hilfe und Bemühungen. Bei Problemen rund um meine Problembeschreibung helfe ich gerne weiter :-) Danke!

ciao, ww

--
Schäuble:
  "Wir können alles. Außer Rechtsstaat."
  1. Ich könnte natürlich auch in jede Datei einzeln das gesamte Design schreiben (wie bei herkömmlichen HTML-Dateien eben auch). Aber das gefällt mir nicht so, da es eher starr ist und man das Design nicht so leicht ändern kann.

    Wir sind natürlich kein Design-Experte, aber was spricht gegen eine CSS-Datei (Template-Engiones fürs Design, so haben Wir Dich zumindest verstanden ;) für das liebe Blogsystem?

    1. Hallo!

      Wir sind natürlich kein Design-Experte, aber was spricht gegen eine CSS-Datei (Template-Engiones fürs Design, so haben Wir Dich zumindest verstanden ;) für das liebe Blogsystem?

      Das wäre auch eine Möglichkeit. Aber es würde nicht so viel Flexibilität bringen. Wenn der PHP-Code eine HTML-Datei ausliefert, dann kann man zwar das Aussehen verändern. Aber nicht noch ein Untermenü o.ä. einbringen. Oder wenn sich die URL einer Seite ändert, die auf allen Seiten verlinkt ist, dann müsste man die Adresse überall verändern und könnte das nicht zentral im Template machen. Kurzum: Wegen jeder kleinen Veränderung müsste man X Dateien verändern.

      ciao, ww

      --
      Schäuble:
        "Wir können alles. Außer Rechtsstaat."
      1. Wenn der PHP-Code eine HTML-Datei ausliefert, dann kann man zwar das Aussehen verändern. Aber nicht noch ein Untermenü o.ä. einbringen.

        Warum nicht?

        Oder wenn sich die URL einer Seite ändert, die auf allen Seiten verlinkt ist, dann müsste man die Adresse überall verändern und könnte das nicht zentral im Template machen. Kurzum: Wegen jeder kleinen Veränderung müsste man X Dateien verändern.

        Wir teilen diese Schlussfolgerung nicht. Es spricht doch nichts gegen den gleichzeitigen Einsatz einer PHP-"Engine" und einer zentralen CSS.

        Kannst Du mal auf den Punkt bringen, warum Wir Dich nicht verstehen?

        1. Hallo,

          Kannst Du mal auf den Punkt bringen, warum Wir Dich nicht verstehen?

          Sein Problem ist, dass in seiner Templateengine der dynamisch eingefügte Content eine bestimmte Größe scheinbar nicht überschreiten kann.

          Gruß
          MrWurf

          1. Sein Problem ist, dass in seiner Templateengine der dynamisch eingefügte Content eine bestimmte Größe scheinbar nicht überschreiten kann.

            Ach so, Unser Fehler, da haben Wir wichtel wohl überschätzt, ist also ein "gefundenes Script"-Programmierer.

            --
            Aber bei dieser Signatur war ja auch nichts anderes zu erwarten.
            1. Hallo!

              Ach so, Unser Fehler, da haben Wir wichtel wohl überschätzt, ist also ein "gefundenes Script"-Programmierer.

              Sieht wohl so aus. Wäre schön, wenn ich alles was ich brauche/will in der mir zur verfügungstehenden Zeit, selbst programmieren könnte. Aber wenn du nie auf die Arbeit anderer zurückgreifst, dann beglückwünsche dich. Ob man das Dummheit oder Genialität nennt, kann ich nicht einschätzen. Aber da möchte ich mich mit dir auch nicht streiten.

              ciao, ww

              --
              Schäuble:
                "Wir können alles. Außer Rechtsstaat."
              1. Ach so, Unser Fehler, da haben Wir wichtel wohl überschätzt, ist also ein "gefundenes Script"-Programmierer.

                Sieht wohl so aus. Ob man das Dummheit oder Genialität nennt, kann ich nicht einschätzen. Aber da möchte ich mich mit dir auch nicht streiten.

                Es entspricht zumindest nicht dem SELF-Gedanken.   ;)

                1. Hallo!

                  Es entspricht zumindest nicht dem SELF-Gedanken.   ;)

                  Das stimmt. Aber leider ist es schwer den SELF-Gedanken total konsequent durchzuziehen. Ich versuche es zumindest so gut es geht :P

                  ciao, ww

                  --
                  Schäuble:
                    "Wir können alles. Außer Rechtsstaat."
                  1. Das stimmt. Aber leider ist es schwer den SELF-Gedanken total konsequent durchzuziehen. Ich versuche es zumindest so gut es geht :P

                    Wenn Du wiederverwendbare SW einsetzen möchtest, also nicht "alles" selbst machen möchtest, dann nimm gut dokumentierte Module und Scripte, die idealerweise noch supported und weiterentwickelt werden.

  2. Hi,

    da sich offenbar kein PHP-Crack deiner erbarmt gebe ich als unkundiger dir folgenden Rat:

    Wirf dein "gefundenes" Script weg und sieh dich hier
    nach brauchbaren Alternativen um.

    Gruß
    MrWurf

    1. Hallo!

      da sich offenbar kein PHP-Crack deiner erbarmt

      Irgendwie mögen die PHP-Cracks diese Frage nicht ;-)

      gebe ich als unkundiger dir folgenden Rat:
      Wirf dein "gefundenes" Script weg und sieh dich hier
      nach brauchbaren Alternativen um.

      Das Problem mit allen anderen Alternativen, die ich bis jetzt gefunden habe ist, dass sie viel zu groß sind. Naja, aber ich schau mal weiter. Danke!

      ciao, ww

      --
      Schäuble:
        "Wir können alles. Außer Rechtsstaat."
  3. echo $begrüßung;

    Also, nachdem mein Problem mit einem Template-Script ins Archiv gewandert ist, stelle ich nochmal eine Frage zu diesem Thema.
    Die Antwort auf meine erste Frage interessiert mich immer noch. Warum klappt das nicht?

    Vermutlich kommst du mit der üblichen Vorgehensweise der Ursache auf die Spur: Lass dir die Inhalte der beteiligten Variablen und die Ergebnisse der Ausdrücke und aufgerufenen Funktionen ausgeben. Verwende dazu echo, print_r() und var_dump() (ein <pre> vorher erhöht die Übersichtlichkeit der Ausgabe).

    echo "$verabschiedung $name";

    1. Hallo!

      Vielen Dank für deine Antwort. Ich habe das schon seit einiger Zeit gemacht. Jetzt bin ich zu folgendem Ergebnis gekommen:

        
        function replace_tags($tags = array()) {  
          if (sizeof($tags) > 0)  
            foreach ($tags as $tag => $data) {  
        
              //$data = (file_exists($data)) ? $this->parse($data) : $data;  
        
              $this->page = eregi_replace("{" . $tag . "}", $data,  
                            $this->page);  
        echo $data;  
              }  
          else  
            die("No tags designated for replacement.");  
        }  
      
      

      Wenn die auskommentierte Zeile auskommentiert ist, dann funktioniert das Einbinden von viel Text mittels einer Variable. Wenn sie nicht auskommentiert ist, dann gibt es eine Fehlermeldung. Das ist für mich ein Rätsel...

      Die Zeile $data = (file_exists($data)) ? $this->parse($data) : $data; soll doch überprüfen, ob die es eine Datei gibt, die den Inhalt der Variable $data als Inhalt hat. Das wäre zumindest logisch ;-) Ich wüsste gerne wie diese Schreibweise mit dem Fragezeichen und Doppelpunkt heißt, damit ich googeln kann, was sie bedeutet. Bei neueren Scripts trifft man diese Schreibweise oft, aber bis jetzt habe ich kein Tutorial gefunden, das auf diese Schreibweise eingeht. Wie nennt man das?

      Hier schreibe ich jetzt nochmal den kompletten, aktuellen Quelltext rein, damit eventuell copy&paste einfacher ist. Schonmal vielen Dank für deine Hilfe!

      Die index.php. Der Inhalt von $content stammt von Wikipedia und ist nur ein Platzhalter-Text, um mit langem Code zu experimentieren.

        
      <?php  
      include "class.php";  
        
      $content =  "  
          Akrotiri ist eine archäologische Ausgrabungsstätte im Süden der griechischen Insel Santorini (auch Thera). Im Jahr 1967  
          entdeckte der Archäologe Spyridon Marinatos eine bronzezeitliche Stadt, die in der Blüte ihrer Existenz durch einen  
          Vulkanausbruch verschüttet und so für über 3500 Jahre verborgen wurde. Der exzellente Erhaltungszustand erlaubt Einblicke  
          in die Sozial- und Wirtschaftsgeschichte der Bronzezeit und hat auch herausragende Fresken aus dieser Zeit bewahrt. Die  
          Ausgrabungsstätte ist nach einem heutigen Dorf benannt. Der Ort Akrotiri liegt oberhalb der Ausgrabung auf einem Hügel  
          aus den ältesten Vulkangesteinen der Insel und wird durch die Ruine einer Burganlage aus der Zeit der venezianischen  
          Herrschaft (1204–1537) geprägt.  
         ";  
        
      $page = new Page("template.html");  
        
      $page->replace_tags(array(  
        "main" => "$content"  
      ));  
        
      $page->output();  
        
      ?>  
      
      

      Die class.php:

        
      <?php  
        
      class Page  
      {  
        var $page;  
        
        function Page($template = "template.html") {  
          if (file_exists($template))  
            $this->page = join("", file($template));  
          else  
            die("Template file $template not found.");  
        }  
        
        function parse($file) {  
          ob_start();  
          include($file);  
          $buffer = ob_get_contents();  
          ob_end_clean();  
          return $buffer;  
        }  
        
        function replace_tags($tags = array()) {  
          if (sizeof($tags) > 0)  
            foreach ($tags as $tag => $data) {  
        
              //$data = (file_exists($data)) ? $this->parse($data) : $data;  
        
              $this->page = eregi_replace("{" . $tag . "}", $data,  
                            $this->page);  
              }  
          else  
            die("No tags designated for replacement.");  
        }  
        
        function output() {  
          echo $this->page;  
        }  
      }  
        
      ?>  
      
      

      Und die template.html:

        
      PLATZHALTER{main}PLATZHALTER  
      
      

      Danke schön für deine Bemühungen!

      ciao, ww

      --
      Schäuble:
        "Wir können alles. Außer Rechtsstaat."
      1. Oh mann... Das is die verkuerzte Schreibweise einer einfachen IF Abfrage.

        Du findest das auch hier:
        einfache entweder oder Abfrage

        1. Hallo!

          Oh mann... Das is die verkuerzte Schreibweise einer einfachen IF Abfrage.

          Dann war meine Interpretation richtig. Das ist ja schön :-)

          Du findest das auch hier:

          Mit if-Abfragen habe ich vor etwa 2 Jahren angefangen. Danke, ich kenne diese Seite...

          Die verkürzte Schreibweise wird auf SELFHTML aber auch nicht behandelt. Naja, das nächste mal kannst du vielleicht dein Genervt-Sein aufgrund der Unwissenheit anderer, wenigstens ansatzweise verstecken :-) Danke dafür.

          Das Leid der Weisen ist, dass sie sich mit der Dummheit der anderen herumschlagen müssen :-P

          ciao, ww

          --
          Schäuble:
            "Wir können alles. Außer Rechtsstaat."
          1. Die verkürzte Schreibweise wird auf SELFHTML aber auch nicht behandelt. Naja, das nächste mal kannst du vielleicht dein Genervt-Sein aufgrund der Unwissenheit anderer, wenigstens ansatzweise verstecken :-) Danke dafür.

            also bei mir wird die verkuerzte schreibweise da schon behandelt... schau doch nochmal genauer. Ich hab den Link da nicht eingefuegt um dir If abfragen beizubringen sondern damit Du dich, wie gewuenscht, ueber die verkuerzte schreibweise informieren kannst. Momentchen *karmkramkopierkleb*

            nochmal mit anker:

            entweder oder

            1. Hallo!

              also bei mir wird die verkuerzte schreibweise da schon behandelt... schau doch nochmal genauer.

              Oh! Stimmt. Hab ich übersehen. Danke für den Link!

              ciao, ww

              --
              Schäuble:
                "Wir können alles. Außer Rechtsstaat."
              1. Kein Problem. Als ich die Dinger vor Ewigkeiten zum erstenmal gesehen habe hab ich auch nur '...' gedacht. :)

  4. Tach.

    Die Antwort auf meine erste Frage interessiert mich immer noch. Warum klappt das nicht?

    Das scheint ein Bug/Feature von PHP für Windows zu sein. Wenn du das Feature mit den Templateinhalten aus Dateien in deinen Skripten nicht brauchst, schmeiß die entsprechende Zeile raus aus der Templateklasse. Besonders gut gelöst ist das ohnehin nicht.

    Ab 243 Zeichen für einen Dateinamen scheint file_exists() unter Windows immer TRUE zu liefern. Unix hat damit anscheinend kein Problem ...

      
    var_dump(file_exists(str_repeat("X", 128)));  
    var_dump(file_exists(str_repeat("X", 243)));  
    
    
    --
    Once is a mistake, twice is jazz.
    1. Hallo!

      Besonders gut gelöst ist das ohnehin nicht.

      Wie wäre es besser? Ich möchte mehr lernen auf dem Gebiet. Aber irgendwie gibt es dazu nicht wirklich Infos.

      Ab 243 Zeichen für einen Dateinamen scheint file_exists() unter Windows immer TRUE zu liefern. Unix hat damit anscheinend kein Problem ...

      Vielen Dank für deine Antwort. Das hilft mir wirklich weiter! Danke schön!

      ciao, ww

      --
      Schäuble:
        "Wir können alles. Außer Rechtsstaat."
      1. Tach.

        Besonders gut gelöst ist das ohnehin nicht.

        Wie wäre es besser?

        Meiner Meinung nach ist das Bereitstellen der Inhalte, die das Templatemodul in die Templates füllt, Aufgabe des aufrufenden Programms. Das Templatemodul sollte nicht bei jedem übergebenen Inhalt prophylaktisch überprüfen, ob's nicht nur eine "normale" Zeichenkette ist oder ob sich dahinter nicht zufällig der Name einer existierenden Datei verbirgt, die dann eingebunden wird. Solche "Features" machen den gesamten Programmablauf undurchsichtig(er) und eine spätere Fehlersuche langwieriger. Diesen Punkte meinte ich mit "nicht besonders gut gelöst".

        Ansonsten bleibt noch der Hinweis, daß auch ein einfaches str_replace() zum Ersetzen der Platzhalter ausreicht; eine Funktion für RegExps muß hier nicht angeschmissen werden. Und das ganze Skript mit die() abzumurksen, wenn im Templatemodul was schiefgeht, halte ich auch nicht für praxistauglich. Solche Fehler sollten besser als Exceptions oder über entsprechende Rückgabewerte der jeweiligen Methoden nach oben gemeldet werden.

        Ich möchte mehr lernen auf dem Gebiet. Aber irgendwie gibt es dazu nicht wirklich Infos.

        Welche Infos gibt es nicht? Wenn du mit einer Suchmaschine nach "Template System" suchst, fliegen dir Ergebnisse für etliche Sprachen geradezu um die Ohren ...

        --
        Once is a mistake, twice is jazz.
        1. Hallo!

          Danke für die Erklärungen! Jetzt kann ich mich dran machen, das ganze zu verbessern. Danke schön.

          Ich möchte mehr lernen auf dem Gebiet. Aber irgendwie gibt es dazu nicht wirklich Infos.

          Welche Infos gibt es nicht? Wenn du mit einer Suchmaschine nach "Template System" suchst, fliegen dir Ergebnisse für etliche Sprachen geradezu um die Ohren ...

          Das schon. Aber ich wollte wissen, ob bei Blogs o.ä. Templatesysteme zum Einsatz kommen, oder ob das irgendwie anders funktioniert. Aber jetzt ist mir einiges klarer geworden. Vielen vielen Dank!

          ciao, ww

          --
          Schäuble:
            "Wir können alles. Außer Rechtsstaat."
        2. Hallo!

          Jetzt sind doch noch 2 Fragen aufgetaucht, wo ich Verständnisprobleme habe.

          Meiner Meinung nach ist das Bereitstellen der Inhalte, die das Templatemodul in die Templates füllt, Aufgabe des aufrufenden Programms.

          Was meinst du mit "aufrufendes Programm"?

          Das Templatemodul sollte nicht bei jedem übergebenen Inhalt prophylaktisch überprüfen, ob's nicht nur eine "normale" Zeichenkette ist oder ob sich dahinter nicht zufällig der Name einer existierenden Datei verbirgt, die dann eingebunden wird.

          Aber wie sollte es sonst gehen? Ich müsste irgendwie speichern, ob zu irgendeinem bestimmten String eine bestimmte Datei existiert. Wenn das nicht so ist, dann wird der String einfach ins Dokument geschrieben. Habe ich das richtig verstanden?

          Danke schön.

          ciao, ww

          --
          Schäuble:
            "Wir können alles. Außer Rechtsstaat."
          1. Tach.

            Meiner Meinung nach ist das Bereitstellen der Inhalte, die das Templatemodul in die Templates füllt, Aufgabe des aufrufenden Programms.

            Was meinst du mit "aufrufendes Programm"?

            Den Teil deines Scriptes, der das Templateobjekt erzeugt und benutzt. Dort wird auch das Array mit den Inhalten fürs Ersetzen im Template erstellt.

            Das Templatemodul sollte nicht bei jedem übergebenen Inhalt prophylaktisch überprüfen, ob's nicht nur eine "normale" Zeichenkette ist oder ob sich dahinter nicht zufällig der Name einer existierenden Datei verbirgt, die dann eingebunden wird.

            Aber wie sollte es sonst gehen? Ich müsste irgendwie speichern, ob zu irgendeinem bestimmten String eine bestimmte Datei existiert.

            Oder eben die entsprechenden Inhalte, die aus diesen Dateien, der DB oder sonstwoher kommen, außerhalb des Templates "sammeln" und dann lediglich dem Template zum Einsetzen überreichen. Wenn trotzdem unbedingt Dateien eingebunden werden sollen, könnte man natürlich auch das Templatemodul um eine Methode erweitern, neue Tags fürs Ersetzen definieren o. ä., die genau das machen (und *nur* das). Dann noch eine Syntax für Verzweigungen, Schleifen, Zugriff auf Objektattribute ... und schon bist du bei Systemen wie Smarty gelandet. ;)

            Was mir an dieser Sonderfunktion der von dir geposteten Templateklasse nicht gefällt: Sie sieht für mich hauptsächlich nach zukünftigen Problemen aus. Wenn beispielsweise in deinem Ersetzungsarray Werte auftauchen, die eigentlich nicht als Dateinamen gemeint waren aber trotzdem welche darstellen ...

            --
            Once is a mistake, twice is jazz.
            1. Hallo!

              Was meinst du mit "aufrufendes Programm"?

              Den Teil deines Scriptes, der das Templateobjekt erzeugt und benutzt. Dort wird auch das Array mit den Inhalten fürs Ersetzen im Template erstellt.

              Ok. Verstanden. Danke schön.

              Oder eben die entsprechenden Inhalte, die aus diesen Dateien, der DB oder sonstwoher kommen, außerhalb des Templates "sammeln" und dann lediglich dem Template zum Einsetzen überreichen.

              Ok, das habe ich auch verstanden.

              Wenn trotzdem unbedingt Dateien eingebunden werden sollen, könnte man natürlich auch das Templatemodul um eine Methode erweitern, neue Tags fürs Ersetzen definieren o. ä., die genau das machen (und *nur* das).

              Warum sollte man das machen? Damit es bei Fehlern nicht zu einem Total-Ausfall kommt? Oder wo ist da der Sinn?

              Dann noch eine Syntax für Verzweigungen, Schleifen, Zugriff auf Objektattribute ... und schon bist du bei Systemen wie Smarty gelandet. ;)

              Das wär ein bisschen zuviel des Guten :-)

              Was mir an dieser Sonderfunktion der von dir geposteten Templateklasse nicht gefällt: Sie sieht für mich hauptsächlich nach zukünftigen Problemen aus. Wenn beispielsweise in deinem Ersetzungsarray Werte auftauchen, die eigentlich nicht als Dateinamen gemeint waren aber trotzdem welche darstellen ...

              Achso. Dann werde ich mir da was überlegen. Danke schön.

              Nochmals vielen Dank für deine Hilfe.

              ciao, ww

              --
              Schäuble:
                "Wir können alles. Außer Rechtsstaat."
              1. Hallo!

                Warum sollte man das machen? Damit es bei Fehlern nicht zu einem Total-Ausfall kommt? Oder wo ist da der Sinn?

                Okay. Ich glaube ich hab's jetzt doch verstanden :)

                ciao, ww

                --
                Schäuble:
                  "Wir können alles. Außer Rechtsstaat."