WebRex CMS

Dieser Bereich dient dazu, eure Tricks und Erweiterungen vorzustellen, damit diese auch andere Anwender nutzen können. // This area can be used to publish your tricks and extensions to the APF to be used by other developers.
Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: WebRex CMS

Beitrag von dr.e. » 22.01.2012, 17:31:18

Hi Nico,

grundsätzlich sehe ich hierbei keine Probleme. Mich irritiert nur etwas der Ansatz, dass zwei Gästebücher zur selben Zeit auf einer Seite landen. Grundsätzlich kann man das schon tun, jedoch erhöht es die Komplexität in jedem Modul, da es einen eindeutigen Schlüssel mitführen muss um die Requests zu unterscheiden.

Was das Gästebuch selbst angeht, wo würde ich bei deinem CMS darauf setzen, dass die Module grundsätzlich Mandantenfähig sind und darum nur einer Installation bedürfen (DB-Setup, Config). Anschließend kannst du ein Modul "instanziieren" (=in eine Seite einbinden) und damit erhält die Instanz automatisch ihre Eindeutigkeit und über vielleicht einen Wizzard auch eine spezielle Konfiguration.

Was die Konfiguration angeht, kannst du ini- oder xml-Provider nutzen. Beide erlauben eine tiefere Schachtelung, die IMHO ausreichend ist.
Viele Grüße,
Christian

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: WebRex CMS

Beitrag von TipTop » 22.01.2012, 19:23:17

dr.e. hat geschrieben:Mich irritiert nur etwas der Ansatz, dass zwei Gästebücher zur selben Zeit auf einer Seite landen
Ja, stimmt, war n blödes Beispiel :oops:

Ein Modul-Paket kann in einer moduleDatas.xml Datei bestimmen, ob es auf einer Seite mehrmals verwendet werden darf oder nicht. Ein Gästebuch, Shop oder Forum-Modul wäre auf einer Seite auch nur einmal zugelassen. Module wie z.B. das standardmäßig mitgelieferte Content-, Galerie oder Menu-Modul kann auf einer Seite mehrmals verwendet werden.
Ich dachte daran diese moduleDatas.xml-Option als Single- bzw. Multiton zu bezeichnen. Oder sind diese Begriffe eher ungünstig gewählt? Ein Singleton könnte demnach auf einer Seite nur einmal vorkommen.



dr.e. hat geschrieben: Was das Gästebuch selbst angeht, wo würde ich bei deinem CMS darauf setzen, dass die Module grundsätzlich Mandantenfähig sind und darum nur einer Installation bedürfen (DB-Setup, Config). Anschließend kannst du ein Modul "instanziieren" (=in eine Seite einbinden) und damit erhält die Instanz automatisch ihre Eindeutigkeit und über vielleicht einen Wizzard auch eine spezielle Konfiguration.
Hm, bin mir nicht sicher ob ich dich richtig verstanden habe:

- Modul_A installieren
- Modul_A auf Seite_A, Seite_B, Seite_C, ... einbinden

Beim Einbinden eines Modules in eine Seite wird in die Tabelle webrex_page_content_item folgendes eingetragen:

Item-ID => eindeutige ID für das Item
Page-ID => Die ID der Seite, auf welcher das Item angezeigt werden soll
TemplateContainerID => Die ID des Template-Containers, in welchem das Item untergebracht werden soll
Module-ID => Die ID des Modules, nach welchem das Item/die Instanz aufgebaut sein soll - also "Module_A"

Meintest Du das?

Grüße
Nico

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: WebRex CMS

Beitrag von dr.e. » 22.01.2012, 22:10:18

Hi Nico,
Ein Modul-Paket kann in einer moduleDatas.xml Datei bestimmen, ob es auf einer Seite mehrmals verwendet werden darf oder nicht. Ein Gästebuch, Shop oder Forum-Modul wäre auf einer Seite auch nur einmal zugelassen. Module wie z.B. das standardmäßig mitgelieferte Content-, Galerie oder Menu-Modul kann auf einer Seite mehrmals verwendet werden.
OK, dann verstehe ich das.
Ich dachte daran diese moduleDatas.xml-Option als Single- bzw. Multiton zu bezeichnen. Oder sind diese Begriffe eher ungünstig gewählt? Ein Singleton könnte demnach auf einer Seite nur einmal vorkommen.
Ich würde es spontag

Code: Alles auswählen

