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.
TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: WebRex CMS

Beitrag von TipTop » 04.01.2012, 20:19:39

Megger hat geschrieben:Ich lagere auch gerne aus, aber durch die htmlheader extension wird nachher trotzdem nur 1 File ausgeliefert. Ich finde mehrere Files einfach übersichtlicher
Gut, das ist ein Argument :) Aber die htmlheader-Extension kann in der main.html eines Layouts auch ganz problems verwendet werden, um damit weitere Datein (hochgeladen über Filemanager) einzubinden.

Aber das ist halt ne Geschmackssache. Die im Tutorial gezeigte CSS-Datei wird bei einem "richtigen" Layout nicht viel größer werden - da kommen dann zwar noch ein paar Eigenschaften für headlines, Listen und Paragraphe hinzu. Aber in Summe wird die CSS-Datei durchschnittlich 100 Zeilen lang sein, da sämtlichen Inhalte (=Module) Ihre eigene CSS-Datei mitliefern (können). Und diese 100 Zeilen sollten doch zum überblicken sein ;)

In größeren Firmen wird da aber meistens nicht einfach so geupdatet, da oft auch noch andere Programme damit zusammenhängen und diese erstmal angepasst werden müssen!
Stimmt - aber der Prozentsatz solcher "Fälle" ist mittlerweile so gering, dass man sich da nicht wirklich Sorgen drum machen muss. Zudem ist es auch mit einer einzigen CSS-Datei möglich, das Ergebnis am Viewport von IE7 bis IE9 zu vereinheitlichen - auch ohne Hacks.



Achja, ne Frage hätte ich zur htmlheader-Extension - überprüft die auch, ob Datein mehrmals angegeben worden sind und filtert sie die Überflüssigen dann aus?

Grüße

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

Re: WebRex CMS

Beitrag von dr.e. » 04.01.2012, 21:56:51

Hallo Nico,

ich finde das Tutorial ebenfalls gelungen. Hinsichtlich der CSS-Dateien würde ich beides anbieten. Dies kannst du einfach dadurch realisieren, dass du statt einer *.css-Datei einfach einen Ordner (siehe Konvention für Templates) anlegst und diesen beliebieg befüllen lässt. Ich bin zudem ein Freund von KISS, insofern könntest du ja in deinem Tutorial auf dem 1-Datei-Konzept abstellen und in ein "Hacking the Core of WebRex"-Kapitel die Mehr-Dateien-Variante beschrieben.

So verwirrst du Einsteiger nicht - das ist ja auch nicht zu unterschätzen - und lässt Profis jedoch ebenfalls nicht hängen.
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: WebRex CMS

Beitrag von Screeze » 04.01.2012, 23:00:45

Was passiert wenn mein Layout diverse JS-Komponenten verwendet? Muss ich diese dann manuell in der main.html einbinden?

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

Re: WebRex CMS

Beitrag von dr.e. » 05.01.2012, 00:06:19

Hier würde ich erwarten, dass das Layout-Management ein Package baut und inkludiert - z.B. mit der htmlheader-Extension.
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 » 05.01.2012, 01:16:57

dr.e. hat geschrieben:ich finde das Tutorial ebenfalls gelungen.
Danke :)
Screeze hat geschrieben:Was passiert wenn mein Layout diverse JS-Komponenten verwendet?
Ich bin mir nicht sicher, ob wir unter JS-Komponenten das selbe verstehen, aber hier ein Beispiel:
Nehmen wir Slides her - ich könnte die JS-Datei von Slides downloaden und einfach die nötigen JS-Anweisungen in den head der main.html schreiben. Anschließend noch irgend ein Layout-Template mit Bildern füllen und schon rennt die Slideshow - wäre aber der falsche Weg. Richtig wäre es, ein Galerie-Modul im CMS zu installieren und dieses bei der gewünschten Seite in einen Container einzubinden.
Ein Modul-Package muss im Wurzelverzeichnis einen Ordner namens "css" und einen namens "js" beinhalten. In diesen beiden Ordnern werden die CSS- und JS-Datein abgelegt, welche das Modul benötigt, damit es im Frontend richtig funktioniert/dargestellt wird. Bei dem Beispiel mit der Galerie hätte das Galerie-Modul aufjedenfall eine JS-Datei im Ordner js, welche z.B. ein JQuery-Plugin beinhaltet, mit welchem sich die Slideshow realisieren lässt.

