2009-08-03 8 views
0

Ich bin ein CMS erstellen und Serialisierung verwenden, um Publish und Rollback zu behandeln, die scheint gut zu funktionieren. Im Grunde genommen werden die normalen Site-Tabellen angezeigt, und alles, was nicht angezeigt wird, wird in einer separaten Tabelle serialisiert. Das Problem besteht jedoch darin, dass die "Vorschau" -Funktionen funktionieren.Rollback und Vorschau in einem CMS

Da das Frontend mit normalen SQL-Aufrufen erstellt wird und alle vorveröffentlichten/zurückgerollten Daten in einer separaten Tabelle sind, würde das bedeuten, dass jede SQL-Anweisung mit etwas ausgefallenem Code aktualisiert wird, um die Version korrekt in die Vorschau zu übernehmen. Es wird auch besonders problematisch mit Dingen wie Limits usw. und wäre ein Albtraum für das Frontend. Der einzige andere Ansatz, den ich sehen kann, ist eine separate Datenbank/Tabelle (n) für die Vorschaukopie, aber viele Leute benutzen möglicherweise die Vorschaufunktion und ich verabscheue es, eine doppelte Datenbank für jede Person zu erstellen, die die Vorschau verwendet wird sehr schnell außer Kontrolle geraten.

Gibt es eine Möglichkeit, dies zu tun, die Vorschau und Rollback-Vorschau ermöglicht, aber nicht viel aus dem Code, der den Inhalt der Datenbank anzeigt und auch das Problem der Massenvervielfältigung vermeiden?

Antwort

-3

Wenn Sie Model, View und Controller trennen, sollte das kein Problem sein: Sie nehmen das Modell einfach von irgendwo anders in der Steuerung und geben es an die View weiter.

+0

Sorry, aber was hat das mit irgendetwas zu tun? – Meep3D

0

Was eWolf bedeutet, dass Sie, wenn Sie ein separates Modell und View haben, Ihr Modell verschiedene Daten an die View liefern lassen können und dann nicht Ihre Datenbank kopieren müssen, sondern einfach ein Standard- und ein Vorschaumodell erstellen .

Das Vorschaumodell muss keine Abfragen an die Datenbank senden, sondern liefert die Daten, die Sie darin gespeichert haben, bevor es an die Ansicht übergeben wird.

Betrachten Sie dieses Beispiel:

//in the controller: 
$previewPage->setTitle("foo"); 
... 
//in the view(when previewing): 
$previewPage->getTitle(); // returns whatever you stored beforehand 

//in the view(regular viewing): 
$livePage->getTitle(); // queries the database and returns the result 

Um mehr über das Muster Model View Controller erfahren Sie this Artikel überprüfen möchten.

Ich hoffe, dass hilft.

+0

Ich bin ziemlich vertraut mit MVC. Das Problem ist, dass es im Grunde niemandem verbieten würde, jemals SQL zu verwenden, entweder Lese- oder Schreibvorgänge. Es wird erwartet, dass CMS-Module mit sich selbst umgehen und ich möchte, dass der gesamte Prozess für sie transparent bleibt, um die Dinge einfach zu halten. – Meep3D

1

Ich bin nicht sicher, dass das Speichern Ihrer Inhaltsdaten in mehr als 1 Tabelle abhängig von seinem Zustand der Weg ist.

Ich würde jede Version des Inhalts in der gleichen Tabelle speichern, mit einem Feld, das den Status des Inhalts festlegen würde (alte Version, aktuelle Version, wird gerade bearbeitet, was immer Sie wollen, abhängig von der Bearbeitung Ihrer Inhalte Arbeitsablauf). Diese Art von Statusfeld und ein Datumsdatum würden Ihre Content-Versionen viel einfacher verwalten.

Ich verwendete diese Methode für verschiedene Anwendungen und war immer damit zufrieden, wie einfach es war, Rollbacks, Vorschauen und sogar komplexere Sachen (cvs-ähnliche Pseudo-Zweige, ...) zu implementieren.