Clansuite Community Forum


 
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
 
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: Widget System  (Gelesen 2339 mal)
0 Mitglieder und 2 Gäste betrachten dieses Thema.
xsign.dll
Guide
***
Offline Offline

Beiträge: 155


« am: August 20, 2008, 10:04:52 »

Guten morgen Smiley

In der letzten Woche habe ich recht viel am Widget System gebaut. Dies funktioniert recht gut. Widgets verschieben, vergrößern, löschen funktioniert direkt unter http://www.clansuite-dev.com/index.php?action=edit
Das ist jedoch noch nicht direkt mit den templates verknüpft, sodass die Widgets noch nicht permanent auf ihren Positionen bleiben bzw. ihre Größe halten. Dafür sind Eingriffe notwendig, die man absprechen muss. Die verschiedenen Verfahren zur Realisierung will ich kurz erklären. Für jedes dieser Verfahren gibt es jedoch Voraussetzungen.

Voraussetzungen
Um Widgets Platzieren und verschieben zu können, bedarf es verschiedener Wrapper, welche vorgeben, wo Widgets im DOM Platziert werden können. Im jetzigen Stadium werden diese Wrapper per ID identifiziert:
  • left_widget_bar
  • right_widget_bar
  • bottom_widget_bar
  • all_widgets_cont

Der Container "all_widgets_cont" dient dazu, um entfernte Widgets aufzufangen und sie wieder zu präsentieren, falls man diese wieder hinzufügen möchte.
Eine weitere Voraussetzung ist, dass die Widgets innerhalb eines <span> Containers gehalten werden müssen.
Zur Begründung: <span> Container sind sogenannte "inline" Elemente. Sie besitzen keine Größe und können nicht richtig positioniert werden. Vorzugsweise werden deshalb häufiger <div> Container verwendet. Dies sind "block" Elemente und können mit "width" und "height" ausgestattet werden. <div> Container haben jedoch einen signifikanten Nachteil: Sie nehmen IMMER 100% width ein. Man kann dies durch eine feste Breite einschränken, das ist aber nur ein Trugschluss. In wirklichkeit besitzt der <div> Container immernoch 100% und wird nur innerhalb dessen auf die gewünschte Größe beschränkt. Daraus resultiert ein "Umbruch" nach jedem <div> Container. Will man diesen jedoch durch float:left verhindern, kann man die Elemente nichtmehr richtig zentrieren, da sie außerhalb des Textflusses gehalten werden.
Somit gelangt man zu der Einsicht, das Block Elemente sehr unpraktikabel sind, wenn es um dynamische Positionierung derer geht. Man braucht also ein Block Element, was positionierbar ist, nicht permanent auf 100% width gestellt ist und somit keine Umbrüche erzeugt. Dies wird durch einen CSS Modifier genannt "display: inline-block;" realisiert. Dieser Modifier wurde speziell in CSS 2.1 eingeführt, um das oben beschriebene Problem zu beheben, doch wie sooft halten sich die Browser nicht an die Spezifikationen von CSS, im Speziellen der Internet Explorer 7. Die Eigenschaft "inline-block" kann dort NICHT auf <div> Elemente angewendet werden (der einzige Browser, der dies vroschreibt -.-), sondern nur auf native inline Elemente. Somit bleibt nur die logische Schlussfolgerung, ein natives Inline Element zu verwenden: <span>
Dies dient zur Erklärung, denn viele werden mich fragen, warum ich "bescheuerterweise" ein Text-Inline Element zur Positionierung der Widgets genommen habe.


Doch nun zu den Verfahren zur Speicherung der Widget Positionen und Größen:

1. index.tpl überschreiben
Eine recht invasive Methode ist, die Widgets schlichtweg innerhalb der index.tpl neu anzupassen. Dabei wird die XML Struktur des HTML Dokuments aufgebrochen und die darunterliegenden Widgets werden neu angeordnet.

Vorteile:
- die index.tpl enthält immer genau die Struktur, welche gerade vorherrscht
Nachteile:
- recht aufwändiges Platzierungsverfahren der Widgets
- manuelle Änderungen der <span> Elemente durch den User können schlecht abgefangen werden

2. Widget System einführen
Dies würde Smarty Tags oder Funktionen einführen, im Stil von {$left_widgets}, {$right_widgets}, etc.! Dies wäre dem Joomla System recht ähnlich.

Vorteile:
- Position/Größe der Widgets kann überall gespeichert werden (vorzugsweise in der Datenbank) und kann von überall heraus dynamisch verändert werden.
- Das schlichte umpositionieren von "Widget Bars" (left, right, bottom) wird zum Kinderspiel
- Kapselung
Nachteile:
- die index.tpl würde "schmal" aussehen. Es wird immernoch möglich sein, in der index.tpl feststehende Widgets einzubinden, dennoch kann es verwirrend sein, wenn dort nur steht {$left_widgets}. Mit einer guten Doku kann man dies jedoch recht solide Auffangen.


Ich tendiere sehr stark zu einem Widget System hin, auch wenn es in Richtung Joomla geht (und ich dieses Prinzip von Joomla stark ablehne, aber eben nur auf Grund der Tatsache, dass man dort die Positionen im Backend angeben muss und kein Drag&Drop hat).
Gespeichert

Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #1 am: August 20, 2008, 02:46:35 »

Hmm. Na das passt doch.

