Ankündigung

Einklappen
Keine Ankündigung bisher.

Smarty und das MVC

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

  • Smarty und das MVC

    Hallo zusammen!

    Ich habe mir vor einigen Wochen das Buch PHP Design Patterns geholt. Zum Üben entwerfe ich gerade mein eigenes kleines Framework; ich weiß, man soll das Rad nicht neu erfinden, aber es macht Spaß und ist ne gute Übung, ob ich es auch wirklich im produktiven Einsatz verwende, mal sehen.
    Jedenfalls wollte ich das ganze so entwerfen, dass ich die Möglichkeit habe, über verschiedene Template-Klassen die Daten entweder als HTML auszugeben oder z.B. als JSON oder XML um auch One-Page-Applications z.B. mit JavaScript oder Flex auf gleicher PHP-Basis entwerfen zu können.

    Aber genug geschwafelt, kommen wir zum eigentlichen Thema: Ich arbeite in der Template-Klasse, die für die HTML-Ausgabe zuständig ist, intern mit Smarty als Template-System; einfach aus dem Grund, dass ich Smarty vor Jahren mal genutzt habe und mit anderen Template-System noch nicht gearbeitet habe.
    Nun habe ich allerdings an mehreren Stellen gelesen, das Smarty dem MVC eher widerspricht. Die Frage die ich mir stelle ist: Wieso? Mir ist klar, dass Smarty eine große Auswahl an Funktionen besitzt, die mehr als nur den Aufgabenbereich der View erledigen können.
    Allerdings sind bei den von Smarty bereitgestellten Modifizierern auch einige dabei, die ich ehrlich gesagt nicht missen möchte, wie z.B. die Möglichkeit, Strings zu kürzen. Natürlich könnte ich diese Dinge auch in PHP erledigen und - um beim Beispiel des Kürzens zu bleiben - nur die gekürzten Strings an die Template-Klasse zu übergeben, würde mir dann allerdings die Möglichkeit nehmen, diese in JavaScript/Flex zu bearbeiten und individuell zu handeln.

    Daher sehe ich in Smarty eher vor als Nachteile, aber wahrscheinlich tappe ich völlig im Dunkeln...
    Liebe Grüße

    Melkor
    Programming PHP


  • #2
    Nun habe ich allerdings an mehreren Stellen gelesen, das Smarty dem MVC eher widerspricht.
    Hmm Du gibst Dir die Antwort selbst in den Sätzen danach.
    Daher sehe ich in Smarty eher vor als Nachteile,
    Die Aussage ist ja auch wertungsfrei. Advanced Templating und MVC sind beide sehr praktisch/sinnvoll, aber eben nicht wirklich zu vereinen.

    entwerfe ich gerade mein eigenes kleines Framework
    Na da bin ich gespannt. Wenn ich mir angucke, wie lange ich jetzt schon an meinem sitze.. Was auchnimmer klein bei Dir heißt.
    Jedenfalls wollte ich das ganze so entwerfen, dass ich die Möglichkeit habe, über verschiedene Template-Klassen die Daten entweder als HTML auszugeben oder z.B. als JSON oder XML
    Imho ist hierfür eher das Controlling bspw. der Frontcontroller zuständig. Direkt Templating würde ich das nicht nennen.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Zitat von nikosch
      Advanced Templating und MVC sind beide sehr praktisch/sinnvoll, aber eben nicht wirklich zu vereinen.
      Und genau das ist der Punkt, an dem es bei mir etwas hakelt.
      Das es nicht gut ist, wenn das Template mehr als nur die View-Aufgabe übernimmt, aber wo genau sind da die Grenzen? Ich sehe da nämlich durchaus eine Möglichkeit, die Ausgabe möglichst variabel gestalten zu können, die sonst nicht gegeben wäre (wenn ich z.B. in JavaScript die ungekürzten Strings haben will und in HTML die gekürzten).
      Programming PHP

      Kommentar


      • #4
        Das es nicht gut ist, wenn das Template mehr als nur die View-Aufgabe übernimmt, aber wo genau sind da die Grenzen?
        Tja, das ist ne schwierige Frage. Dieser Artikel ist ganz gut: Application Logic Versus Template Logic - PHP articles and PHP tutorials - PHP 5, MySQL, PostgreSQL, AJAX, Web 2.0
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Zitat von nikosch
          Advanced Templating und MVC sind beide sehr praktisch/sinnvoll, aber eben nicht wirklich zu vereinen.
          Einspruch euer Ehren! Das APF verfolgt genau diesen Ansatz. Auch wenn es bisher keine <if />-Tags gibt - bewusst, weil das eben zuviel Applikationslogik ist - kann mit den generischen Taglibs im Template-Bereich so einiges angestellt werden. zusätzlich dazu kann man gemäß dem H-MVC/APF-MVC sauber implementieren.

          Zitat von Melkor
          Daher sehe ich in Smarty eher vor als Nachteile, aber wahrscheinlich tappe ich völlig im Dunkeln...
          Smarty alleine ist für MVC eher ungeeignet. Ich habe bisher keine Möglichkeit gesehen Controller in die Transformation eines Templates zu injizieren.

          Zitat von Melkor
          entwerfe ich gerade mein eigenes kleines Framework
          Schau dir mal http://adventure-php-framework.org/Seite/047-Templates, http://adventure-php-framework.org/S...s#2-3-Template und http://adventure-php-framework.org/Seite/006-Controller an. Dort solltest du einige hübsche Sachen finden, die du out-of-the-box nutzen kannst ohne gleich ein ganzes Framework schreiben zu müssen. Letzteres ist übrigens auch nicht so ganz einfach...
          Viele Grüße,
          Dr.E.

          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          1. Think about software design before you start to write code!
          2. Discuss and review it together with experts!
          3. Choose good tools (-> Adventure PHP Framework (APF))!
          4. Write clean and reusable software only!
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

          Kommentar


          • #6
            Dank euch beiden für die Links
            Werd mir das mal anschauen und zusehen, dass ich noch ein wenig was dazulernen kann.


            Zitat von nikosch Beitrag anzeigen
            Na da bin ich gespannt. Wenn ich mir angucke, wie lange ich jetzt schon an meinem sitze.. Was auchnimmer klein bei Dir heißt.
            Klein heißt wirklich noch klein bei mir, im Moment sind es so um die 20 Klassen
            Programming PHP

            Kommentar


            • #7
              Zitat von dr.e. Beitrag anzeigen
              Einspruch euer Ehren! Das APF verfolgt genau diesen Ansatz. Auch wenn es bisher keine <if />-Tags gibt - bewusst, weil das eben zuviel Applikationslogik ist
              Du verwendest keine Bedingungen in deinen Templates? Wie stellst du abwechselnd farblich hervorgehoben Datensaetze dar, wie negative/positive Werte rot/gruen etc.? Ich brauch sogar recht haeufig Bedingungen, und teilweise holt sich das View auch direkt Daten, z.B. Uebersetzungstexte. Das im Controller schon bereitzustellen ist ein unsinniger Overhead.
              "Mein Name ist Lohse, ich kaufe hier ein."

              Kommentar


              • #8
                Ich denke mal, das läuft über Taglibs.
                Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                Kommentar


                • #9
                  @Chriz:
                  Du verwendest keine Bedingungen in deinen Templates? Wie stellst du abwechselnd farblich hervorgehoben Datensaetze dar, wie negative/positive Werte rot/gruen etc.? Ich brauch sogar recht haeufig Bedingungen, und teilweise holt sich das View auch direkt Daten, z.B. Uebersetzungstexte. Das im Controller schon bereitzustellen ist ein unsinniger Overhead.
                  Sofern das nur eine einmalige und nicht wiederverwenbare Logik darstellt sollte der Controller verwendet werden, im Falle von mehrfach einsetzbaren Formatierungen läuft das über Taglibs (@Manko10: richtig!). Damit hast du die Flexibilität es so zu tun, wie dir beliebt und bist dadurch nicht eingeschränkt. Weiterhin hast du jedoch trotzdem die Möglichkeit, sauberes GUI-Softwaredesign zu betreiben. Die Kombination aus beidem ist für mich "Advanced Templating" und das Ziel, das jedes Template-System erreichen sollte.

                  Frohe Weihnachten,
                  Dr.E.
                  Viele Grüße,
                  Dr.E.

                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  1. Think about software design before you start to write code!
                  2. Discuss and review it together with experts!
                  3. Choose good tools (-> Adventure PHP Framework (APF))!
                  4. Write clean and reusable software only!
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                  Kommentar


                  • #10
                    Hört sich interessant an, ich hab das bisher nur mit ViewHelpern gemacht. Ist das ähnlich?
                    "Mein Name ist Lohse, ich kaufe hier ein."

                    Kommentar


                    • #11
                      Hallo Chriz,

                      da ich mit ViewHelpern die wenigste Zeit arbeite, habe ich das bei CakePHP nochmal nachgelesen. Die Ähnlichkeit ergibt der TagLibs zu den ViewHelpern sich aus der Wiederverwendbarkeit. Der Unterschied liegt jedoch darin, dass sich diese "ViewHelper" wie alle anderen Tags verhalten und als Kinder im DOM-Baum erscheinen. Letzteres ist vor allem deshalb interessant, da sie dann über Standard-Mechanismen adressiert und manipuliert werden können.

                      Die Document-Controller können im allerweitesten Sinne auch als ViewHelper fungieren, da die Funktion ja vererbbar ist. Weiterhin können Controller auch für verschiedene Templates verwendet werden, da einem Template ein Controller zugewiesen wird, nicht umgekehrt. Grundsätzlich sind jedoch Controller mehr für die Präsentationslogik denn für die originäre View-Logik zuständig.

                      Wenn du dir das mal genauer ansehen möchtest, sag Bescheid, dann chatten wir mal und ich zeige dir live ein paar Beispiele.
                      Viele Grüße,
                      Dr.E.

                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      1. Think about software design before you start to write code!
                      2. Discuss and review it together with experts!
                      3. Choose good tools (-> Adventure PHP Framework (APF))!
                      4. Write clean and reusable software only!
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                      Kommentar


                      • #12
                        Gern, hast eine PM.
                        "Mein Name ist Lohse, ich kaufe hier ein."

                        Kommentar

                        Lädt...
                        X