ホーム   ユーザガイド   開発者ガイド   モジュール情報   翻訳ファイル   当サイトについて   フォーラム  
画像とPDFのアップロード、もしくはCCKによるグループの複数追加について

現在、CCKを使って、画像を含めた複数の入力フィールドをまとめて追加できるようなコンテンツタイプを作成しております。
例えば、わかりやすく車を例にしますと、
(1)メーカー
(2)車名
(3)グレード (←これをひとまとめに複数個追加)
(3-1)型番 (←テキスト)
(3-2)値段 (←数値)
(3-3)写真 (←画像、PDFファイル)
といったコンテンツタイプを実現するために、CCK、Imagefield、ImageField Extendedを使用しています。

(1)、(2)はCCKで普通にテキストフィールドを追加するだけでいいのですが、(3)をひとまとめに追加していくのにImagefieldにImageField Extendedで入力欄を追加し、値の数を無制限にしています。

問題なのは、画像ファイルだけではなくてPDFファイルもアップロードしたいのですが、そのような変更はできますでしょうか?
或いは、CCKでグループを複数個作成していくモジュールはあるのでしょうか?

解決しました

こんにちわ、投稿した者です。
一応落ち着きましたので、内容を報告させていただきます。

まず、フィールドをグループにして、そのグループ単位で個数を増やしていく事に関しては、CCKの次バージョンCCK3では対応可能という情報がありましたが、現時点ではまだ開発バージョンなので見送りました。
結局、Imagefield、ImageField Extendedを併用することで対応しました。

この2つのモジュールを用いて、「画像×1、テキストフィールド×任意」といったフィールドが作れますので、当初の車の「グレード」を表現できそうです。

ただ、問題点としてPDFファイルがアップロードできないという点がありましたが、Imagefieldのソースを少し触るだけで解決いたしました。
・Imagefiledの設定でアップロードファイルの種類に「pdf」を追加しました。
・アップロードファイルが「画像」であるとチェックしている箇所がありましたので、ソース上からコメントアウトしました。
→imagefield.module:200ぐらい

これで実際にPDFファイルをアップロードできるようになるのですが、画像をアップロードしたときはサムネイルが表示されるのに対し、PDFでは何も表示されずに見た目的に違和感があります。ですので、
・サムネイルを作成する際、PDFファイルだった場合は特定のサムネイルファイル(自作です)を表示する。
→imagefield.module:theme_imagefield_admin_thumbnail()

といった変更を加えて対応完了いたしました。

この度は色々とご指導頂き誠にありがとうございました。

報告ありがとうござ

報告ありがとうございます。結構簡単な操作で画像ファイル以外も扱えるのですね。ただ、ファイルが画像以外の場合のvalidationはどのようになっているか、filefieldのvalidation functionも見ておいた方が良いかもしれません。

それから、モジュールのコードを書き換えるとアップデート時に支障が出るので、カスタムモジュールからvalidation functionやtheme functionをオーバーライドするのがDrupalを使って開発する際に推奨される方法です。PHPを扱える方のようなので少し補足します。

フォームのvalidationは、hook_form_alter()を使って行います。これを利用するにはまず、まず、tentenさんのvalidatorはカスタムモジュール内に移動し、関数名も変更する必要があります。次に、hook_form_alter()を実装します。
ノードフォームの配列内に、$form['#validate']というキーがあり、そこにぶら下がっている配列内の関数名が、フォームのvalidationに使われる関数です。imagefieldはfilefield_validate_is_imageという関数を呼ばせようとするので、これをtentenさんのvalidatorを呼ぶようにカスタムモジュールのhook_form_alter()の実装内で書き換えます。

次にtheme functionは、theme_imagefield_admin_thumbnail()を独自のtheme functionでオーバーライドします。具体的には、例えばカスタムモジュール名がcustom.moduleであれば、オーバーライドに使うtheme function名はcustom_imagefield_admin_thumbnail()となります。
ちなみに、Drupal6からはパフォーマンス向上のため、theme functionをレジストリに登録するのですが、そのためにはhook_theme()を実装し(つまりこの例ではcustom_theme()というfunctionを作成する)そこに上記のカスタムtheme functionを入れてやる必要があります。

Drupal APIのドキュメントはhttp://api.drupal.org/にあります。英語なので読みにくいのですが、非常に有用です。

こうすることで、imagefieldに大幅な変更が無い限り、imagefieldモジュールのアップデートもスムーズに行うことが可能です。

もう一度考えてみます

> それから、モジュールのコードを書き換えるとアップデート時に支障が出るので、カスタムモジュールからvalidation functionやtheme functionをオーバーライドするのがDrupalを使って開発する際に推奨される方法です。PHPを扱える方のようなので少し補足します。

この辺の、Drupalで推奨されている方法ってのがまだまだわかりづらいところでした。本家公式サイト周りは少しずつ見てはいるのですが、なにぶん自分の英語解釈があっているのかどうか不安な所もありまして。。。

取り合えず、上記コメントとDrupal APIとを見比べながら、もう一度チャレンジしてみます。

アドバイスありがとうございました。

filefield / multigroup module

>> 画像ファイルだけではなくてPDFファイルもアップロードしたいのですが
CCKのfilefieldモジュールは、ウィジェットの設定をFileまたはimageのどちらかにしか設定できないので、残念ながら一つのフィールドを使って画像とPDFの両方をアップロードすることはできません。画像、ファイル用にそれぞれフィールドを作ることで回避するしかないようです。

>> CCKでグループを複数個作成していくモジュールはあるのでしょうか
http://drupal.org/node/484068
http://drupal.org/node/494100
CCK 3では実装される可能性があるようです。12月30日時点のリリースで実装されているのかどうかは、スレッドをざっと読んだ限りでは分かりませんでした。6.x-3.x-devを試してみるのも手ではありますが、メジャーリリースされていないので、バグ、大幅な仕様変更およびセキュリティ上の危険を考慮して、プロダクションサイトでは使用しないことをお勧めします。

コメント表示オプション
----------
お好みのコメントを表示方法を選択してください「設定の保存」をクリックすると変更が有効になります。