MB: HTML Meta Attribute von Seite bereit gestellt in SPA

Moin Community,

Bei Seiten Navigation z.B. home->index sollte ja sowas im Titel Auftauchen und Keywords bereit stellen. Bei einer SPA wäre das aber schwirig weil man ja nur z.B. <main> austauscht und da kommt man nicht an die <meta>- und <title>-Daten heran die im <head> sind.

Wie löst man das in einer MVC Architektur? Ich dachte an Session übergabe oder als Parameter.

vlg MB

  1. Hello,

    kann denn in deiner "MVC-Architekur" nicht jedes Modul zu jeder Zeit etwas zu jedem anderen Modul beitragen?

    Das ganze Modell ist doch eher räumlich vernetzt zu betrachten, oder? Und zwischendurch können sich einzelne Zellen bereits ablösen (deren Threads sind dann beendet) und an den Client gesendet werden, oder aber man sammelt alles in einer generellen Ausgabezelle.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es
    Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
    1. Hi TS

      kann denn in deiner "MVC-Architekur" nicht jedes Modul zu jeder Zeit etwas zu jedem anderen Modul beitragen?

      Sorry ich hab keinen Ahnung was du mir sagen willst?

      Welche Module? Klassen, Model, View, Controller, gleich das ganze MVC oder das gesamte SPA?

      Damit wir über selbiges sprechen: Modul. Konsens?

      Und zwischendurch können sich einzelne Zellen bereits ablösen (deren Threads sind dann beendet) und an den Client gesendet werden, oder aber man sammelt alles in einer generellen Ausgabezelle.

      Was sind Zellen? Ich kenne Zelle nur in DB aber nicht in der Programmierung. Aber ich kenne Felder bei assoziativen Arrays. Threads sind doch in Java usw. nicht in PHP oder irre ich mich?

      Bitte Klär mich auf.

      vlg MB

      1. Hello,

        kann denn in deiner "MVC-Architekur" nicht jedes Modul zu jeder Zeit etwas zu jedem anderen Modul beitragen?

        Sorry ich hab keinen Ahnung was du mir sagen willst?

        Dass Du sehr genau gucken musst, wo sich "M", "V" und "C" befinden.
        Wenn Du eine normale Client-Server-Architektur aufbaust, dann befinden sich M+C auf dem Server und der größte Teil von V auf einem (Thin-)Client.

        Allerdings musst Du "V" weiter zerlegen. Die Aufbereitungsschicht dafür befindet sich nämlich weiterhin auf dem Server. Nur die Darstellung und die Entgegennahme von Rückmeldunge befinden sich auf dem Client.

        Wenn Du jetzt eine SPA aufbaust, muss "V" selber ein (M)VC-Modell erhalten. Davon befinden sich dann V*+C* für auf dem Client und ggf, auch ein eigenes M*. Der Teil von V auf dem Server muss teilweise erstezt werden bzw. stillgelegt.

        MVC ist also kein geeignetes Beschreibungsmodell für Server-Client.SP-Allikationen.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es
        Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
        1. Tach!

          Dass Du sehr genau gucken musst, wo sich "M", "V" und "C" befinden.
          Wenn Du eine normale Client-Server-Architektur aufbaust, dann befinden sich M+C auf dem Server und der größte Teil von V auf einem (Thin-)Client.

          Könnte man so sehen, wird aber üblicherweise nicht so gesehen. Die View ist die Ausgabe. Ob die dann anschließend noch anderswohin transportiert werden muss, ist nicht mehr Bestandteil des MVC-Musters. MVC beschreibt nicht das Gesamtsystem sondern ein Programmiermuster. (So wie Singleton beispielsweise nur von einem kleinen Teil beschreibt, wie dieser aufgebaut ist.) Dazu kommen noch andere Komponenten, um das System letztlich komlett zu bekommen, und nicht alle folgen einem Muster. MVC ist nur das Haupt-Muster, was in den so genannten MVC-Frameworks verwendet wird. (Andere wiederum behaupten, dass das was landläufig als MVC-Frameworks bekannt ist, gar nicht der eigentlichen Definition von MVC entspricht, aber das lass ich mal außen vor.)

          Wenn Du jetzt eine SPA aufbaust, muss "V" selber ein (M)VC-Modell erhalten. Davon befinden sich dann V*+C* für auf dem Client und ggf, auch ein eigenes M*. Der Teil von V auf dem Server muss teilweise erstezt werden bzw. stillgelegt.

          Eine SPA wird üblicherweise nicht nach MVC, sondern eher nach MVVM aufgebaut. Model-View-ViewModel. Model sind die eigentlichen Daten der Geschäftslogik. Die View ist das, was der Anwender sieht. Dafür werden oftmals weitere Daten benötigt, wie beispielsweise Labels der Eingabefelder. Aber auch Verhalten, weil auf Events reagiert werden sollen. Das ViewModel sind all die Daten, die die View benötigt, zuzüglich dessen, was man für die unmittelbare View-Steuerung benötigt. Also zum Beispiel der Code, der als Eventhandler dafür sorgt, dass nach 59 die 0 kommt und das Stunden-Feld eins hochgezählt wird.

          MVVM in der SPA beim Client arbeitet auch hervorragend mit MVC auf der Serverseite zusammen. Als View wird dann halt nur das Model nach zum Beispiel JSON gewandelt.

          MVC ist also kein geeignetes Beschreibungsmodell für Server-Client.SP-Allikationen.

          Nicht nur das, in MVC ist gar nichts von Client-Server-Architektur enthalten. Das ist eine andere Baustelle.

          dedlfix.

        2. moin TS,

          Danke Dir für den Tipp. werde es beherzigen

          vlg MB

  2. Tach!

    Bei Seiten Navigation z.B. home->index sollte ja sowas im Titel Auftauchen und Keywords bereit stellen. Bei einer SPA wäre das aber schwirig weil man ja nur z.B. <main> austauscht und da kommt man nicht an die <meta>- und <title>-Daten heran die im <head> sind.

    Man kann meistens noch an der SPA vorbei und auf herkömmliche Javascript-Weise das title-Element ansprechen. Ist aber nicht besonders schick. Wenn das SPA-Framework gut ist, bietet es aber einen Service an, über den man die Änderung in Auftrag geben kann.

    Wie löst man das in einer MVC Architektur?

    Das kommt darauf an, was es da für Möglichkeiten gibt, die Ausgabe zu beeinflussen. Bei ASP.NET MVC kann für die Views eine Layout-Datei wählen, in der der Seitenrahmen enthalten ist. Die in der Layout-Datei eingebetteten Variablen kommen aus dem Scope vom Controller. Der kann damit die Werte für den Title oder andere Elemente beeinflussen.

    dedlfix.

  3. Wie löst man das in einer MVC Architektur?

    Am MVC bleibt alles wie gehabt. Für den SPA Modus werden nur alle a-Tags umgeschossen so dass per Klickevent ein Ajax.Request auf href rausgeht.

    Die Response liefert dann anstatt einer kompletten HTML Seite die Einzelteile (body, title... ) in einem abstrakten Datentyp.

    Gucks Dir an

    1. Moin pl,

      Wie löst man das in einer MVC Architektur?

      Am MVC bleibt alles wie gehabt. Für den SPA Modus werden nur alle a-Tags umgeschossen so dass per Klickevent ein Ajax.Request auf href rausgeht.

      kein JavaScript! ich habs vor strikt zu trennen. Die Website MUSS noch laufe wenn js deaktiviert ist.

      Die Response liefert dann anstatt einer kompletten HTML Seite die Einzelteile (body, title... ) in einem abstrakten Datentyp.

      Sorry hab dich nicht verstanden. Ich erläutere Dir mein Problem fals du s nicht verstanden hast. Drück mich halt schwer aus.

      <html>
        <head>
          <mata description="keyword" content="<?php /* Home Keywords */ ?>" />
          <title><?php /* Home Titel */ ?></title>
        </head>
        <body>
          <header>
            <h1><?php /* Home Titel */ ?></h1>
          </header>
          <nav>
            <?php /* Seiten navigation */ ?>
          </nav>
          <main><?php /* Home Inhalt */ ?></main>
        </body>
      <html>
      

      Das nach laden ist Problem. wenn ich content nachladen will muss ich nach dem laden der Titel und Keywords ändern auserhalb des Contents. Ich hab mit Session oder Parametern gelöst aber mir schien es nicht das gelbe vom Ei zu sein. Deswegen fragte ich in die Runde ;-).

      vlg MB

      1. @@MB

        kein JavaScript!

        ?? Jetzt bin ich aber mal gespannt, wie du „SPA“ und „kein JavaScript“ unter einen Hut bringen willst.

        Die Website MUSS noch laufe wenn js deaktiviert ist.

        Ja, das sollte sie. Nur ist es dann keine SPA.

        LLAP 🖖

        --
        “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
        1. Hi Gunnar,

          ich dachte das wäre n algemeiner Begriff der Programmierung. Ich hab SPA mit GUI Programmen was wahlweise Elemente nach läd in verbindung gebracht. Dann Sorry pl. Danke Gunnar

          vlg MB

          1. @@MB

            Ich hab SPA mit GUI Programmen was wahlweise Elemente nach läd in verbindung gebracht.

            Und wie sollten nachgeladene Elemente im GUI erscheinen, wenn nicht per JavaScript?

            ICYMI: SPA – single page application

            LLAP 🖖

            --
            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
            1. vielleicht mit php wenn man irgenwo drauf klickt

              vlg MB

              1. @@MB

                vielleicht mit php wenn man irgenwo drauf klickt

                Du weißt, dass PHP serverseitig läuft und du damit eine ganze Seite oder auch Teile vom Server zum Client ausliefern kannst, aber nichts clientseitg auf einer bestehenden Seite ändern kannst?

                LLAP 🖖

                --
                “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                1. ist mir bewusst. ich arbeite ja daran. Was willst du mir sagen?

                  vlg MB

      2. Die Website MUSS noch laufe wenn js deaktiviert ist.

        Das tut sie auch. Weil es gar keine KlickEvents gibt und kein Ajax, und so geht der Browser direkt auf die Ressource los, die in href notiert ist wenn auf das a-Element geklickt wird.

        MfG 😉

    2. Hallo pl,

      bei langsamen Internetverbindungen kommen die angeforderten Inhalte erst mit einer ziemlich großen Verzögerung an, die Adresszeile zeigt hingegen schon die neue Seite an. Es gibt keinen Hinweis darauf, dass die Inhalte gerade geladen werden.

      Ich kann den Sinn von SPA bei überwiegenden Inhaltsseiten nicht erkennen. Warum sollte man sich die Mühe machen, Bedien- und Anzeigelememte (Ladeanzeige) des Browsers nachzubauen, wenn die des Browsers problemlos funktionieren?

      Gruß
      Julius