DrupalのCCKとViewsモジュール

Drupalの追加モジュールとして大御所モジュールがふたつあります。ひとつはCCK(Contents Construction Kit)、もうひとつはViewsです。

CCKはコンテンツタイプを定義し、定義したコンテンツにさまざまに入力フィールドを追加することができます。MT4.1やWordPressのようなカスタムフィールドをコンテンツタイプ毎に定義できるようになります。デフォルトのコンテンツタイプのストーリーやページ、あるいはコアモジュールにあるブログに新しくフィールドを追加したりはもちろん、全く新規のコンテンツタイプ、例えば、「お店紹介」というコンテンツタイプを作成し、料理の種類(オプション値)、住所や電話番号(テキスト)といった入力フィールドを設置、コメント機能をオンにします。これとは別に、「イベント情報」というコンテンツタイプを作成、こっちはイベントタイプ(オプション値)、開催日時、住所(テキスト)等の入力フィールドを設置、コメント機能はオフにします。住所というテキストフィールドは両方で共有することもできます。

Viewsはコンテンツ(Node)の特定条件による一覧を生成します。MTのインデックステンプレートに近い感じでしょうか?ユーザーロール毎にアクセス権限を設定した独自のURLを構成するページとしてだけでなく、サイドバー部分などに表示するブロックとして生成することもできます。出力するフィールドを徹底的に細かく設定し、また出力するフィルタも徹底的に細かく設定できます。CCKと同時に使用し、CCKで定義したコテンテンツタイプも出力フィールド、出力フィルタとして利用できます。

特定のユーザーだけがアクセスできる、特定のカテゴリ(Taxonomy)のコンテンツを、必要な項目(フィールド)だけを並べたページや複数のページで共通利用できるブロックができることになります。

さて、問題がひとつあります。画像処理です。CCKの追加モジュールにImageFieldというのがあります。入力フィールドとして画像アップロードを追加できるようにするもので、MT4.1にも装備されている機能です。十分に機能するのですが、画像処理のデフォルト的存在のImageモジュールとコンフリクトしてしまいます。同じコンテンツタイプでは併用できないのです。つまりカスタムフィールドの画像と本文欄でアップロードした画像が両立しないのです。最初は上手く表示されていると思っていても、コンテンツを修正したりするとアウトになりました。ここではImageがImageFieldを削除してしまうとありますが、自分の場合は逆になっていました。

ImageFieldの画像をGDを使って様々なサイズにサムネールを自動作成してくれるImageCacheというモジュールも試してみました。コロンブスの卵的な発想で画像処理を行っているようですが、さらに色んな関連付けの処理が必要になります。自分が全部運営するのであれば、それもアリなのですが、人様にadmin権限をお任せすることを考えるとキツそうです。

Imageの機能をImageFieldに移行してしまうという方法も紹介されていましたが、Drupal全般のかなり大幅な改造が必要なようで、あきらめました。結局何度か試行錯誤の上、ImageをベースにしたImage Assistが安定感があり、サムネイル作成もデフォルトで対応できるため、カスタムフィールドとしての画像アップロードは見送りにしました。ユーザー毎にロゴを表示するためのフィールドを設置するつもりだったのですが、これについてはアバターの機能が使えうことで解決できました。

Drupalはモジュールの追加でいかようにも拡張できるものの、運営方法を工夫して、できるだけコアモジュールやデフォルト的追加モジュールだけで可能な限りの処理を行う方がベターかなと思っているところです。