<multiple-usage>true|false</multiple-usage>
nennen.
- Modul_A installieren
- Modul_A auf Seite_A, Seite_B, Seite_C, ... einbinden
Korrekt, du trennst Installation (vermutlich nur durch eine Admin-Rolle machbar) und Verwendung (vielleicht auch nur durch eine bestimmte Rolle zu erledigen.
Meintest Du das?
So kannst du das natürlich abbilden, ich dachte jedoch eher aus Objekt-Sicht. Dort würde ich ähnlich vorgehen, nur mit mehr Objekten und Beziehungen im Datenmodell des CMS. Beispiel:

Code: Alles auswählen

  Page
   ^ (1...n)
   |
Container  (1...n) <--- Content (z.B. Teaser)
   ^ (1...1)
   |
Module (z.B. Guestbook)
Du kannst damit auf einer Seite mit einer konkreten ID mehrere Bereiche (Container) haben, in die der Redakteur einfache Inhalte wie z.B. Teaser einbauen kann, jedoch ebenso verschiedene funktionale Module (z.B. dein Gästebuch). Dein Gästebuch wird damit durch eine konkrete Instanz eines Moduls repräsentiert und beim Aufbau der Seite generierst du per Tag oder Controller die Ausgabe des konkreten Gästebuchs.

Damit sieht die Datenhaltung etwas anders aus, erfüllt aber den gleichen Zweck. Grundsätzlich ist deine Vorgehensweise jedoch ebenfalls gangbar.
Viele Grüße,
Christian

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: WebRex CMS

Beitrag von TipTop » 01.02.2012, 13:15:34

Nun bin ich endlich mal dazugekommen, mich ein wenig mit dem GORM zu beschäftigen. Habe mir den Aufbau der Datenbank-Tabellen für das CMS überlegt und dabei ist folgendes rausgekommen:

Entitäten:
ent_page
ent_content
ent_module
ent_layout
ent_template
ent_container

Kompositionen:
cmp_page2content
cmp_layout2template
cmp_template2container

Assoziationen:
ass_layout2page
ass_template2page
ass_module2content



Ich bin mir nicht sicher ob ich bei Kompositionen und Assoziationen etwas vergessen habe. Daher noch eine kurze Erklärung.
Templates können nur in Layouts enthalten sein - eine Template-Entität kann also nicht ohne Layout existieren, daher cmp_layout2template. Containers können nur in Templates enthalten sein, daher cmp_template2container.
Wenn ich eine Seite "Home" erstelle, ein Layout und ein Template für diese Seite auswähle und anschließend in einen Template-Container das Modul "Gästebuch" einfüge, dann wird eine neue Entität in ent_content angelegt. Eine Entität content kann also nicht ohne einer Seite existieren, daher cmp_page2content. Eine Entität content ist also zB das Gästebuch-Modul - demnach muss die Entität content definieren, nach welcher Entität module es aufgebaut ist - daher ass_module2content.
Eine Seite kann ein Layout und ein darin enthaltenes Template für sich auswählen. Daher die Assoziationen ass_layout2page und ass_template2page.

Habe ich was vergessen oder eventuell was falsch benannt?

Grüße Nico

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: WebRex CMS

Beitrag von Megger » 01.02.2012, 13:28:23

Sieht auf den ersten flüchtigen Blick ganz gut aus
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: WebRex CMS

Beitrag von dr.e. » 01.02.2012, 21:34:33

Auch von mir gibt's einen Daumen hoch! :)
Viele Grüße,
Christian

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: WebRex CMS

Beitrag von TipTop » 08.02.2012, 20:06:04

Danke für's kontrollieren :)

Bin mir aber mit ass_module2content nicht ganz sicher. Eine Entität in ent_content benötigt eine Seite, auf der sie eingebunden ist - daher cmp_page2content. Eine Content-Entität ist stets nach einem Modul aufgebaut - demnach müsste ass_module2content eigentlich eine Komposition, also cmp_module2content sein, da ja eine Content-Entität nicht ohne Module existieren kann, oder?

Grüße

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: WebRex CMS

Beitrag von Megger » 09.02.2012, 11:11:16

Kann ein Modul mit mehreren Content-Entitäten in Beziehung stehen? Kann eine Content-Entität mit mehreren Modulen in Beziehung stehen?
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: WebRex CMS

Beitrag von TipTop » 09.02.2012, 13:33:02

Megger hat geschrieben:Kann ein Modul mit mehreren Content-Entitäten in Beziehung stehen?
Binde ich auf einer Seite 10 Mal das Content-Modul ein, werden in ent_content 10 Entitäten eingetragen, welche nach dem Content-Module aufgebaut sind. Also Ja!?
Megger hat geschrieben:Kann eine Content-Entität mit mehreren Modulen in Beziehung stehen?
Nein. Eine Content-Entität kann immer nur nach einem Modul aufgebaut sein.

Also passt Assoziation doch?

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: WebRex CMS

Beitrag von Megger » 09.02.2012, 14:20:38

Die erste Frage meinte ich eher so:

Modul => 1
Content => 1
Content => 2

modul2content
1 1
1 2

D.h. das Modul kann in mehreren Content Entitäten eingesetzt werden, es besteht eine 1:n Beziehung! Aber egal :D
Nein. Eine Content-Entität kann immer nur nach einem Modul aufgebaut sein.
Das spricht eher für cmp => Wenn die Modul Entität gelöscht wird, dann wird auch die Content Entität gelöscht, da diese ja nicht ohne Modul existieren kann!
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: WebRex CMS

Beitrag von TipTop » 09.02.2012, 15:15:00

Megger hat geschrieben:Das spricht eher für cmp => Wenn die Modul Entität gelöscht wird, dann wird auch die Content Entität gelöscht, da diese ja nicht ohne Modul existieren kann!
Bzw. ist es mittels der GORM Funktionalität auch möglich, nur dann ein Module zu löschen, wenn es keine Content-Entitäten gibt, die dieses Modul verwenden?




Eine Seite wählt für sich ein Layout und dazugehöriges Template aus. Die Seite füllt dann das Templatr mit Content-Entitäten. Verwendet die SeiteA das LayoutB und das dazugehörige TemplateC und wird LayoutB gelöscht (und somit auch TemplateC), dann versucht die Seite Ihre Content-Entitäten in ein Layout (& Template) einzubinden, was gar nicht vorhanden ist. Demnach müssten ass_layout2page und ass_template2page ebenfalls Kompositionen sein!?


Edit: wann verwendet man dan überhaupt Assoziationen (beispiel)?

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: WebRex CMS

Beitrag von Megger » 09.02.2012, 16:10:04

Als Beispiel für Assoziationen:
Du hast verschiedene Module und verschiedene Content Bereiche!
Nun soll es so sein, dass du die Module administrieren kannst, diese aber nicht unbedingt angezeigt werden! Erst wenn man eine Beziehung zwischen Content und Modul herstellt, wird dieses im entsprechenden Content Bereich angezeigt!
Löscht man nun einen Content Bereich sollen die Module allerdings gespeichert bleiben, sodass man diese vielleicht in einen anderen Content Bereich legen kann!
Löscht man ein Modul, bleibt der Content Bereich erhalten, da vielleicht noch andere Module innerhalb dieses Bereiches angezeigt werden oder werden sollen!
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: WebRex CMS

Beitrag von TipTop » 10.02.2012, 19:24:06

Liege ich richtig, wenn ich mir bei der Wahl zwischen CMP und ASS foglende Frage stelle?

Ist ObjektA ohne ObjektB voll funktionstüchtig?

Die Tabelle cmp_objektA2ObjektB hat folgenden Inhalt:

Code: Alles auswählen

Source_ObjektAID | Source_ObjektBID
===================================
1                |  2
1                |  3
1                |  4
Das ObjektA mit der ID 1 kann demnach erst gelöscht werden, wenn die ObjekteB mit der ID 2, 3 und 4 gelöscht wurden bzw. die Komposition zu ObjektA aufgelöst wurden.
Aufs CMS bezogen sieht die Tabellenstruktur nun so aus:

Entitäten:
ent_page
ent_content
ent_module
ent_layout
ent_template
ent_container

Kompositionen:
cmp_layout2page
cmp_template2page
cmp_layout2template
cmp_template2container
cmp_module2content

Assoziationen:
ass_page2content
ass_container2content


Die beiden Assoziationen könnten aber auch Kompositionen sein, da ich mich aber an der Frage -Ist ObjektA ohne ObjektB voll funktionstüchtig? - orientiert habe, ist nun doch eine Ass. draus geworden, da eine Content-Entität zum Funktionieren lediglich das Modul benötigt (und dafür gibts ja cmp_module2content).

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: WebRex CMS

Beitrag von Megger » 10.02.2012, 19:55:05

Was ich daraus lese:
Layout löschen -> Page wird mitgelöscht (da abhängig voneinander)
Template löschen -> Page wird mitgelöscht
Layout löschen -> Template wird mitgelöscht
Template löschen -> Container wird mitgelöscht
Module löschen -> Content wird mitgelöscht

Die Beziehungen zwischen Layout -> Page, Template -> Page und Layout -> Template sind komisch! ...Später mehr...
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: WebRex CMS

Beitrag von TipTop » 11.02.2012, 15:14:14

Das selbe lese ich aus daraus^^ Bzw. wenn man sich an diesen Artikel haltet, dann gilt:
Da Kompositionen im Gegensatz zu Assoziationen starke Bindungen sind, können Objekte, die weitere Objekte komponieren, nicht gelöscht werden, da sonst den komponierten Objekten die Existenzberechtigung entzogen werden würde. Dieser Fall wird vom Mapper deshalb mit einer entsprechenden Meldung quittiert.
Layout kann nicht gelöscht werden, da ein Seite dieses Layout verwendet.
Modul kann nicht gelöscht werden, (da eine Content-Entität dieses Modul verwendet) da das Modul auf einer oder mehreren Seiten verwendet wird.


Container existieren in Templates, Templates existieren in Layouts. Über das CMS-Backend lässt sich das gesamte Layout löschen, nicht aber einzelne Templates oder Template-Container des Layouts. Demnach:
Layout löschen -> Templates werden gelöscht -> Container der Templates werden gelöscht.

Die Beziehungen zwischen Layout -> Page, Template -> Page und Layout -> Template sind komisch! ...Später mehr...
Inwiefern? Wie würdest Du die Relationen definieren?

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast