Ankündigung

Einklappen
Keine Ankündigung bisher.

Meine erste eigene Klasse

Einklappen

Neue Werbung 2019

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

  • Meine erste eigene Klasse

    Wäre nett wenn ihr mir Tipps geben könntet um dies umzusetzen.. Arbeite momentan zu Lern zwecken an meinem eigenen CMS und mein Designer ist mit PHP mal gar nicht vertraut..

    Es soll halt ziemlich Simple werden.. bzw einige Beispiel:
    PHP-Code:
    $tpl->load('index.tpl');
    $tpl->file('/templates/');
    $tpl->set(array("titel" => $news->titel,
                          
    "poster" => &news->poster_id,
                          
    "content"$tpl->load('news.tpl)
    ));
    $tpl->output(); 
    Ich denke es ist Simpel aufgebaut

    Kennt ihr gute Tutorials?

    am wichtigsten wären mir die beiden Option, ich denke das Smarty sie auch besitzt ist mir aber zu umfangreich.
    PHP-Code:
    "content"$tpl->load('news.tpl) 

    <td>{content}</td> // news.tpl wird dort reingeladen 
    Und das er sich die Templates aus dem Ordner raussucht
    PHP-Code:
    $tpl->file('/templates/'); 
    Ich habe noch nie mit Funktionen gearbeitet. Würde mich aber versuchen mit nem Tutorial rein zu lesen und zu versuchen es umzuetzen.. Immerhin bin ich ja Lernwillig Ich habe lange Zeit mit so einer Klasse gearbeitet ein Freund hat sie damals entworfen, der leider nix mehr mit PHP am Hut hat.

    Bitte, gibt mir Sinnvolle Beiträge und gerne auch welche mit Codebeispiele.. weil ich so immerhin am besten lerne
    oder Codeschnipsel mit kurzer Erklärung.

    Dankeschön,

    Florian "Shapehead" Low
    What You See Is What You Get“

  • #2
    Hallo,

    also lässt sich wenig dazu sagen, wie immer bei Template-Engines poste ich diesen Link:
    http://www.bastian-frank.de/site/fro...t.php?idart=47
    Einfach mal drüber nachdenken.

    Grundsätzlich finde ich deine Methodenbezeichner zu nichtssagend (load, file). Im Zusammenhang mit einer Template-Engine weiß ich jetzt nicht, was die Methode macht. output() scheint da schon klarer zu sein, da du hier aber kein echo/print schreibst, nehm ich an die Methode gibt das ganze sofort aus?! Besser wäre es, wenn du den Inhalt zurückgibst (return), so dass dein zweiter Codeschnippsel mit Frage auch schon beantwortet wäre. Statt:

    PHP-Code:
    <?php
    class Template {
      public function 
    output() {
        include 
    "dein-template.tpl";
      }
    }
    ?>
    lieber
    PHP-Code:
    <?php
    class Template {
      public function 
    output() {
        
    ob_start();
        include 
    "dein-template.tpl";
        return 
    ob_get_contents();
      }
    }
    ?>
    Dann kannst du nämlich auch {content} einfach zuweisen.
    "[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
      Zitat von Chriz Beitrag anzeigen
      Hallo,

      also lässt sich wenig dazu sagen, wie immer bei Template-Engines poste ich diesen Link:
      http://www.bastian-frank.de/site/fro...t.php?idart=47
      Einfach mal drüber nachdenken.

      Grundsätzlich finde ich deine Methodenbezeichner zu nichtssagend (load, file). Im Zusammenhang mit einer Template-Engine weiß ich jetzt nicht, was die Methode macht. output() scheint da schon klarer zu sein, da du hier aber kein echo/print schreibst, nehm ich an die Methode gibt das ganze sofort aus?! Besser wäre es, wenn du den Inhalt zurückgibst (return), so dass dein zweiter Codeschnippsel mit Frage auch schon beantwortet wäre. Statt:

      PHP-Code:
      <?php
      class Template {
        public function 
      output() {
          include 
      "dein-template.tpl";
        }
      }
      ?>
      lieber
      PHP-Code:
      <?php
      class Template {
        public function 
      output() {
          
      ob_start();
          include 
      "dein-template.tpl";
          return 
      ob_get_contents();
        }
      }
      ?>
      Dann kannst du nämlich auch {content} einfach zuweisen.
      Hiermit->
      PHP-Code:
      $tpl->file('/templates/'); 
      Soll er den Ordner durchsuchen nach Templates, die ich dann ja dann mit
      PHP-Code:
      $tpl->load('news.tpl'
      lade und mit {content} ersetze und das alles mit
      PHP-Code:
      $tpl->output('index.tpl'); 
      ausgebe..

      Hoffentlich ist das nun verständlich :P

      Die Seite kenne ich schon und es gibt ja mehr Meinungen dazu..

      Meine ist ich möchte mir eine Entwerfen.. dient zu Lern zwecken =) und der Deigner Profitiert auch davon :P
      What You See Is What You Get“

      Kommentar


      • #4
        Ohne die Klasse zu kennen, kann man dir schwer weitere Ratschlaege geben.
        "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

        Kommentar


        • #5
          Zitat von Chriz Beitrag anzeigen
          Ohne die Klasse zu kennen, kann man dir schwer weitere Ratschlaege geben.
          Jap, hätte ich die Klasse, wäre ja alles in Ordnung. Hat PHP ein befehl um Ordner nach dateien zu durchsuchen? dann könnte ich ja schon mit..

          PHP-Code:
          $tpl->file('/templates/'); 
          anfangen.. das er schon mal den Ordner nach Dateien durchsucht..
          What You See Is What You Get“

          Kommentar


          • #6
            Zunächsteinmal solltest du versuchen, deinen Methoden eindeutigere Namen zu geben.
            Deine Methode "file" soll ja anscheinend nur den Pfad mit den Templates setzen .. dann solltest du sie auch lieber setTemplateDirectory oder so nennen. Ansonsten würde jeder andere verwirrt werden, weil dein Methodenname ja irgendwelche Dateien impliziert ...

            die benennung der eigentlichen Templatedatei würde ich allerdings erst bei der funktion einbauen, die nachher tatsächlich auch das Template einlesen soll. Ist so zumindestens üblich, auch wenn es natürlich auch möglich ist, das ganze anders zu machen.

            PHP-Code:
            <?php
            class Template {
                private 
            $directory;
                
                public function 
            __construct() {
                    
            $this->directory "/template/"//Standardverzeichnis
                
            }
                
                public function 
            setDirectory($directory) {
                    
            $this->directory $directory;
                }
                
                public function 
            render($filename) {
                    
            ob_start();
                    include 
            $this->directory.$filename;
                    return 
            ob_get_contents();
                }
                
            }
            ?>
            Der Code ist so natürlich noch absolut unbrauchbar, da keine Variablen gesetzt werden können und so weiter ... aber er zeigt immerhin, wie du das mit dem Verzeichnis regeln kannst.

            Kommentar


            • #7
              Du musst ja eigentlich nur die Pfadangabe von load und file zusammenfuegen. Mit is_dir() kannst du die Eingabe von load() validieren.

              PHP-Code:
              <?php
              class Template {
                protected 
              $_dir;
                public function 
              load($dir) {
                 if (!
              is_dir($dir)) { throw new Exception(".."); }
                 
              $this->_dir $dir;
                }
                public function 
              file($file) {
                  
              $file $this->_dir $file;
                  if (!
              is_file($file)) { throw new Exception(".."); }
                  include 
              $file;
                }
              }
              ?>
              Edit: zu spaet..
              "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

              Kommentar


              • #8
                Templateverarbeitung kann man in wenigen Zeilen darstellen:


                PHP-Code:
                // Template laden
                $html file_get_contents('start.html');

                //Platzhalter ersetzen
                $ers = array(
                  
                '{name}' => $name,
                  
                '{email}' => $email
                );
                $html strtr($html,$ers);

                // Ausgeben
                echo $html
                Das Ausgeben ist die letzte Zeile im Script. Man kann das vielleicht so machen:

                PHP-Code:
                $html = new Template;
                $html->lade('start.html');
                $html->ersetze($ers);

                // letzte Zeile im Script
                $html->ausgeben(); 
                Hier hat das Ding nur drei Methoden und gefühlte 50 Zeilen Code.
                [PHP]if ($var != 0) {
                $var = 0;
                }[/PHP]

                Kommentar


                • #9
                  Statt Platzhalter zu ersetzen kannst du auch eigentlich die PHP-Syntax nehmen. Deine Klasse bleibt schön klein, kann auch mit IF-Abfragen und Schleifen umgehen.

                  http://www.php.de/php-einsteiger/612...tml#post469438
                  PHP-Code:
                  echo "Hello World"

                  Kommentar


                  • #10
                    Das erklär mal einem PHP-unkundigem Webdesigner, dass er an die Stelle, an der eine Emailadresse ausgegeben werden soll so was schreiben muss: $this->email
                    Einen Platzhalter der Art {email} wird er besser kapieren.
                    Aber im Prinzip hast du natürlich recht - man kann das halten wie ein Dachdecker.
                    [PHP]if ($var != 0) {
                    $var = 0;
                    }[/PHP]

                    Kommentar


                    • #11
                      Die Syntax ist nicht viel komplizierter als die Syntax von Engines wie Smarty. Bedeutet für den Designer nur bisschen mehr Tipparbeit. Spätestens wenn Schleifen, Bedingungen dazukommen machts keinen großen Unterschied mehr.

                      PHP-Code:
                      <div class="x">
                          {if $loggedin}
                              <strong>Hallo {$username}</strong>
                              <ul class="y">
                                  <li><a href="profile.php">profil Ändern</a></li>
                                  <li><a href="...">...</a></li>
                                  ...
                              </ul>
                          {/if}
                      <div>


                      <div class="x">
                          <?php if ($this->loggedin): ?>
                              <strong>Hallo <?php echo $this->username?></strong>
                              <ul class="y">
                                  <li><a href="profile.php">profil Ändern</a></li>
                                  <li><a href="...">...</a></li>
                                  ...
                              </ul>
                          <?php endif; ?>
                      <div>
                      PHP-Code:
                      echo "Hello World"

                      Kommentar


                      • #12
                        PHP-Code:
                        <div class="x"> 
                            <?php if ($this->loggedin): ?> 
                                <strong>Hallo <?php echo $this->username?></strong> 
                                <ul class="y"> 
                                    <li><a href="profile.php">profil Ändern</a></li> 
                                    <li><a href="...">...</a></li> 
                                    ... 
                                </ul> 
                            <?php endif; ?> 
                        <div>
                        Bei dem $this->loggedin und $this->username kann man schließen das diese Werte aus public Members kommen bzw. diese Werte public Members wiederspiegelen, dass halte ich für einen schlechten Stil. Es sollte zumindest bei der loggedin Prüfung so sein, dass dies eine öffentliche Methode ist die einen Wert z.B. TRUE zurückgibt und man da im IF das loggedin gegen FALSE prüfen.

                        Über das was ein Webdesigner besser lesen kann, kann min sich wahrlich streiten, es wird wohl solche und solche geben, aber in der Regel (das ist die Erfahrung die ich gemacht habe) tuen sich Designer mit Platzhaltern weniger schwer.

                        Gruß Litter
                        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                        [URL]http://www.lit-web.de[/URL]

                        Kommentar


                        • #13
                          Litter - hier gehts um eine Klasse, die Formulare behandelt. Daher $this->

                          Ich würde in dem Formular ein {menu} schreiben und dort das ausgeben lassen, was da hin soll. Wenn der Designer da rumprogrammiert ('aber beim letzten mal sollte ich doch auch if und so schreiben') dann kann ich das HTML auch gleich selbst mitmachen.

                          Winke nach Pirne
                          [PHP]if ($var != 0) {
                          $var = 0;
                          }[/PHP]

                          Kommentar


                          • #14
                            Wenn ich nicht bald jemand finde der mir ne Klasse so schreibt verzweifel ich echt bald

                            Ich bekomme sone Class + Funktionen einfach nicht hin.. dafür ist mein PHP wissen nicht gut genug.. bin zwar noch am lernen.. aber es demotiviert nach einer Zeit..
                            What You See Is What You Get“

                            Kommentar


                            • #15
                              Zitat von Shapehead Beitrag anzeigen
                              Wenn ich nicht bald jemand finde der mir ne Klasse so schreibt verzweifel ich echt bald

                              Ich bekomme sone Class + Funktionen einfach nicht hin.. dafür ist mein PHP wissen nicht gut genug.. bin zwar noch am lernen.. aber es demotiviert nach einer Zeit..
                              Dann back doch erstmal kleinere Brötchen.

                              Lern prozeduale Programmierung basiert auf Funktionn bevor du mit Klassen anfängst.

                              Als Bäcker baust du auch nicht sofort die 5-Stöckige Hochzeitstorte und als Architekt entwirfst du auch nicht als erstes den Eifelturm neu...
                              "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                              Kommentar

                              Lädt...
                              X