« カラムーチョの香りとそぼろピザと帯解寺 | トップページ | Account Types モジュールを翻訳 »

imagefieldとimagecacheを組み合わせる

Drupalで画像付きのノードを作成するには、いくつか方法があるのですが、最も柔軟に手を加えることのできる方法が、imagefieldとimagecacheを組み合わせる方法だと思います。
まあその分、いろいろと設定しなくてはいけないところも多いわけで、面倒くさい点もありますが。

必要なモジュール
CCK
Contemplate
imagefield
imagecache

1. imagecacheのプリセットを作成する
admin/settings/imagecache でimagecacheのプリセットを作成します。
プリセットというのは、imagecacheで作成する画像の高さや幅をあらかじめ指定した設定のことです。
Preset namespace:にプリセットの名前を入力して「Create preset」ボタンを押すと、プリセットが作成されます。
画像の詳細を設定するため、Add a new actionでアクションを選択して「Update preset」ボタンを押し、アクションの詳細を設定します。

今回の例では「photo_thumbnail」「photo_mainimage」という2つのプリセットを作成しました。
photo_thumbnail = action:scale( width:120, height:120, Scale to fit:Inside dimensions, weight:0 )
photo_mainimage = action:scale( width:400, height:400, Scale to fit:Inside dimensions, weight:0 )

2. コンテンツタイプを設定する
Imageタイプの項目があるコンテンツタイプを設置します。
admin/content/types で既存のコンテンツタイプを編集するか、新しくコンテンツタイプを追加します。

今回の例では新しくコンテンツタイプ「Photo」を作成し、そこにImageタイプの項目を追加しました。
Imageフィールドのラベルに「photo」、ファイルパスに「photo」を指定し、必須にチェックを入れ、その他の項目は変更なしです。

3. テンプレートを設定する
admin/content/templates でコンテンツタイプ「Photo」用のテンプレートを作成します。
それぞれのテンプレートにimagecacheのスニペットを入力して、「出力に適用する」にチェックを入れ、送信ボタンを押します。

今回の例ではティーザーのテンプレートに
<?php print theme('imagecache','photo_thumbnail',$node->field_photo[0]['filepath'],$node->field_photo[0]['title']) ?>
本文のテンプレートに
<?php print theme('imagecache','photo_mainimage',$node->field_photo[0]['filepath'],$node->field_photo[0]['title']) ?>
を追加しました。

以上で、Photoのコンテンツを作成すると、ティーザーと本文にリサイズされた画像が表示されるようになります。

|

« カラムーチョの香りとそぼろピザと帯解寺 | トップページ | Account Types モジュールを翻訳 »

Drupal」カテゴリの記事

コメント

初めまして、Drupalについての参考になる情報をありがとうございます。
今回は、Imagefieldについて厚かましくも質問させて頂きます。

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

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

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

投稿: nono | 2010/01/18 11:19

nonoさん、はじめまして。

アップロードするだけだったら許可する拡張子に「pdf」を追加すれば良いように思います。ただ、Imagefieldだとプレビューやファイル情報に対応していないかもしれません。

また、fieldgroupの複数対応ですが、CCKの次期バージョンではサポートされるようですけれど、現段階では見当たらないですね。

投稿: PineRay | 2010/01/18 15:14

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

Imagefieldの設定から拡張子"pdf"を追加した所、どこかでチェックが入っているらしく、アップロードの段階ではじかれてしまいました。

その後、そのチェック部分はわかりましたので、ソースコード上から外した所、アップロードはできたのですが、サムネイルのプレビューが無くて、ちょっと見た目的に違和感がある状態です。

サムネイル表示とまではいかずとも、PDFファイルのときはそれとわかる特定の絵を表示したく、現在調べている所です。

ちょっと考え方を変えて、Imagefieldに対するImageField Extendedの様に、Filefieldに入力フィールドを追加するモジュールについても探しています。

何か情報ありましたらまたご教授下さい。

ありがとうございました。

投稿: nono | 2010/01/18 16:09

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

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

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

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

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

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

この度は色々とご指導頂き誠にありがとうございました。
今後も本サイトを参考にさせて頂きます。

投稿: nono | 2010/01/25 09:34

Drupalには無数のモジュールが存在するので、ひとつの方法で実現できなくても、他のモジュールやちょっとした工夫でなんとかなるのが面白く、かつ意欲を掻き立てられますよね。

ほとんどお役に立てていませんでしたが、今後ともよろしくお願いします。

投稿: PineRay | 2010/01/25 10:35

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: imagefieldとimagecacheを組み合わせる:

« カラムーチョの香りとそぼろピザと帯解寺 | トップページ | Account Types モジュールを翻訳 »