Drupal サイト構築時にコンテンツ構造、表示設定、機能構成が重要なポイントになる
Drupalが非常に柔軟性、拡張性のあるフレームワークである。それこっそ、サイト構築時にいろいろな構造を注意しないとパフォーマンス問題になる。
- どのようにコンテンツを構成するか
- どのように表示を設定するか
- どのように機能を構成するか
コンテンツを構成する
コンテンツがサイト構成の一番基本な要素なので、コンテンツ分析、分類、構成するのはサイト構築の第一歩である
- フィールド(Field)とコンテントタイプ(Content Types)を一緒に検討する。
- フィールド/コンテントタイプの種類、数が少ないほうがいい
以下はよくある問題と解決案
- 問題: コンテントタイプ(Content Types)が多すぎる.
- 結果: コンテンツを作成時に何を使うかは迷う
- 例: コンテントタイプ(Content types) “news” と “article,” ⇦ この二つタイプの大半は同じ
- 解決: コンテントタイプ作成基準を明確し、できるだけ再利用する。
- 問題: 各コンテントタイプに新しいフィールド(Fields)を定義する
- 結果: リソースの消耗、パフォーマンス問題になる
- 例: 二つのフィールド: school city and teacher city ⇦ 性質が同じ、再利用可能
- 解決: フィールドの再利用と作成基準を明確化する ⇦ フィールドの再利用に賛否両論があり、データベースなどに左右される
- 問題: コンテントタイプにノード(nodes)がない
- 結果: 必要なないコンテントタイプがサイト構成に複雑になる
- 解決: コンテントタイプ作成基準を明確し、できるだけ再利用する
表示の設定
DrupalがViews, Panels, and Context modulesなどのモジュールを利用して、コンテンツを違う場所、フォーマットで各種表示には強力なツールである。
- 表示構成をよく計画する
- 表示の最適化と再利用する
- ロジックとプレゼン層をしっかり分ける
- 単一、基本のthemeから表示の仕組みを学習する
以下はよくある問題点と解決案
- 問題: すべてのリストに一つビューで対応
- 例: 別々のビューで仕事場所がロンド、パリ、ベルリンを表示する
- 解決: Contextualフィルタ、Selection Rulesなどを利用して、同じビューで違うコンテンツを表示する
- 問題点: テンプレート(.tpl)、データ定義にロジックのPHPコードが混入される
- 解決: Drupalのファイル、モジュール構造を理解して、正しいカスタマイズを行う
サイトの機能を構成
サイトの目的、必要な機能を計画し、必要最低限のモジュールの採用と一部分のコーティングでサイトのパフォーマンスを向上する
- サイトの機能をよく計画し、機能の重複を減らす
- 機能により必要最低限のモジュールをインストールする
- 一部分の機能しか使わないモジュールを改造して、シンプルなモジュールにする
- 重要なモジュール(例:Views、Panelsなど)がエクスパートに作成されので、そのままにして改造しないこと
- Drupalのコード改造基準、コーティング基準などをよく理解する
以下はよくある問題と解決案
- 問題: インストールされ、有効化したモジュールが多すぎる(例:200以上、各種試しモジュールを含め)
- 結果: パフォーマンスの問題になる
- 例: 最初が多言語対応検討だが、実際に日本語しか表示していていない(多言語対応モジュールがインストール、有効化されたまま)
- 解決: 不必要なモジュールを無効化、アンインストールを行う。ローカル環境でテスト後に本番環境にモジュールの導入
- 問題: ユーザーのロール(権限設定)が多すぎる
- 結果: サイトのメンテナンス性とセキュリティチェックが複雑になる
- 例: 最初はより多いロールを検討してサイトを構築したが、結局多いロールが使用されていない。またはロール間の明確な区別をつかない。
- 解決: ロールと権限を分析し、グルーピングする。ルール、権限を階層化して、継承する
- 問題: カスタマイズしたコードが実際にあるモジュール(contrib module)にその機能が含まれている
- 解決: カスタマイズする前に、機能相似のモジュールのコードをよく読んで、コード上に参考できる部分をコピーして利用し、機能重複を避ける
- 問題: コーアモジュール、contrib modulesを改造する
- 結果: アップデートしたらサイトの動作が変わる
- 解決: hooksを利用して、コーアモジュール、contrib modulesに提供されていない機能をカスタマイズする、または動作を変更する(sites/pine/modulesに作成)
- 問題: 違うhooks、またはDrupal API を使用してしまった
- 例1: ある特定なページでhook_initを使用して、すべてのページがロードする際にこの関数を呼び出してしまう
- 例2: nids、tidsとvidsなどのidを直接にコードに挿入してします。将来これらのコードが変わった場合ページが表示されなくなるし、発見するのも難しい
- 解決: Drupal API、構造、コーティングルールなどをよく理解して、慎重にカスタマイズする