Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankstruktur für kleines flexibles CMS

Einklappen

Neue Werbung 2019

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

  • Datenbankstruktur für kleines flexibles CMS

    Hallo,

    ich habe häufig Projekte welche ein backend benötigen, jedoch so flexibel sein müssen, dass ich kaum ein fertiges CMS verwenden kann. So habe ich mich beim letzten größeren Projekt ran gemacht und eine eigene nette Datenstruktur entwickelt.

    Das System ist dafür ausgelegt XML / JSON Dateien aus zu geben und so Flash oder Javascript zu speisen.

    im Grunde ist alles Seitenbasierend, jede Seite hat eine Konfiguration* einen Titel u.s.w..
    Seiten sind hierarchisch anderen Seiten über oder untergeordnet.
    Auf jeder Seite können beliebig viele Elemente platziert werden, Elemente können einer Gruppe zugeordnet werden, sie können einen Namen beinhalten und eine Konfiguration*. Jedes Element bekommt eine Virtuelle ID, diese ID ist unabhängig von der Sprache.
    d.h. ich kann mit Element 500 in Deutsch, Englisch, ... ausgeben lassen. Jedes Element hat zudem ein Fallback Element in der Standardsprache. Unterseiten können als Container definiert werden, diese Seiten tauschen nicht im Menu auf und die Vaterseite hat automatisch auch Zugriff auf den Inhalt dieser Seite. Dies hat den Vorteil, dass unnötiges laden vermieden wird, zudem wird erleichtert Seiten zu unterteilen.

    *Konfiguration = JSON String welche von den Frontend-Entwicklern gepflegt werden können

    Im Hintergrund werden zum CRUD von Seiten, Elementen, ... nur Prozeduren verwendet.

    Dieses System habe ich derzeit erfolgreich im Produktionseinsatz, nun möchte ich das Fallback optimieren und flexibler gestalten.

    Problem 1:
    - neben Sprachversionen kann es auch Länderversionen geben, unterschiedliche Events, Verfügbarkeiten von Produkten, u.s.w. . Ich überlege derzeit welches verfahren hier am praktikabelsten ist.

    Idee:

    1. eine Version der Location an zu legen und diese von der Sprachversion erben lassen.

    Problemlematik:
    Ich müsste irgendwie gewährleisten können, dass man die Vererbungskette irgendwie unterbrechen könnte um evtl. geerbten Kontent nicht an zu zeigen. Das ist in sich zwar inkonsequent wird in der Praxis jedoch immer wieder gefordert.

    ------------------

    Problem 2:
    - es könnte Fälle geben in denen Problem1 so nicht zutrifft sondern eine Location in mehreren Sprachen angeboten werden soll, hier müssten in diesem Fall Daten doppelt gepflegt werden.

    Idee:
    Man könnte die Verwerbungskette umdrehen, so könnte erst vom Kontent und dann von der Sprache geerbt werden.



    Habt ihr ähnliche Überlegungen?

    Kennt ihr "Datenbank Frameworks" (Sammlung von Prozeduren und Tabellen) die dies Effektiv lösen?


  • #2
    Ehrlich gesagt, bin ich ab "Problem 1:" ausgestiegen und weiß nicht, was die Ausführungen sagen sollen. Ich weiß gar nicht, auf welcher Ebene Du beschreibst. Oben steht Datenbank, unten was von Vererbung..
    --

    „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
      die Grundproblematik ist ganz einfach:

      Kunde möchte ein Sprachfallback (Englisch) für die Deutsche Seite,
      Nun kommen die Engländer jedoch auf die Idee in der Englischen Version was haben zu wollen, was es in der Deutschen Version nicht geben soll.

      Demnach hat dieser kleine Kundenwunsch das Prinzip des kompletten Sprachfallbacks gebrochen.

      gibt es einen sauberen Weg diese "Ausnahmen" zu implementieren?, wie geht ihr damit um?

      Kommentar


      • #4
        Das Problem besteht doch andersherum, oder? Wenn die Deutsche Seite was hat, was das Fallback nicht hat. Wie auch immer sollte das sinnvollerweise eine Fehlerseite erzeugen.

        Ich habe das jüngst ganz trivial gelöst: Umschalten der Sprache wechselt auf die Startseite der Website. Anders ist das IMHO nicht möglich, wenn sich die Websitestrukturen für die Sprachen unterscheiden.
        --

        „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
          dann kann man ja nicht mehr von einem Fallback reden sondern nur von unterschiedlichen seiten:

          "Ein Sprach-Fallback ist dafür da, dass die Seite in ihrer vollständigen Form angezeigt wird und dabei best möglichst übersetzt ist. "

          ?

          Kommentar


          • #6
            Sowas erreichst du IMHO durch Abstraktion einer Seite in eigentliche Seite und deren Inhalte. Der Inhalt ist zur Seite und zu einer Sprache in Beziehung. Dadurch kannst du beliebige Fallback-Szenarien schaffen und bleibst dabei flexibel.
            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


            • #7
              dann kann man ja nicht mehr von einem Fallback reden sondern nur von unterschiedlichen seiten:
              naja, aber Du redest doch selbst davon:
              - neben Sprachversionen kann es auch Länderversionen geben, unterschiedliche Events, Verfügbarkeiten von Produkten, u.s.w. . Ich überlege derzeit welches verfahren hier am praktikabelsten ist.
              --

              „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


              • #8
                @nikosch,
                das ist ja das Problem, die Anforderungen decken sich nicht mit meiner "lösung"

                @dr.e.
                das hört sich sehr interessant an, ich würde ich freuen wenn du etwas weiter ausholen könntest

                Kommentar


                • #9
                  Hallo notyyy,

                  da gibt es nicht mehr viel dazu zu sagen. Du baust folgende Beziehung zu den genannten Objekten auf:

                  Page <-> PageContent <-> Language

                  Anschließend kannst du eine Seite per URL (id oder auch einen anderen URL-Identifier) adressieren, entscheiden, welche Sprache ausgewählt ist (beispielsweise auch über die URL, die Session, ...) und dann den zugehörigen Inhalt laden. Sofern der nicht vorhanden ist, einfach den nächstbesten oder wahlweise auch einfach einen englischen, ... That's it.

                  Nachtrag:
                  Bei Inhalten (z.B. Artikel, News, ...) kannst du genauso vorgehen. Dann ist das Umschalten einer Sprache oder auch ein Fallback für Inhalte ein Kinderspiel.
                  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
                    Zitat von dr.e. Beitrag anzeigen
                    Hallo notyyy,

                    da gibt es nicht mehr viel dazu zu sagen. Du baust folgende Beziehung zu den genannten Objekten auf:

                    Page <-> PageContent <-> Language
                    Ich hoffe ich trete dir jetzt nicht vors Schienbein oder so, aber wäre es nicht sorum richtiger?

                    Page <-> Language <-> PageContent

                    Die angeforderte Page wird geladen (wie auch immer) dann wird ausgelesen in welcher Sprache der Pagecontent geladen bzw. angezeigt werden soll und erst dann wird der PageContent ausgegeben?

                    Korrigier mich bitte wenn ich da falsch liege, aber das würde mir so von der Logik allein her richtiger erscheinen, weil die Reihenfolge aus deinem Post sagt ja lade angeforderte Page, gib Page Content aus und lade dann die Sprache.

                    Oder habe ich mich nur von der linearen Darstellung irre führen lassen?
                    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.
                    http://www.lit-web.de

                    Kommentar


                    • #11
                      Die Pfeile sollen Beziehungen darstellen und haben nichts mit einer Reihenfolge bei der Verarbeitung o.ä. zu tun.

                      Du baust folgende Beziehung zu den genannten Objekten auf:[...]
                      http://hallophp.de

                      Kommentar


                      • #12
                        Zitat von Asipak Beitrag anzeigen
                        Die Pfeile sollen Beziehungen darstellen und haben nichts mit einer Reihenfolge bei der Verarbeitung o.ä. zu tun.
                        Verdammt dann habe ich mich wohl doch durch die lineare Darstellung irre führen lassen.
                        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.
                        http://www.lit-web.de

                        Kommentar


                        • #13
                          Die korrekte Domänen-Struktur wäre folgende:

                          Page <|--- composition --- PageContent <>--- association --- Language

                          Grund:
                          Ein PageContent kann ohne eine Page nicht "leben", Language ohne PageContent hingegen schon. Anders begründet ist die Zugehörigkeit von PageContent zu Page deutlich stärker als zu Language.
                          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

                          Lädt...
                          X