Der head-Bereich der main.html wird unter anderem also auch mit Modul-Datein (.js & .css) gefüllt - der Layoutersteller muss sich demnach nicht darum kümmern, dass die Datei XYZ.js für das Modul XYZ vorhanden ist. Ein Modul-Domain-Object definiert in zwei Attributen die CSS-Files und die JS-Files. Der Page-Manager prüft nun, welches Modul welche CSS- und JS-Files benötigt - benötigen Module eventuell die gleichen Datein (kann vorkommen - vorallem dann, wenn ein Modul mehrmals in einer Seite verwendet wird), dann werden die überflüssigen Datei-Anforderungen entfernt, damit keine Redundanz entsteht. Am Ende bildet der Page-Manager mittels htmlheader-Extension ein Packet aus den CSS und JS Datein und bindet diese im head-Element der main.html ein.

Die Inhalte sollten in WebRex lediglich von Modulen kommen, da diese - im Gegensatz zu Layouts - eine Admin-GUI mitliefern müssen, wodurch man beim editieren nicht in Berührung mit Code kommt. Inhalte sollten also Module sein und JavaScript setzt man in den meisten Fällen zum Modifizieren von Inhalten ein. Das bedeutet, dass ein Layout überhaupt nur in sehr seltenen Fällen JavaScript-Code benötigt - denn was will man denn bei einem Layout (bzw. dessen Templates) mit JS verändern? Ich mein, bis auf ein paar Div's gibts da kaum was. Die functions.js ist dazu gedacht, als Container für die äußerst seltenen JS-Funktionen zu dienen. Und für die style.css gilt das gleiche - diese soll lediglich das Layout - sprich die Div-Dontainer formatieren (floaten, clearen, Hintergrund, Größen) sowie die wenigen Elemente für die Textauszeichnung (p, hx, pre, cite, ...).

Wozu soll es also gut sein, wenn man mehrere CSS-/JS-Datein in einem Layout mitliefern kann, wenn diese erst gar nicht benötigt werden?
dr.e. hat geschrieben:Hier würde ich erwarten, dass das Layout-Management ein Package baut und inkludiert - z.B. mit der htmlheader-Extension.
Diese wird generell bei jedem Layout und somit bei jeder Seite zum Einsatz kommen, da mindestens 4 Datein bei jedem Layout im head eingebunden werden:
-> jQuery.js (Kommt von WebRex)
-> functions.js
-> reset.css (Kommt von WebRex)
-> style.css



Grüße,
Nico

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

Re: WebRex CMS

Beitrag von Megger » 05.01.2012, 11:21:15

Achja, ne Frage hätte ich zur htmlheader-Extension - überprüft die auch, ob Datein mehrmals angegeben worden sind und filtert sie die Überflüssigen dann aus?
Ja, Dateien werden nicht doppelt hinzugefügt
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
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: WebRex CMS

Beitrag von Screeze » 05.01.2012, 11:53:29

Ok.. Und was wenn ich gar kein JS für mein Layout brauche? Muss dann eine leere Datei eingebunden werden? Ich denke die sollte eher optional sein oder?

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

Re: WebRex CMS

Beitrag von TipTop » 05.01.2012, 12:05:02

Screeze hat geschrieben:Ok.. Und was wenn ich gar kein JS für mein Layout brauche? Muss dann eine leere Datei eingebunden werden? Ich denke die sollte eher optional sein oder?
Ja, stimmt, gute Idee. Werd ich gleich mal umstellen.

