![]() |
| | LinkBack | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 964
|
Hallo. In meinem Content Management System gibt es „Sektionen“. Das sind anders als in anderen CMS Bereiche auf einer einzelnen Seite, in die verschiedene Komponenten (je nach Konfiguration mehr oder weniger) flexibel eingebunden werden können. So hat eine typische Sektion, die den Haupttext einer Seite ausmacht z.B. Komponenten vom Typ „Text“, „Bild“, „MediaPlayer“, die beliebig hinzugefügt, entfernt und in der Reihenfolge geändert werden können. Jetzt speichere ich also für jede Seitenversion, welche Komponente in welcher Sektion in welcher Reihenfolge eingebunden ist. Oft werden jedoch in einer Seitenversion nur Inhalte geändert, also in einer bereits eingebundenen Textkomponente wird Text hinzugefügt oder geändert. Das ändert nichts an der Einbindung der Komponenten an sich. Dennoch kopiere ich jedes mal die komplette Zuordnung und lege sie nochmal in die Datenbank. So läuft auf dem System z.B. eine Site, die derzeit aus knapp 300 Seiten besteht und gerade mal ein halbes Jahr besteht. Die Tabelle mit den Komponentenzuordnungen hat jetzt bereits knappe 8.000 Einträge. Ich denke, die Frage lässt sich so wahrscheinlich nicht pauschal beantworten, aber mir kommt diese Art der Speicherung nicht gerade effektiv vor und ich frag mich, ob ein sezialisiertes PHP-Array in der Pageversions-Tabelle, die für jede Version einen Datensatz enthält (auf der genannten Site knappe im Moment 1.400) nicht effektiver wäre. Oder gibt es andere Ansätze für eine Versionsverwaltung von Listen? Nochmal anschaulicher: Die Tabelle heißt pagenodes und sieht so aus: Code: CREATE TABLE `pagenodes` ( `id` int(10) unsigned NOT NULL auto_increment, `pageversion` int(10) unsigned NOT NULL, `section` int(10) unsigned NOT NULL, `component` int(10) unsigned NOT NULL, `order` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) Sektion Haupttext (Sektion 42) könnte also drei Komponenten haben (100, 101 und 150). Das alles in einer Seitenversion 10: Code: pageversion: 10 section: 42 component: 100 order: 0 pageversion: 10 section: 42 component: 101 order: 1 pageversion: 10 section: 42 component: 150 order: 2 Code: pageversion: 25 section: 42 component: 100 order: 0 pageversion: 25 section: 42 component: 101 order: 1 pageversion: 25 section: 42 component: 150 order: 2 Code: pageversion: 27 section: 42 component: 100 order: 0 pageversion: 27 section: 42 component: 150 order: 1 pageversion: 27 section: 42 component: 101 order: 2 Dazu kommt, dass es viele Sektionen gibt, die aus nur genau einer Komponente bestehen, die auch nicht entfernt werden darf. Die Überschrift wäre so ein Beispiel, ein Teasertext, ein Seitenbild etc. Für die Komponentenvariablen (also die Inhalte, die in den Komponenten gespeichert werden) hab ich das Problem so gelöst, dass ich für jede Variable jeweils speichere, von welcher Version bis zu welcher Version sie gültig sind. Aber bevor ich das hier einbaue, wollte ich Euch fragen, ob Ihr andere Lösungen kennt oder Ideen habt. DB-System ist MySQL. Bastian Geändert von Basti (23.03.2009 um 10:18 Uhr) |
| | |
| | Nach oben #2 |
| Johannes Müller Registriert seit: 15.09.2005 Ort: Königreich Flieden
Beiträge: 693
|
Das finde ich mal ein interessantes Thema... Also im Grunde könnte eine Seite z.B. folgenden Inhalt haben (als Array dargestellt): Code: $sections = array(
'top-section' => array(
'mytext' => array(
'type' => 'text',
'content' => 'blablabla'
),
'myimage' => array(
'type' => 'image',
'content' => 'image.png'
),
'main-section' => array(
'body' => array(
'type' => 'text',
'content' => 'foobar'
)
)
)
Wenn da jetzt die eigentlichen Inhalte der Einzelkomponenten (jeweils 'content') rausgenommen werden, haben wir eine reine struktur, die unabhängig davon ist, mit was für inhalten sie gefüttert wird. Aud die konkreten Inhalte müsste dann nur per Verweis hingewiesen werden, die aus ner anderen Tabelle geholt werden. Code: $sections = array(
'top-section' => array(
'mytext' => array(
'type' => 'text',
'id' => 12
),
'myimage' => array(
'type' => 'image',
'id' = 34
),
'main-section' => array(
'body' => array(
'type' => 'text',
'id' => 2
)
)
)
Zum Rendern der Seite muss dann nur noch der jeweilige Content aus der Komponenten-Tabelle geladen werden. In einer Sparversion könnte das z.B. so aussehen: Code: id | version | content -------------------------------- 12 | 14 | blablabla 12 | 10 | alter text 34 | 45 | image.jpg 2 | 6 | foobar Alternativ könnte auch noch ein weiteres Feld dazukommen, dass den Sichtbarkeitsstatus deklariert, sodass auch eine ältere Versionsnummer der "aktuelle" Inhalt sein kann. Dadurch spart man sich doppelte Inhalte, wenn auf eine frühere Version zurückgesetzt werden soll. Das is mir jetzt auf die schnelle dazu eingefallen, aber ich weiß nicht so recht, ob das in etwa etwas sein könnte, was du suchst...
__________________ Weißt Bescheid - Scheiß wie weit |
| | |
| | Nach oben #3 | |||||
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 964
|
Hallo Johannes. Zitat:
Das Type-Attribut gibt es: Componenttype. Jeder Componenttype entspricht einem konfigurierten Modul. Zitat:
Zitat:
Zitat:
Code: SELECT `content` FROM `my_table` WHERE `component` = 12 SORT_BY `version` LIMIT 1 Zitat:
Bastian | |||||
| | |
| | Nach oben #4 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 964
|
Hi. Ich werde das jetzt so umsetzen, dass ich eben diese beiden Werte „version_from“ und „version_to“ einfüge und dann bei nicht geänderten Datensätzen einfach version_to um eins erhöhe und nur die geänderten dann neu Eintrage: Code: Anfangs seien vier Komponenten in 2 Sektionen gespeichert: page version_from version_to section component order 42 1 1 10 100 0 42 1 1 10 101 1 42 1 1 10 150 2 42 1 1 11 200 0 Etwas wird verändert, jedoch nicht an der Reihenfolge oder Existenz der Komponenten: page version_from version_to section component order 42 1 2 10 100 0 42 1 2 10 101 1 42 1 2 10 150 2 42 1 2 11 200 0 Komponenten 101 und 150 werden in der Reihenfolge vertauscht: page version_from version_to section component order 42 1 3 10 100 0 42 1 2 10 101 1 42 1 2 10 150 2 42 1 3 11 200 0 42 2 3 10 101 2 42 2 3 10 150 1 Komponente 100 wird entfernt (die folgenden müssen einen neuen order-Wert bekommen): page version_from version_to section component order 42 1 3 10 100 0 42 1 2 10 101 1 42 1 2 10 150 2 42 1 4 11 200 0 42 2 3 10 101 2 42 2 3 10 150 1 42 3 4 10 101 1 42 3 4 10 150 0 |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| kann nicht mit datenbank verbinden | richy | Datenbanken | 2 | 27.03.2008 13:03 |
| Vector in eine Datenbank speichern? | thomasj@inode.at | Allgemeine Java-Programmierung | 3 | 14.02.2008 16:16 |
| Problem bei Verarbeitung von Templates (Eigene Klassen) | dago | PHP-Programmierung | 21 | 31.08.2006 16:02 |
| PDF in DB speichern oder ? | julien | Datenbanken | 9 | 14.05.2006 20:26 |
| Datenbank und Sicherheit | sparrow | Datenbanken | 23 | 05.11.2005 17:45 |