Ankündigung

Einklappen
Keine Ankündigung bisher.

Templates

Einklappen

Neue Werbung 2019

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

  • Templates

    Hallo

    Kann mir jemand sagen welches Template System am einfachsten ist?

    Ich möchte Code und Design trennen und wenn nötig mit einem Template System machen.

    Wenn es auch anders geht natürlich auch so.

    Ich hatte mal ein WBB Forum und dort fand ich nirgends ein Template System und trotzdem funktioniert das ganze mit Templates

    Wäre froh wenn mir da jemand helfen kann

  • #2
    Hey, prinzipiell brauchst du keine eigene Template-"Engine", mit PHP kannst du dir alles selbst bauen:

    Template.class.php
    PHP-Code:
    <?php
    class Template {
      public function 
    Render($strFile) {
        include 
    $strFile;
      }
    }
    ?>
    index.php:
    PHP-Code:
    <?php
    require "Template.class.php";
    $objTemplate = new Template();
    $objTemplate->Title "Europameister 2008";
    $objTemplate->Text ".. sollte Deutschland werden!";
    $objTemplate->Render("index.tpl.php");
    ?>
    index.tpl.php:
    PHP-Code:
    <html>
    <head><title><?= $this->Title ?></title></head>
    <body>
    <h1><?= $this->Title ?></h1>
    <span><?= $this->Text ?></span>
    </body>
    </html>
    Mehr steckt prinzipiell nicht dahinter, Caches, Konfigurationen etc. kannst du dir selbst bauen wenn du es benoetigst.
    "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

    Kommentar


    • #3
      Hi,

      Ich sehe da schlechtes OOP Design, da du direkt auf Membervariablen von Objekten zugreifst, was man vermeiden sollte und auch nie braucht.

      Gruß Thomas

      Kommentar


      • #4
        Zitat von Thomas Beitrag anzeigen
        Hi,

        Ich sehe da schlechtes OOP Design, da du direkt auf Membervariablen von Objekten zugreifst, was man vermeiden sollte und auch nie braucht.

        Gruß Thomas
        Hi Thomas,

        ich denke register_globals wollte hier nur das Prinzip erklären und funktionieren wird es so auch. Das da einiges dran zu verbessern ist ist gar keine Frage, aber um das Prinzip zu erklären find ich das Beispiel ganz gut...

        Kommentar


        • #5
          Hi,

          Dann sollte man sowas dazu schreiben, denn sonst werden solche schlechten Praktiken schnell zum Standard bei Anfängern.

          Gruß Thomas

          Kommentar


          • #6
            Könnte dann jemand von euch vielleicht hinschreiben wie es besser gemacht werden sollte. das würde vorallem einem Anfänger wie mir weiter helfen. Den nun steht ein Code da den ihr für falsch empfindet und nun weiss ich wieder gleich viel wie am anfang

            Kommentar


            • #7
              hi du könntest natürlich auch auf joomla zurückgreifen das ist ein relativ einfaches CMS system mit haufenweise kostenlosten templates die du benutzen kannst. Und je nach umfang kannst du damit auch ganz schicke komplizierte sachen bewerkstelligen ist open source alles Joomla!

              greetz

              Kommentar


              • #8
                Zitat von Thomas Beitrag anzeigen
                Ich sehe da schlechtes OOP Design, da du direkt auf Membervariablen von Objekten zugreifst, was man vermeiden sollte und auch nie braucht.
                In diesem Fall ist das doch kein Ding. Die Template-Klasse und ihre Member werden ja nur zum "durchschleusen" der Werte für das Template verwendet.

                Vielleicht nicht schön, aber allemal ok für den Zweck.
                [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

                Kommentar


                • #9
                  Hi,

                  Was heißt ein Ding. Das ist einfach ein super simples Beispiel und trotzdem verstößt es gegen ein Grundprinzip der OOP. Wenn er dann noch andere Klassen programmiert und sich dort an die Prinzipien hält, dann hat er auch noch einen Mischmasch im Programmierstil.

                  Gruß Thomas

                  Kommentar


                  • #10
                    Hey robydog.

                    also, ein einfacher weg templates zu erstellen wäre z.B. so. (bin natürlich auch für kritik offen, was die anderen daran noch verbessern würde, oder was ich da falsch gemacht habe).

                    Also fangen wir mal an.

                    Zu erst brauchen wir eine datei, in der wir die Klasse für das Template erstellen.

                    Nennen wir sie einfach einmal "template.class.php".

                    Diese bauen wir wie folgt auf:
                    PHP-Code:
                    <?php 
                    class Template{
                    protected 
                    $template = array(); //Hier werden mehrere Templates zusammengefügt, dadurch wird es ermöglicht das eine Seite sich auch aus mehreren Templates aufbauen lässt.
                    protected $templateDir "templates/"//Hier kannst du irgendein verzeichnis angeben in dem Anschließend die Templates gespeichert werden und wieder ausgelesen
                    protected $templateTyp ".tpl"// Hier die endung der Template dateien
                     
                    // So, nun fangen wir mit der Template funktion an, welche die Templates abruft, zusammenfasst, und anschließend wiedergibt.
                     
                    public function get($template)
                    {
                    $this->template[$template] = file_get_contents($this->templateDir.$template.$this->typ); //Hier wird mit hilfe von file_get_contens der Inhalt vom Template geholt,und in unserem Array $template gespeichert.
                     
                    return $this->template[$template]; //zurückgeben des Templates
                    }
                     
                    //Da sich eine Seite meist aus mehreren Templates zusammen stellt, brauchen wir jetzt noch eine Funktion die später, wenn wir fertig sind, alle Templates zusammenfasst und ausgibt.
                     
                    public function out($template)
                    {
                           print(
                    $template);
                    }
                    }
                    ?>
                    So, das war nun der Inhalt für template.class.php !

                    Diese kann man natürlich noch weiter ergänzen, um z.B. verschiedene Sprachen mithilfe von Sprach Variablen zu laden.

                    Kommen wir jetzt zur index.php, welche auf diese Klasse zugreift, und für das zusammensetzen der Seite zuständig ist.

                    index.php:
                    PHP-Code:
                    <?php
                           
                    //zuerst einmal includen wir unsere template datei.
                           
                    include 'template.class.php';
                     
                          
                    // nun erstellen wir unser template objekt =)
                          
                    $tpl = new template();
                          
                    // sonst können wir unsere funktion gar nicht verwenden 
                     
                          //jetzt fangen wir an unsere Tpl datei einzufügen. (keine angst, die schreiben wir später noch), diese Template datei wird in der Variable $content hinterlegt.
                     
                         
                    eval("\$content=\"".$tpl->get("index")."\";");
                     
                     
                         
                    //So wie man sieht, wird unsere get function welche wir in unsere Template.class.php Datei befindet aufgerufen und zwar mit dem Parameter "index", dadurch das wir vorhin einen Typ erstellt haben, wird automatisch index.tpl aufgerufen
                     
                          //So nun müssen wir nur noch unsere funktion zum ausgeben von unserem Template aufrufen, und schon haben wir es fast geschafft =)
                     
                         
                    eval("\$tpl->out(\"".$content."\");");
                    ?>
                    So, nun kommen wir zu unserer Template datei, welche den html code beinhaltet. (nicht vergessen, diese muss wie man in unserer Template.class.php datei sehen kann im verzeichniss Templates liegen !!)

                    index.tpl:
                    Code:
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                    <html xmlns="XHTML namespace">
                    <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                    <title>Index.tpl</title>
                    </head>
                    <body>
                    Das hier ist unsere Template Datei, welche ausgegeben wird !
                    </body>
                    </html>
                    So, das wars auch schon =), jetzt wird jedesmal wenn du die index.php aufrufst die index.tpl ausgegeben.

                    Falls ich dir noch irgendwas erklären soll, oder du noch weitere hilfe brauchst dann meld dich.



                    Mfg Neo

                    Mein derzeitiges WebProjekt: http://www.xtaste.de

                    Kommentar


                    • #11
                      Zitat von Thomas Beitrag anzeigen
                      Was heißt ein Ding. Das ist einfach ein super simples Beispiel und trotzdem verstößt es gegen ein Grundprinzip der OOP.
                      Ich will damit nur sagen, dass "OOP" keine Religion ist und Prinzipien da sind um gebrochen zu werden wenn man sich einen Vorteil davon verspricht.
                      (ja, hier hat das vllt. keinen Vorteil gegenüber einem ->assign() o.ä..., trotzdem.)

                      Wenn er dann noch andere Klassen programmiert und sich dort an die Prinzipien hält, dann hat er auch noch einen Mischmasch im Programmierstil.
                      Das wird ihm am Anfang doch sowieso passieren

                      Ich versteh schon was du meinst und dein Hinweis war sicher richtig.
                      [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

                      Kommentar


                      • #12
                        Hi,

                        Was mir sofort aufgefallen ist, ist diese Funktion:

                        PHP-Code:
                        public function out($template)
                        {
                               print(
                        $template);

                        Man sollte niemals Ausgaben direkt in einer Funktion machen (höchstens für debugging Zwecke), sondern immer einen Rückgabewert erzeugen, den man ausgeben oder weiter bearbeiten kann.

                        Den Rest schaue ich mir vielleicht später an.

                        Gruß Thomas

                        Kommentar


                        • #13
                          Hey Thomas,

                          dann könnte man
                          PHP-Code:
                           
                          public function out($template)
                          {
                                
                          print_r($template);

                          durch
                          PHP-Code:
                           
                          public function out($template)
                          {
                                return 
                          print_r($template);

                          ersetzen oder ?

                          Gruß neo

                          Mein derzeitiges WebProjekt: http://www.xtaste.de

                          Kommentar


                          • #14
                            Sollte klappen. Du bekommst den Wert der $template-Variablen in anschaubarer Darstellung zurückgeliefert. Aber dann hast du auch das Problem, dass Arrays halt in der print_r()-Weise dargestellt werden.

                            Kommentar


                            • #15
                              Sagt mal hab ich was auf den Augen oder ist die Out-Methode total Überflüssig?

                              Kommentar

                              Lädt...
                              X