Edit: Habe das Tutorial nun mit Inhaltsverzeichnis ausgestattet und das Kapitel "Advanced Layouts" hinzugefügt: http://www.webrex.org/layout.html#Advanced-Layouts

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

Re: WebRex CMS

Beitrag von TipTop » 15.01.2012, 17:39:11

Ich hab den bisherigen Stand mal als ZIP verpackt und auf Sourceforge hochgeladen: https://sourceforge.net/projects/webrex-cms/files/

Hätte jemand Zeit sich die Layout-Komponente anzusehen und mir Verbesserungsvorschläge zu geben? - wäre demjenigen dafür sehr dankbar. Die Layout-Komponente die erste "fertig" entwickelte bzw. die erste funktionstüchtige Komponente. Zu finden unter: apps::webrex::backend::layouts

Grüße,
Nico

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

Re: WebRex CMS

Beitrag von dr.e. » 15.01.2012, 18:01:18

Hallo Nico,

ich habe mir deinen Code angesehen und einige (oberflächliche) Punkte gefunden:
  • layoutManager würde ich LayoutManagernennen. Selbes gilt für layoutMapper.
  • Die Layout-Verwaltung (Mapper) könntest du durch den GORM ersetzen und sparst dir dadurch die komplette layoutMapper-Klasse.
Ansonsten sieht der Code für mich zunächst vernünftig aus. Was ich in der Kürze der Zeit noch nicht ganz verstanden habe ist, wie Template und Layout zusammenspielen. Das Installieren von Layouts könnte man IMHO noch in den Manager verschieben, dann ließe sich der Code vielleicht noch vereinfachen und die Controller werden etwas kleiner.
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 » 15.01.2012, 19:39:23

Was ich in der Kürze der Zeit noch nicht ganz verstanden habe ist, wie Template und Layout zusammenspielen.
Beispiel:
Ich erstelle 3 Seiten: Home, Kontakt und Galerie. Alle sollen eine unterschiedliche Content-Aufteilung erhalten. Home benötigt 3 Container - einer geht über die gesamte Breit, die anderen beiden befinden sich unter diesem und teilen sich die Breite. Kontakt soll aus zwei, nebeneinander angeordneten Containern bestehen, wobei der erste nu 30% Breite beanspruchen darf. Galerie besteht aus drei gleich breiten Spalten.
Alle drei Seiten benötigen dadurch eine unterschiedliche HTML-Element-Struktur.

Ich komme bzgl. CMS aus dem Joomla!-Bereich - dort hätte man bei dem oben genannten Beispiel alles in eine index.php gepackt und mit if-Konstrukten das richtige Template selektiert. Die index.php wird dadurch - vorallem bei großen Websites - extrem groß und unübersichtlich. In WebRex benötigt ein Layout im Root-Verzeichnis eine main.html, welche die Dinge beinhaltet, die bei jeder Website gleich sind. Im Tutorial, welches ich geschrieben habe, ist ersichtlich, wie diese main.html aussehen sollte.

Beim erstellen/editieren einer Seite kann man nun ein Layout für diese Seite auswählen. Wähle ich "LayoutA" für die Seite Home aus, dann wird Home in die main.html des Layouts "LayoutA" eingebunden. Eine Seite muss aber neben dem Layout auch noch ein Template des selektieren Layouts auswählen.

Beinhaltet "LayoutA" im templates-Verzeichnis ein "TemplateA" und ein "TemplateB", dann kann ich zwischen diesen beiden Templates wählen. Wähle ich "LayoutA" und "TemplateB" für die Seite "Home", dann kann ich über ein GUI sämtliche Container von "TemplateB" mit Modulen füllen und deren Ausgabe auch beinflussen (je nachdem, wie die GUI eines Modules aussieht).
Vorteile:
Ich habe eine kleine main.html in welche ein Layout-Template, gefüllt mit Modulen, geladen wird. Dies ist um einiges übersichtlicher und verständlicher - denn: will ich die Struktur der Seite "Home" ändern, muss man als Webdesigner nicht durch eine einzige große Template-Datei mit PHP-Fragmenten, sondern man schaut einfach welches Layout und dazugehöriges Template von "Home" verwendet wird. Anschließend geht man unter "Layout-bearbeiten" >> "Template-bearbeiten" und landet sofort bei der HTML-Struktur, die "Home" für Ihre Module verwendet.

