免責事項:これは以前に回答されていると確信していますが、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
私が嫌いなものこれは、各ページの読み込みの束を行う必要があります。各ウィジェットの割り当てを通じて
- は、現在のページのすべてのウィジェットの割り当てと地域を選択して、実際のウィジェットのためのルックアップを実行します。私はする必要があります。
これは、潜在的にはクエリの負荷があります。より良い方法が必要です。私はこの時点で何かを開いている。
ありがとうございました。
ああ、はい。私はそれがより好きです。私はあなたの示唆が[PAC](http://en.wikipedia.org/wiki/Presentation%E2%80%93abstraction%E2%80%93control)であると思っています。それはHMVCですか? – Johnny
これに関する命名規則についてはわかりませんが、そのように見えます。理論は私が思うよりも難しく見える。 Facebookや他のウェブサイトも同様の機能を使用してページローディングを減らし、ユーザーエクスペリエンスを向上させています。 –