2012-02-04 5 views
1

免責事項:これは以前に回答されていると確信していますが、SOやGoogleで何も見つかりません。CMS内のウィジェット用のMySQLスキーマ

私は本質的にページ、リージョン、ウィジェットの形式で構成されたCMSを持っています。 1つのページには無制限のリージョンがあり、リージョンには無制限のウィジェットがあります。

は今のところ私のスキーマは次のようになります。これは、単純なウィジェットのための素晴らしい作品

Table: pages 
Columns: id, title, uri, ... 

Table: regions 
Columns: id, page_id, name, title 

Table: widget_types 
Columns: id, title, active 

Table: widget_assignments 
Columns: id, region_id, widget_type_id, data 
(data represents content/settings for a specific instance of a Widget) 

。私がしたいことは、すべてのウィジェットタイプにそれ自身のテーブルを持たせることです。

Table: wt_content 
Columns: id, content 

より複雑なウィジェットの例(例えばフォーラム)のようなものになります:

Table: wt_forums 
Columns: id, ... 

Table: wt_forum_threads 
Columns: id, ... 

Table: wt_forum_categories 
Columns: id, ... 

Table: wt_forum_settings 
Columns: id, ... 

私が知っている唯一の方法は例えば、単純なコンテンツウィジェットは、このようなテーブルを持っているでしょうどのようにこれを実現するためには、このように、table列とwidget_assignmentsテーブルにreference_idを追加することです:

Table: widget_assignments 
Columns: id, region_id, widget_type_id, table, reference_id 

私が嫌いなものこれは、各ページの読み込みの束を行う必要があります。各ウィジェットの割り当てを通じて

  • 次にループ(つまり、加入して1つのクエリです)

    1. は、現在のページのすべてのウィジェットの割り当てと地域を選択して、実際のウィジェットのためのルックアップを実行します。私はする必要があります。

    これは、潜在的にはクエリの負荷があります。より良い方法が必要です。私はこの時点で何かを開いている。

    ありがとうございました。

  • 答えて

    1

    ブラウザからロードするだけでアプローチを変更することを検討できます。したがって、PHPスクリプトで完全なページを生成するのではなく、プレースホルダで基本ページを生成するだけです。次に、JQueryのようなものがページの部分をロードします。

    画像のための例:これは、サーバーにより多くの要求を生成しますが、非常にクリーンなコードを生成し

    http://www.appelsiini.net/projects/lazyload

    。あなたのプロセスは次のようになります。たとえば

    Browser -> index.php -> PHP generates a layout HTML -> browser -> browser requests specific parts needed. 
    

    このようなものは、トリックを行う例えば、すべてのウィジェットのオブジェクトのためにそれを実行することができます。

    <div class="widget" widgetUrl="http://mydomain.com/widgets/2322?optionshere"> 
    $(this).load($(this).attr('widgetUrl')); 
    

    これは、1つのウィジェットのコンテンツを読み込みます。 PHPアプリケーションを返すのは非常に簡単なことです。ウィジェットの読み込みにのみ関係し、複数のウィジェットを含む完全なページには関係しません。

    あなたはこれをほぼ完全にRESTfullにすることができ、必要なコード量を減らすこともできます。

    ウィジェットがプライベートであれば、あなたは次のようにそれにスコープを追加することを検討できます。

    http://mydomain.com/users/123/widgets/2322?optionshere 
    

    あなたは、アプリケーションがはるかに複雑にすることなく、シンプルで高速なセキュリティを実装することができ、そのように。

    +0

    ああ、はい。私はそれがより好きです。私はあなたの示唆が[PAC](http://en.wikipedia.org/wiki/Presentation%E2%80%93abstraction%E2%80%93control)であると思っています。それはHMVCですか? – Johnny

    +0

    これに関する命名規則についてはわかりませんが、そのように見えます。理論は私が思うよりも難しく見える。 Facebookや他のウェブサイトも同様の機能を使用してページローディングを減らし、ユーザーエクスペリエンスを向上させています。 –

    関連する問題