Naja, so ist es zumindest geplant :)



Danke für deine Tipps, werde mich gleich mal um die von dir angesprochenen Dinge kümmern.



Grüße Nico

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

Re: WebRex CMS

Beitrag von dr.e. » 15.01.2012, 22:23:35

Hi Nico,

klingt vernünftig. In der aktuellen CMS-Implementierung von payback.de haben wir auch Template und Layout getrennt. Template bedeutet das, was du Aufteilung nennst (1 Spalte, 3 Spalten, ...) und über das Layout lassen sich Standard-Inhalte in die einzelnen Bereich injizieren, die die in der Seite eingepflegten Inhalte ergänzen.

Ich bin sehr gespannt auf die Fertigstellung des CMS und werde es sicher mal ausprobieren. :)
Danke für deine Tipps, werde mich gleich mal um die von dir angesprochenen Dinge kümmern.
Freut mich, dir geholfen zu haben.
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 » 19.01.2012, 20:39:27

Ist der Manager oder der Data Mapper zum Erstellen/Bearbeiten/Löschen von Dateien verantwortlich? Für Datenbank-Aktionen kann ich ja komplett auf GORM setzten, wenn ich nun Aktionen, welche das Dateisystem betreffen, in den Manager packe, ist dann das /data Verzeichnis nich mehr oder weniger überflüssig?

Viele Grüße,
Nico

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

Re: WebRex CMS

Beitrag von dr.e. » 21.01.2012, 11:56:39

Hi Nico,
Ist der Manager oder der Data Mapper zum Erstellen/Bearbeiten/Löschen von Dateien verantwortlich?
Die Abbildung der reinen CRUD-Funktionalität ist Bestandteil des DataMapper. Wenn es sich dabei um die Verarbeitung von Dateien auf der Platte handelt kann das meiner Ansicht nach auch im Manager passieren.
Für Datenbank-Aktionen kann ich ja komplett auf GORM setzten, wenn ich nun Aktionen, welche das Dateisystem betreffen, in den Manager packe, ist dann das /data Verzeichnis nich mehr oder weniger überflüssig?
Korrekt, das kannst du dir dann sparen. Der GORM übernimmt für dich bereits alle CRUD-Funktionalitäten inkl. der Beziehungsverwaltung.
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, 16:27:51

Guten Tag zusammen!

Derzeit denke ich über den Aufbau von Seiten in Verbindung mit Modulen nach, da die beiden Komponenten am größten sind und jeglichen sichtbaren Inhalt am Browser-Viewport bilden.
Ich habe nun ein paar Fragen und um euch den Aufbau näher zu bringen, beschreibe ich diesen erstmal anhand eines Beispiels.


Angenommen eine Webagentur bastelt sich eine neue Website. Die Agentur besteht aus 4 Mitarbeitern - 2 Entwickler (Entwickler_A & Entwickler_B) und 2 Grafiker (Grafiker_A & Grafiker_B). Nun soll auf Ihrer Website jeder Mitarbeiter ein Gästebuch erhalten.
Dafür werden 2 Seiten erstellt - "Entwickler-Team" und "Grafiker-Team". Für beide Seiten wird das Layout "Layout_A" und das dazugehörige Template "Template_C" selektiert.
"Template_C" definiert 2 Container: "Header" und "Inhalt". Der "Inhalt"-Container soll nun auf beiden Seiten mit jeweils 2 Gästebuch-Modulen gefüllt werden.

