Ankündigung

Einklappen
Keine Ankündigung bisher.

Template-System

Einklappen

Neue Werbung 2019

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

  • Template-System

    Hi Zusammen,

    um mich ein bisschen weiter mit der Objektorientierten Programmierung auseinander zu setzen habe ich in den letzten Tagen eine kleine & primitive Klasse zum Laden von Templates gebaut:

    Klasse:
    PHP-Code:
    <?php
    class Template{
        private 
    $Template_Datei;
        private 
    $Template_Ordner;

        public function 
    __construct($Template_Ordner "template/"){
            
    $this->Template_Ordner $Template_Ordner;
            if (!
    is_dir($this->Template_Ordner)){
               
    mkdir($this->Template_Ordner);
            }
        }

        public function 
    Laden($Datei){
            if (
    file_exists ($this->Template_Ordner $Datei)){
                
    $this->Template_Datei file_get_contents($this->Template_Ordner $Datei);
            }
        }

        public function 
    Ersetzen($Name,$Wert){
            
    $this->Template_Datei str_replace("{".$Name."}",$Wert,$this->Template_Datei);
        }
        
        public function 
    Ersetzen_assoc($array){
            
    $from_array = array();
            
    $to_array = array();
            foreach (
    $array as $k => $v){
                
    $from_array[] = "{".$k."}";
                
    $to_array[] = $v;
            }
            
    $this->Template_Datei str_replace($from_array,$to_array,$this->Template_Datei);
        }

        public function 
    Ausgabe(){
            echo 
    $this->Template_Datei;
            
    $this->Template_Datei "";
        }


    }
    /*
    So zu benutzen

    $template = new Template();
    $template->Laden("news.tpl");
    $template->Ersetzen("datum","5757274217578");
    $template->Ausgabe();

    */
    ?>
    Beispiel Template:
    PHP-Code:
    <div class="news">
      <
    div class="news_header">
        <
    span class="news_titel">{news_titel}</span><span class="news_datum">{news_datum}</span>
      </
    div>
      
      <
    div class="news_inhalt"><br>
         {
    news_inhalt}
      </
    div>
    </
    div
    Hat wer von euch Verbesserungsvorschläge oder Anregungen? Gibt es Optimierungsbedarf?
    Bin über jedes Feedback froh

    Mfg
    homekiller



  • #2
    Hallo,
    wie immer gibts haufenweise zu kritisieren, was dich aber nicht entmutigen soll.

    - Entscheide dich für eine Sprache, deutsch oder englisch, Template ist englisch, Ordner deutsch, die PHP-Funktionen sind wieder englisch. Deine Entscheidung sollte zugunsten von englisch fallen
    - Wenn deine Klasse schon Template heißt, brauchst du deine Eigenschaften nicht Template_Ordner zu nennen, das ist eine unnötige Information, die das Lesen eher erschwert.
    - Halte dich an Coding-Standards, z.B.: Zend Framework: Documentation: Zend Framework Coding Standard f&uuml;r PHP - Zend Framework Manual. Ein eigenes, willkürliches Benennungsschema zu verwenden ist langfristig und im Team sowieso wenig hilfreich. $Template_Ordner ist eine ungewöhnliche Formatierung für eine Klasseneigenschaft, wenn dann $directory oder von mir aus $templateOrdner.
    - Deklarationen als private solltest du vermeiden, benutz protected, andernfalls verbaust du dir die Möglichkeiten von der Klasse sinnvoll erben zu können
    - Deine Template-Klasse ist nicht dafür zuständig Ordner anzulegen (mkdir)
    - Deine Template-Klasse sollte den übergebenen Ordnernamen normalisieren (z.B. mit realpath), sonst übergebe ich "template" statt "template/", was ein gültiger Ordner sein kann, beim Laden() passiert dann allerdings nichts, da "template"."news.tpl" eben "templatenews.tpl" ergibt und somit file_exists fehlschlägt.
    - wobei wir schon zum nächsten Punkt kommen: Wo sind deine Fehlerroutinen? Wenn die Datei nicht existiert wird einfach nichts gemacht? Das ist wenig hilfreich. Benutz Exceptions!
    - Wie gedenkst du Schleifen umzusetzen oder Funktionsaufrufe? Lies mal das hier! Du wirst dich darin wiedererkennen
    - Niemals echo in Klassen oder Funktionen verwenden! Benutz return. echo $template->Ausgabe() ist viel flexibler einzusetzen.
    - Versuch Codewiederholungen zu vermeiden, ersetzen() und ersetzen_assoc() machen fast das selbe.
    - Frag dich ob die Klasse überhaupt Sinn macht und einen Mehrwert z.B. gegenüber einem include bietet. Ist zwar sonst schön um mal ein bißchen zu programmieren, aber eigentlich nur Zeitverschwendung, weil du viel eher etwas dabei lernst und motiviert bleibst, wenn die Klasse wirklich einen Mehrwert bietet.
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar


    • #3
      Danke erstmal für die Tipps ich werd versuchen in Zukunft die Tipps zu berücksichtigen
      Und ja ich hab mich in der Story von Bastian Frank wiedererkannt, aber entschuldigt bitte die Frage, seit wann ist es den Möglich so
      PHP-Code:
      <?= $platzhalter ?>
      den Inhalt einer Variable auszugeben? Das ist mir vollkommen neu...


      Mfg
      homekiller

      Kommentar


      • #4
        Siehe PHP short tags

        Using PHP Short Tags < Articles < PHP < Bin-Co
        You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

        Kommentar

        Lädt...
        X