kostenloser Webspace werbefrei: lima-city


Template

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    area-of-games

    area-of-games hat kostenlosen Webspace.

    Hi,
    ich habe letztens was von Templates gelesen und das man da nur einmal eins erstellen muss und alle Seiten dann so aussehen, nur mit anderem Inhalt. Nun aber meine Frage:
    wie funktioniert das und wie erstelle ich mein eigenes template?

    MfG kiote
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m********e

    An sich ist das nix anderes als ein HTML-Design, was auf alle Dateien angepasst werden kann, also einfach eine Homepage mit symbolischem Text der ersetzt werden kann. Du musst also nur eine Webseite erstellen und diese mit sämtlichen Dateien eine ein Archiv (wäre zu empfelen) packen.
    LG
  4. Autor dieses Themas

    area-of-games

    area-of-games hat kostenlosen Webspace.

    Das verstehe ich nicht ganz. Ich habe mir schon das toturial durchgelesen und da steht irgendetwas von in eckige Klammern schreiben und dann so ähnlich wie bei include für jede einzelne Seite einfügen. Funde das aber sonst nirgendswo in einer Beschreibung. Insgesammt sind diese alle ziemlich unterschiedlich. Kann mir einmal vl. ein Bsp. Vorzeigen wie man das schreibt?
  5. Die Grundidee von Templates ist ganz simpel:
    <html>
    <head>
      <title>{TITLE}</title>
    </head>
    <body>
      {CONTENT}
    </body>
    </html>

    Du benutzt an bestimmten Stellen in einem HTML-Dokument Platzhalter. Diese können an allen Orten auf der "Schablone" eingesetzt werden, solange der später eingesetzte Inhalt sich in den Rest fügt. Mit einer Templateklasse oder Templatefunktionen kannst du dann die Platzhalter mit dem Inhalt ersetzen.
    {TITLE} wird zum Titel der Seite und kann so via PHP geändert werden, ohne dass man eine völlig neue HTML-Seite kreieren muss.
    {CONTENT} wird zum Inhalt und kann auch in z.B. einer Tabelle, einer Verschachtelung von Divs oder anderen HTML-Elementen stehen.

    [Wie man den Inhalt ersetzt bleibt einem selbst überlassen (die Faulen überlassen es einem vorgefertigten Templatesystem, wie z.B. Smarty). Zum Auslesen des Templates kann man z.B. die Funktion "html_get_contents" benutzen und zum ersetzen der Platzhalter mit den jeweiligen Inhalten - wenn man es einfach will - "str_replace" oder - für größere Funktionalität - auch kompliziertere Funktionen, wie "explode", um die Templates möglichst übersichtlich gestalten zu können.]

    styVe (qap2-Team)
  6. Hier, sieh mal:
    <?php
      error_reporting(E_ALL | E_STRICT);
      
      class Template
      {
        protected $template;
        protected $content = array();
        
        public function __construct($template = '')
        {
          $this->template = $template;
        }
        
        public function loadTemplateFromFile($file)
        {
          if(file_exists($file))
            $this->template = file_get_contents($file);
          else
            throw new InvalidArgumentException("File doesn't exist!");
        }
        
        public function loadTemplateFromParam($template) {
          $this->template = $template;
        }
        
        public function __set($name, $value)
        {
          $this->content[$name] = $value;
        }
        public function __get($name)
        {
          return $this->content[$name];
        }
        
        public function render()
        {
          $args = func_get_args();
          $num = func_num_args();
          $output = $this->template;
          for($i=0;$i<$num;++$i) {
            $renderer = $args[$i];
            $output = call_user_func($renderer, $output, $this->content);
          }
          return $output;
        }
        
        public static function STD($output, $content) {
          foreach($content as $key=>$value) {
            $output = str_replace('{'.$key.'}', $value, $output);
          }
          return $output;
        }
        
        public static function PARSER_IF($output, $content) {
          foreach($content as $key=>$value) {
            $output = str_replace('[if|'.$key.'|', '', $output);
            $output = str_replace('|'.$key.'|endif]', '', $output);
          }
          
          $notreplaced = substr_count($output, '[if|');
          for($i=0;$i<$notreplaced;++$i) {
            $startifs = strpos($output, '[if|');
            $startife = strpos($output, '|', $startifs + 4);
            if(!$startife) continue;
            
            $key = substr($output, $startifs + 4, $startife - $startifs - 4);
            
            $endif = strpos($output, '|'.$key.'|endif]');
            if(!$endif) continue;
            
            $output = substr($output, 0, $startifs).substr($output,$endif + strlen($key) + 8, strlen($output));
          }
          return $output;
        }
        
        public static function PARSER_CLEANUP($output, $content) {
          return preg_replace('/\{[^}]+\}/', '', $output);
        }
      }
    ?>


    Wie das ganze benutzt wird:
    $site = new Template();
    
    // In der template.tpl werden Platzhalter wie die von qap festgelegt. Also {title}, {content}, usw.
    $site->loadTemlateFromFile('template.tpl');
    
    // ...
    // ...
    // ...
    
    // Der Plathalter {title} wird mit Inhalt gefüllt.
    $site->title = "meine genialste aller Seiten";
    
    // ...
    
    // Der Platzhalter {content} wird mit Inhalt gefüllt.
    $site->content = "ham wa net...";
    
    // Das Template wird ausgegeben, die Platzhalter ersetzt.
    echo $site->render('Template::STD');
    // Das Template::STD ist der Renderer. Wenn du {blabla} Platzhalter benutzen willst, musst du diesen Renderer angeben. Wenn du zusätzlich noch "[if|title| hallo {title} hallo hallo bla blub |title|endif]" Platzhalter nutzen willst (Wenn title gesetzt ist wird der if Bereich angezeigt, ansonsten nicht) nutzen willst, musst du
    // echo $site->render('Template::STD', 'Template::PARSER_IF');
    // angeben. Der dritte Parser 'Template::PARSER_CLEANUP' entfernt alle {platzhalter}, die keinen Wert bekommen haben. (Dieser Parser sollte immer ganz am Ende stehen)


    Wenn du Fragen zur Funktionsweise oder zu Nutzung hast, sag bescheid :)
  7. Es geht um das Prinzip der Trennung von Designt und Inhalt.
    Inhalte bleiben unangetastet, wenn am Design was verändert wird und umgekehrt

    Das Template beinhaltet das Design aufgeteilt in einem "meist" PHP-Dolument und dem dazugeörigen CSS.
    Der Inhalt kann auf unterschiedlicher Weise abgespeichert werden.

    Möglich sind Inhalte als externe Datei in html-, php- oder reiner Textform oder wie auch bei LC möglich in einer MySQL-Datenbank, das man sich als Datei mit vielen verschiedenen Tabellen vorstellen kann.

    Die gebräuchlichsten Content Management Systeme (CMS) arbeiten mit dieser Technik.

    Viel Spaß beim HP bauen.

    Gruß Tom

    Beitrag zuletzt geändert: 29.10.2009 12:02:06 von tom-moeller
  8. Als gutes Template-System kann ich smarty empfehlen.

    Smarty baut nur bei veränderungen die HTML-Seite neu uns cached den stand! Das Spart ungemei ressourcen in der Ausführung... aber nciht am Speicherplatz... die Smarty-Template-Engine benötigt wenige MB...


    ist auch ein guter schritt, um das Design von der Geschäftslogic zu trennen! zum schluss steht nn den tpl-Dateien nur noch HTML-Code und die Übergabepunkte der Variablem mittels Smarty. Mit Eclipse kann man diese strukturen weiterhin gut bearbeiten...

    Beitrag zuletzt geändert: 29.10.2009 12:05:44 von sebulon
  9. Autor dieses Themas

    area-of-games

    area-of-games hat kostenlosen Webspace.

    Also muss ich jetzt einfach eine normale Seite (also mit head und body und allem drumm und drann) in .tpl umwandeln und an den stellen, die ich äandern möchte eine "Variable" {...} einsetzten. kann ich da alles mögliche reinschreiben, z. B. {123} oder {HaLLo}? Muss ich sonst noch etwas z. B. vor head schreiben?

    so und dann muss ich die eigentliche seite erstellen, oder?
    dort muss ich dann die Variable eingeben und dahinter was darein kommt? Wie sieht das genau aus (bitte beispiel mit von mir aus 123)?
    Was muss ich sonst noch reinschreiben, sowas wie include() bitte auch einmal fertig zeigen.

    vielen dank schon mal im Vorraus

    Beitrag zuletzt geändert: 31.10.2009 15:48:14 von area-of-games
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!