Wenn man nun bspw. die "Grafiker-Team"-Seite über das Admin-GUI betrachtet, sieht das ca. so aus:
Bild

Zu sehen sind 2 Spalten - in der linken Spalte alle angelegten Seiten, wobei die "Grafiker-Team"-Seite gerade als aktiv gekennzeichnet ist. In der rechten Spalte den Inhalt der aktiven Seite (also "Grafiker-Team"). Der "Header"-Container wurde erstmal nicht gefüllt. Im "Inhalt"-Container findet man 2 Mal das Gästebuch-Modul vor, wobei jedes nach dem Namen des Mitarbeiters benannt wurde (also Grafiker_A & Grafiker_B).
Zur Admin-GUI eines Modules(-"Klons") gelangt man übrigens, wenn man auf den "Bearbeiten"-Link klickt, welcher im Screenshot in der "Aktionen"-Spalte im "Inhalt"-Container zu finden ist.



Im Hintergrund spielt sich da folgendes ab:

Erstmal muss das Gästebuch-Modul installiert werden. Das Gästebuch-Modul-Paket verfügt unter anderm über eine install.sql - sie beinhaltet beim Gästebuch-Beispiel eine CREATE-TABLE-Anweisung. Bei der Installation des Gästebuch-Moduls wird diese SQL-Datei ausgeführt. Dabei wird dann in der Datenbank folgende Tabelle angelegt:
Bild

Das Gästebuch-Module-Paket beinhaltet zudem eine config.ini, welche durch den Installationsvorgang in dem apps/config/webrex/module/guestbook/config.ini abgelegt wird. Die Konfigurationsdatei eines Modules muss immer eine Prototype-Sektion beinhalten, welche dann als Vorlage, für in Seiten eingebundene Module, verwendet wird.

Die "Seiten"-Komponente in WebRex besitzt die folgenden 2 Tabellen:
Bild
Für die "Seiten"-Komponente wird allerdings der GORM eingesetzt - sprich da wären dann noch weitere (Ass & cmp) Tabellen.

Bei dem am Anfang beschriebenen Beispiel würde die "webrex_page_content"-Tabelle über folgende Inhalte verfügen:

Code: Alles auswählen

PageContentID | DisplayName | ModuleID | TemplateContainerID |
========================================================
1             |Entwickler_A  | 1           | 1
2             |Entwickler_B  | 1           | 1
3             |Grafiker_A    | 1            | 1
4             |Grafiker_B    | 1            | 1
Die 1 in der ModuleID-Spalte repräsentiert das Gästebuch-Module. Die 1 in der TemplateContainerID-Spalte repräsentiert den "Inhalt"-Container des "Template_C"-Templates des "Layout_A"-Layouts.

Bei dem am Anfang beschriebenen Beispiel würde die config.ini des Gästebuch-Moduls folgendermaßen aussehen:

Code: Alles auswählen

[Prototyp]
EnträgeProSeite = "50";
Captcha         = "Ja";

[Entwickler-Team]
Entwickler_A.EnträgeProSeite = "50";
Entwickler_A.Captcha         = "Ja";
Entwickler_B.EnträgeProSeite = "50";
Entwickler_B.Captcha         = "Ja";

[Grafiker-Team]
Grafiker_A.EnträgeProSeite = "50";
Grafiker_A.Captcha         = "Ja";
Grafiker_B.EnträgeProSeite = "50";
Grafiker_B.Captcha         = "Ja";



Das war jetzt mal die grobe Struktur - seht Ihr in dieser Umsetzung mögliche Probleme? Sollten für Module der XML oder der INI-Provider verwendet werden (Datenbank-Provider ist aufgrund der zu niedrigen Verschachtelungs-Möglichkeiten von Sektionen ausgeschieden)? Ich tendiere zur ini-Variante, da dann weniger Tipparbeit notwendig ist.


LG Nico

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast