0

マイクロCMSを構築しています。MysqlをRDMSとして使用し、DoctrineORMをマッピングに使用します。

2種類のページが欲しいのですが。静的ページ、およびブログページ。静的ページには、page_urlとpage_contentがデータベースに保存されます。ブログページにはpage_urlがありますが、page_contentはありません。ブログには投稿、カテゴリがあります...

私がこのようなルートを持っているとしましょう:

/{pageurl}

これは、ホーム、ニュース、またはブログのいずれかのページURLを持つページです...そのページは静的ページのいずれかである可能性があり、次にpage_contentを印刷します。ただし、ブログページの場合もあり、最新の投稿をコンテンツとして印刷します。

これらの静的ページテーブルとブログページテーブルをどのように関連付ける必要がありますか?どちらもURLを含むページですが、コンテンツが異なるため、この継承ですか?静的ページとブログページの両方がpage_urlを持つPageを拡張するように、継承を使用する必要がありますか?または、別のテーブルpage_typesを作成して、使用可能なページタイプに関する情報を格納する必要がありますか?

4

1 に答える 1

1

一般的に、MVCフレームワークを念頭に置いて話しているのですが、ルートを使用すると、さまざまなモデルやビューにマップできるさまざまなコントローラー/アクションに一致する特定のパターンが得られます。

たとえば、標準のページURLは次の形式になります。

/{pageurl}

一方、ブログページのページURLは次のようになります。

/blog/{pageurl}

これにより、2つを区別し、それに応じてルーティングすることが非常に簡単になります。パターンに合っていれば/blog/*ブログです!ただし、最も簡単な方法を採用したくないと仮定しましょう。代わりに、すべてのURLを同じパターンに従うことにします/{pageurl}。実際のURLのリストはすべて、データベース内の1つのテーブルに格納する必要があります。たとえば、という名前の場合site_pagesです。site_pagesyourとの関係は、テーブルへの外部キーであるnamedblogsの列になります。blogspage_idsite_pages

これにより、表示しているページのタイプを判別する方法がいくつかあります。

  • ;site_pagesなどの新しい列をテーブルに追加します。is_blogそれが設定されている、あなたはブログを持っています!
  • データベースでページを検索するたびcount()に、特定のページのブログエントリも取得します。もしそうなら> 0、あなたはブログページを持っています。それ以外の場合は、静的コンテンツとして表示します。
  • page_content空の場合はブログであると想定します。

ページが静的ページであるかブログページであるかを確認したら、対応するモデル(「ページ」または「ブログページ」)をロードできます。BlogPageは同じ目的を持っているので、Pageを拡張することができ、おそらくそうすべきです。2つの違いは、「ページ」がページのテキストコンテンツをロードするだけで、ビューが単にそれを書き出すことだけです。一方、「BlogPage」は、カテゴリ、投稿などのリストをロードし、ビューはそれらを繰り返し処理して、適切と思われる方法で表示します。

于 2012-10-12T13:10:03.487 に答える