2009-08-03 12 views
0

私はCMSを作成しています。パブリッシュとロールバックを処理するためにserializeを使用していますが、うまくいくようです。基本的には、通常のサイトテーブルは表示されるもので、表示されないものは別のテーブルにシリアライズされます。しかし、問題は 'プレビュー'機能を動作させることにあります。CMSでのロールバックとプレビュー

フロントエンドは通常のSQL呼び出しを使用して作成され、事前に公開された/ロールバックされたデータはすべて別のテーブルに格納されているため、すべてのSQL文を空白のコードで更新して、それはまた、限界などのようなもので特に問題になり、フロントエンドのための悪夢となるでしょう。

私が見ることができる唯一の別のアプローチは、プレビューコピー用のデータベース/テーブルですが、多くの人がプレビュー機能を使用している可能性があります。非常に迅速に手を出すでしょう。

プレビューとロールバックのプレビューを可能にする方法はありますか?しかし、データベースの内容を表示して大量の重複の問題を避けるためのコードはあまり必要ありませんか?

答えて

-3

モデル、ビュー、およびコントローラを分離する場合、これは問題ありません。コントローラ内の他の場所からモデルを取り出し、ビューに渡すだけです。

+0

申し訳ありませんが、何が問題なのですか? – Meep3D

0

eWolfとは、モデルとビューが別々の場合、ビューに異なるデータを提供し、データベースをコピーする必要はなく、単に標準とプレビューモデルを作成するということです。

プレビューモデルはデータベースにクエリを行う必要はなく、ビューに渡す前に保存するデータを配信します。

この例で考えてみましょう:あなたはthis記事をチェックアウトする場合がありますModel-View-Controllerパターンの詳細については

//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 

を。

私は役立つことを願っています。

+0

私はMVCにかなり精通しています。問題は、基本的に誰もSQLの使用、読み取り、書き込みを禁止するということです。 CMSモジュールは、自分自身を処理することが期待されています。私は、プロセスを単純化するためにプロセス全体を透過的にしたいと考えています。 – Meep3D

1

コンテンツのデータを状態に応じて複数のテーブルに格納することは、その方法の1つです。

コンテンツの状態を設定するためのフィールド(古いバージョン、現在のバージョン、現在編集中のもの、コンテンツ編集に応じて任意のフィールド)を持つ同じテーブルにコンテンツのすべてのバージョンを保存しますワークフロー)。そのような種類のステータスフィールドと日付の日付は、コンテンツバージョンの管理を容易にします。

私はこのメソッドをさまざまなアプリケーションに使用していましたが、ロールバック、プレビュー、さらに複雑なもの(cvsのような擬似ブランチなど)を実装するのがどれほど簡単かといつも満足していました。

関連する問題