Ankündigung

Einklappen
Keine Ankündigung bisher.

Grundfrage Templatesystem

Einklappen

Neue Werbung 2019

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

  • Grundfrage Templatesystem

    Hi Leute,

    wer hat schon mal den Versuch unternommen DOM direkt zu manipulieren statt z.b. HTML-Templates über Maskierte Positionen zusammen zu setzen?
    Ich hatte als Grundüberlegung gedacht, das es immer besser ist vorhandene Möglichkeiten auszureitzen bevor man anfängt das Rad bzw die Sprache neu zu erfinden.
    In alten Porjekten hatte ich mir eine Klasse zusammengebaut die HTML rekursiv selbständig über Maskierungen in HTML zusammensetzt. Aber ich frag mich ob es besser ist HTML aus Templates und aus dynamischen Objekten zusammen zu bauen und das Zusammensetzen der HTML-Teile über DOM-Operationen organisiert. Ich werd sicher meine Erfahrung damit sammel und noch ist auch kein produktiver Einsatz geplant, aber ich hab so eine Vorahung, dass ich über DOM gleich mehrere Probleme abfangen könnte. z.b. wäre es denkbar mit gleichen HTML-Objekte die über Klassen erzeugt wurde, sowohl Ajax zu versorgen um Teile nachzuladen und auch den ersten Aufbau der Seite mit den gleichen Objekten zu organisieren. Einerseitz hab ich vor, weiterhin statisches HTML für das Grundgerüst einzuhämmern. Möchte aber für Tabellen und Formulare eigene Klassen erstellen, weil ich damit auch die Validierung dynamisch gestalten kann.

    Gibt es Argumente die dafür und dagegen sprechen DOM oder Template-Klassen zu verwenden?
    bitcoin.de <- Meine Freelancerwährung

  • #2
    Ich bin mir nicht sicher ob ich deine Frage richtig verstehe, aber ich kann mal grob einwerfen wie ich das mache. Grundsätzlich versuche ich HTML nicht hinter Klassen o.ä. zu verstecken. HTML schreibe ich grundsätzlich in .html-Dateien (serverseitig sind das dann meistens Twig-Templates) und wiederverwendbare Fragmente / Komponenten oder Layouts werden entsprechend ausgelagert. Wenn ich also bspw. eine Komponente baue die eine Liste ausgibt, dann könnte das so aussehen:

    index.html
    HTML-Code:
    <h2>Some users</h2>
    <p>Blabla</p>
    
    {% include 'components/list.html' with {rows: users} %}
    list.html
    HTML-Code:
    <div class='list'>
      {% for row in rows %}
      <div class='list-item'>
        <!-- render list item -->
      </div>
      {% endfor %}
    </div>
    [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

    Kommentar


    • #3
      @alpha: welchen Vorteil siehst Du in der direkten Dom-Manipulation gegenüber existierenden Template-Engines? Es sei denn, es geht Dir ums lernen.

      Kommentar


      • #4
        Ich seh als ersten Vorteil, eine vorhandene Sprache zu nutzen statt sich eine Neue einfallen zu lassen. Ein weiterer Grund wäre die Dom-Objekte mit PHP objektorientiert zu manipulieren. Und den Vorteil keine fremden Codebestandteile in den und keine Logik in die HTML-Templates zu verlagern.
        bitcoin.de <- Meine Freelancerwährung

        Kommentar


        • #5
          Dann verwende doch einfach PHPTAL:

          https://phptal.org/

          Kommentar


          • #6
            Zitat von Alpha Beitrag anzeigen
            Ich seh als ersten Vorteil, eine vorhandene Sprache zu nutzen statt sich eine Neue einfallen zu lassen.
            Du kannst auch einfach Plain-PHP für deine Templates nutzen.

            Zitat von Alpha Beitrag anzeigen
            Ein weiterer Grund wäre die Dom-Objekte mit PHP objektorientiert zu manipulieren.
            Ich verstehe den Vorteil nicht so ganz. Wieso willst du serverseitig ein DOM erzeugen und manipulieren um letztlich statisches HTML auszuspucken? Du kannst deine Ideen aber gerne (auch anhand von Beispielen) näher erläutern, dann können wir sinnvoll darüber diskutieren.

            Zitat von Alpha Beitrag anzeigen
            Und den Vorteil keine fremden Codebestandteile in den
            In den? Templates?

            Zitat von Alpha Beitrag anzeigen
            und keine Logik in die HTML-Templates zu verlagern.
            Wenn du im PHP-Kontext bleibst ist die Versuchung deine "Templates" mit Logik vollzuballern deutlich größer. Wenn du bspw. Twig nutzt bist du ziemlich eingeschränkt. Du kannst also gar nicht allzu viel Logik in die Templates packen und bist gezwungen das vorher zu erledigen.
            [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

            Kommentar


            • #7
              Ich will DOM manipulieren, nicht das Template damit erzeugen.
              bitcoin.de <- Meine Freelancerwährung

              Kommentar


              • #8
                Zitat von Alpha Beitrag anzeigen
                Ich will DOM manipulieren, nicht das Template damit erzeugen.
                Dafür hat PHP sehr schöne sachen wie etwa http://php.net/manual/de/class.domdocument.php und mit Xpath kann man dann das Element finden und bearbeiten
                apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                Kommentar


                • #9
                  Zitat von Alpha Beitrag anzeigen
                  Ich will DOM manipulieren, nicht das Template damit erzeugen.
                  Wie gesagt, du kannst natürlich serverseitig ein DOM erzeugen und auch manipulieren. Da du im Titel aber von Templatesystem sprichst, wird als Resultat auch nur HTML erzeugt. Da du bisher aber keinen groben Entwurf geliefert hast, kann man schlecht darüber sprechen - denn es ist schlichtweg unklar wie genau du dir das in der Praxis vorstellst. Zeig doch einfach mal her wie du dir das vorstellst, dann können wir über die Vor- und Nachteile diskutieren.
                  [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                  Kommentar


                  • #10
                    Was ist an den Satz unverständlich? Ich zitier mich mal selber -> "DOM direkt zu manipulieren statt z.b. HTML-Templates"
                    Ich hab doch gerade gemeint, das ich lieber DOM einsetzen möchte statt ... ach egal.
                    bitcoin.de <- Meine Freelancerwährung

                    Kommentar


                    • #11
                      Redest du davon für die verschiedenen HTML-Elemente PHP-Klassen anzulegen die dir entsprechendes HTML zurückliefern wenn du Daten da durch jagst?

                      Ansonsten habe ich auf Arbeit ein System bei dem die View per XSL entsprechend der übergebenen Daten in HTML zusammenstellt wird. Da gibt es dann auch für die verschiedenen HTML-Elemente eigene Templates die dann beim Aufbau der View importiert werden... -> hat imo keinen Vorteil, geht halt weg vom Imperativen zum Deklarativen und ist damit 'exotischer'.

                      Das wären zwei Arten wie ich dein 'DOM manipulieren' deuten könnte.

                      Ich seh als ersten Vorteil, eine vorhandene Sprache zu nutzen statt sich eine Neue einfallen zu lassen.
                      What.
                      Welches wäre denn die 'neue' Sprache? HTML ist ja schon eine ganze weile etabliert.
                      Ein weiterer Grund wäre die Dom-Objekte mit PHP objektorientiert zu manipulieren.
                      Hierzu hätte ich auch wirklich gerne ein Beispiel.
                      Und den Vorteil keine fremden Codebestandteile in den und keine Logik in die HTML-Templates zu verlagern.
                      Wo sollten die fremden Codebestandteile herkommen?

                      Ein Vorteil der etablierten Methoden wie Templateengine oder HTML mit PHP-Kontrollstrukturen ist, dass auch Leute die keine PHP-Entwickler sind recht einfach Views zusammenschustern können. Wenn man nur die Kontrollstrukturen einsetzt gibt es da gar nicht sooo viel das man können muss.
                      [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                      [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                      Kommentar


                      • #12
                        Zitat von VPh Beitrag anzeigen
                        Wo sollten die fremden Codebestandteile herkommen?
                        Viele Template-Engines verwenden eine eigene Syntax. Ich bin auch kein Fan davon, weil man dann HTML-Syntax mit fremder Syntax in einer Datei hat. Auch bei PHP-Templates wird PHP-Code mit HTML-Code vermischt. IMHO ist es sauberer, wenn man sich auf HTML oder XML beschränkt und sonst nichts darunterrührt. Das macht vieles einfacher und logischer. Auch hat man so nicht die Gefahr ungültige (X)HTML-Syntax zu erzeugen.

                        Als Beispiel ein Gruselcode, der bei vielen Anfängerprojekten so ähnlich zu sehen ist:

                        header.php:
                        PHP-Code:
                        <!DOCTYPE html>
                        <
                        html>
                        <
                        head>
                        <
                        title>Titel</title>
                        </
                        head>
                        <
                        body
                        footer.php:
                        PHP-Code:
                        </body>
                        </
                        html
                        index.php:
                        PHP-Code:
                        <?php

                        include 'header.php';

                        ?>
                        <p>Hier der Content.</p>
                        <?php

                        include 'footer.php';

                        ?>
                        Sowohl header.php als auch footer.php enthalten kaputten HTML-Code, weil entweder öffnende oder schließende Tags fehlen. Erst wenn man beide hintereinander verwendet, ergibt es eine gültige Syntax. Bei so Kleinkram mag das noch nachvollziehbar sein, wenn man aber mal hunderte oder tausende Templates hat, die auf magische Weise miteinander verbunden sich, schleichen sich bald Fehler ein und man erzeugt (womöglich vorerst unbemerkt) Code-Müll.

                        Eine Template-Engine, die auf eine gültige HTML-Syntax beharrt, wirft beim Kompilieren bzw. spätestens beim ersten mal Ausführen sofort eine deutliche Fehlermeldung.

                        Es ist auch von Vorteil, wenn man Templates mittels DOM-Manipulation, XPath, usw. ver- oder bearbeiten kann. Wenn man z.B. eine Extension schreiben kann, die bei einem bestehenden Element ein Attribut hinzufügt ohne dass man dafür irgendwelche Handstände oder 50 Umwege machen muss.

                        Kommentar


                        • #13
                          Zitat von Alpha Beitrag anzeigen
                          Was ist an den Satz unverständlich? Ich zitier mich mal selber -> "DOM direkt zu manipulieren statt z.b. HTML-Templates"
                          Ich hab doch gerade gemeint, das ich lieber DOM einsetzen möchte statt ... ach egal.
                          Alles klar, bin raus.
                          [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                          Kommentar


                          • #14
                            Viele Template-Engines verwenden eine eigene Syntax. Ich bin auch kein Fan davon, weil man dann HTML-Syntax mit fremder Syntax in einer Datei hat. Auch bei PHP-Templates wird PHP-Code mit HTML-Code vermischt. IMHO ist es sauberer, wenn man sich auf HTML oder XML beschränkt und sonst nichts darunterrührt. Das macht vieles einfacher und logischer. Auch hat man so nicht die Gefahr ungültige (X)HTML-Syntax zu erzeugen.
                            Ah.
                            Ok, ich hatte das 'fremd' falsch gedeutet.

                            Tbh kann ich mir aber unter der DOM-Manipulation trotzdem noch nichts konkretes vorstellen. Selbst wenn die View per XSL zusammengestellt wird ist es im Endeffekt ein HTML-Gerüst in dem die Werte an den markierten Stellen eingefügt werden. Ob das per PHP, XSL, DOMObject, Twig oder SimpleXML passiert... vielleicht meckert der XSLT-Prozessor wenn da tatsächlich fehlerhaftes HTML entsteht, bin mir da nicht sicher.
                            [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                            [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                            Kommentar


                            • #15
                              Und aus diesem Grund sollten Senior Developer keine Ratschläge an Juniors geben während VPh hier von XSLT und DOM Object usw redet, redet Alpha von Objekten die die HTML Tags abbilden und die Objekt Struktur wäre dann wohl das DOM und es wird durch simples OOP Manipuliert.

                              Ich sehe da keinen Vorteil, man erstellt viele Instanzen neuer Klassen, finds schneller

                              <a href=""> zu posten statt

                              PHP-Code:
                              $link = new Link('url','caption');
                              $body->add($link); 
                              + es ist keine Dom Manipulation sondern eine andere Art und Weise wie man ein Template generiert Schaut man sich die Cached Files von Template Engines, machen die das letzendlich, generieren aus den Templates PHP Objekte damit diese Manipuliert werden können durch Lambdas etc.


                              Das ist wie neulich bei mir im Blender forum "Du musst die Animation Baken" .. what? ich bin doch kein Konditor
                              apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                              Kommentar

                              Lädt...
                              X