Ich hab das zweite Verfahren in nem Modul "Blockmanager" umgesetzt (Backend).
Ausgehend von der index.tpl wird {widgetBlock name="left|right|center|top|bottom"} verwendet. Diese Smarty Funktion ruft das Template mit dem Namen: widgetBlock_left.tpl auf.
Der Inhalt bestimmt sich, je nach eingefügten Widgets aus der Liste aller verfügbarer Widgets.
Das ist gegenwärtig hardcoded: d.h. ich hab (1) noch keinen Scanner für verfügbare Widgets aller Module, (2) die widgetBlock_ Dateien wird direkt neu geschrieben, wenn eine Änderung vorgenommen wird. Bei (1) und (2) könnte man die DB ins Spiel bringen.

Nachteile:
- Positionsangabe und Sortierung der Widgets auf Blöcke nur im Backend
- manuelles Einfügen des {widgetBlock name="x"} in index.tpl erfoderlich
- kein DragDrop bislang

Das mit dem Templateinhalt eines Blocks bzw. Widgets (<div> oder <span>) hab ich erstmal vernachlässigt, wegen dem Trennungsprinzip.

Nächste Woche können wir beides gerne zusammenführen!
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
xsign.dll
Guide
***
Offline Offline

Beiträge: 155


« Antworten #2 am: August 20, 2008, 03:00:21 »

Gut - habe auch gerade das Ticket im Trac nochmal angepasst.
Kurz und knapp können wir uns also auf sidebars/blöcke einigen. Das ist schonma recht supi.

Ich habe es so gehandhabt, dass man garnicht das backend betätigen muss, um überhaupt etwas anzupassen. Man hat direkt das Frontend vor sich, kann hin und her schieben, per mousewheel breite und höhe der widgets oder bars anpassen und danach drückt man auf speichern und gut ist. das ist imho wesentlich schneller als im backend positionen zu vergeben (weswegen ich joomla hasse).

Bei Blöcken ist es nur immer so eine Sache mit der Positionierung. Normalerweise sollte das Template vorgeben, wo man positionieren darf. Die Blöcke/Bars dürfen eigentlich nicht verschiebbar sein. Man kann ja auch einfach 3 Widgets verschieben, läuft dabei aber nicht gefahr, dass das Template zerpflückt wird.

Am besten mal den Blockmanager commiten, damit wir nicht gegeneinander arbeiten (falls möglich).
Gespeichert

Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #3 am: August 21, 2008, 11:49:36 »

Zum Commit: Ich hab nur die Doku mitgenommen. Mehr als schreiben, kann ich hier auf dem Laptop eh nicht machen. Den Blockmanager kann ich daher erst in der nächsten Woche commiten.

Frontend Editmode: SuperSache! Das Backend ist dann nur der Form halber - Frontendediting ist sowieso viel bequemer. Wir bräuchten dafür noch nen Schalter, um den Editmodus an-/abzustellen.
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
xsign.dll
Guide
***
Offline Offline

Beiträge: 155


« Antworten #4 am: August 21, 2008, 11:55:03 »

ja das wirds sowieso geben, deswegen hab ichs ja auf ne funktion ausgelagert + template @ index modul

btw: wie zum geier bekomm ich trac email notifications zum laufen ?
Gespeichert

Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #5 am: August 21, 2008, 11:56:48 »

Supi.

Ich kümmer mich um Trac Notifications.
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
xsign.dll
Guide
***
Offline Offline

Beiträge: 155


« Antworten #6 am: August 21, 2008, 11:58:04 »

k thx . hab in der ini zwar die smtp sachen eingestellt, aber irgendwie naja... kA
Gespeichert

thunderm00n
Designer
*****
Offline Offline

Beiträge: 107


« Antworten #7 am: September 09, 2008, 12:25:40 »

Falls Ihr ne richtig gute Umsetzung eines solchen Drag & Drop Systems mal sehen wollt, dann schaut euch mal grafiker.der an

Wenn man dort registriert ist, dann kann man seine Startseite (Lobby wo alles aktuelle angezeigt wird) nach belieben mit diversen Boxen ausrüsten. Box auswählen, verschieben, konfigurieren, fertig.

Find ich ne geniale Idee für die Clansuite Lobby, dann kann jeder seine Lobby selbst gestalten. Irre!
Gespeichert

greetz Thunderm00n

Ein Rechtschreibfehler (auch Fehlschreibung genannt) bezeichnet eine Schreibweise eines Wortes oder Satzzeichens, die laut der allgemein üblichen Orthographie falsch ist.
Meine Rechtschreibfehler unterliegen der General Public License und dürfen frei verwendet werden.
Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #8 am: September 10, 2008, 12:15:06 »

Schöne Idee. So macht das iGoogle auch.
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
thunderm00n
Designer
*****
Offline Offline

Beiträge: 107


« Antworten #9 am: September 10, 2008, 04:26:45 »

ja igoogle macht das auch, jedoch ist das design bei igoogle zum würgen... find das bei grafiker.de besser gelöst.

Mir gefällt vor allem, dass man die jeweilige Box direkt konfigurieren kann, Ohne Umstände direkt im Forintend. GEIL
Gespeichert

greetz Thunderm00n

Ein Rechtschreibfehler (auch Fehlschreibung genannt) bezeichnet eine Schreibweise eines Wortes oder Satzzeichens, die laut der allgemein üblichen Orthographie falsch ist.
Meine Rechtschreibfehler unterliegen der General Public License und dürfen frei verwendet werden.
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  


Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines

Google visited last this page Heute um 12:23:36