添付ファイルのリストをグループ分けして表示したい

Events happening in the community are now at Drupal community events on www.drupal.org.
king33's picture

いつもDrupalを使わせていただいています。
添付ファイルのリストについて質問が有るのですが、うまく説明できるかどうか解らないんですが、、

一つのコンテンツ(例えばストーリー)に添付ファイルを複数個添付すると、
リスト化するoptionにチェックが入っていると、コンテンツの内容の後に添付ファイルがリストで表示されます。
このリストを視覚的に分類して表示させるようなモジュールとかは有るでしょうか。
たとえば、添付ファイルに
zumen1.pdf、zumen2.txt
spec1.doc、spec2.xls、があったとして
図面ファイルはこちら
 zumen1.pdf 日付 説明
 zumen2.pdf 日付 説明
仕様書はこちら
 spec1.doc 日付 説明
 spec2.xls 日付 説明
のように、表示させたい。

コンテンツにファイルを添付するときに、tagとかでグループ分けして添付できて、
そのtagとかグループごとにリスト表示できる、ようなモジュール。

Drupal.orgのモジュールページは、リリースごとにリスト化されています。
しかも色分けされてる。まさにこんな感じ。

うまく、質問が伝わるかどうか解らないんですが
よろしくお願いいたします。

Comments

d.oのプロジェクトはProject issue

dokumori's picture

d.oのプロジェクトはProject issue tracking(http://drupal.org/project/project_issue )を使って管理しています。これはモジュールのバージョン管理などに使われるので、king33さんのお探しのものではないと思います。アタッチメントをカテゴライズして表示するモジュールというのは知りませんが、コードを書かずにこの機能を構築する上で考えられるのは、CCKとViewsを使う方法です。

添付したいファイルのカテゴリーは決まっていますか?もし決まっており、かつカテゴリーが少数であれば:
1. 添付ファイル用コンテンツタイプを作成する。ファイルはCCKのFileFieldモジュールで1ノード1ファイルのみの添付。親となるノードと関連付けるためのnodereferenceフィールドを追加。
2. 添付ファイルをカテゴライズするためのボキャブラリーとタームを作成し、1と関連付ける
3. #1で作成したコンテンツタイプを表示するviewを作成し、その中にそれぞれのカテゴリーを一覧表示するdisplayを作成する。argumentにnidを指定し、urlからnidを取得する
4. #3をブロックとして親ノード無いに表示

もしカテゴリーが多数の場合、親ノードのtpl.php内で#2のタームをループし、ループ内で以下のコードを実行してviewを表示させるのも手だと思います。

$view = views_get_view('[view name]');
$content = $view->execute_display('[display name]', array([arguments]));
king33's picture

dokumori さん
ありがとうございます。
しかし、指示されている内容が理解できないでいます。あまりにも初心者すぎて怒られそうなんですが、周囲に聞ける人もいないので、お願いします。
drupalを使い始めて1年ぐらいたちますが、CCKもviewsも、タクソノミも使った事が有りません。

まず、添付ファイルリストの分類(カテゴリ)は4つぐらいです。
1.CCKで添付ファイル用のコンテンツを作成しました。nodorefernceフィールドを追加しましたが、中身は ーなしー になっています。
2.カテゴライズするためのボキャブラリーとタームを作成し、1と関連付ける。をしますと、1.で作ったコンテンツに、ボキャブラリーとタームが追加されていて選択できるようになっていました。

それで、3.の所なんですが、ここがちょっとわからない。
ディスプレーとかいうところに、このコンテンツタイプを出てくるようにするにはどうすれば良いのでしょう。
4.の、親ノード内 と言うのが不明なのですが、ノードの中にブロックを作るにはどうすればいいのでしょう。

質問ばかりですいません。

dokumori's picture

知らないことを質問するための場なので、遠慮なく質問してください。初心者に対して怒るような人がいたら、怒る人が間違っています :)

僕の理解ではking33さんの目的は、ある商品(?)の概要・説明をページとして表示し、その下部にその商品と関連する図面や仕様書を表示することだと理解しています。僕が「親ノード」と表現したのは商品にあたり、図面や仕様書の添付は「子ノード」になります。

親・子ノード作成

1.親ノードを一つ作ってください(ここでの例では、コンテンツタイプはproduct、タイトルは'test'とでもしましょう)。

2. 次に、これに関連する図面と仕様書を1ノード1アタッチメントでアップしてください(コンテンツタイプはattachmentsとしましょう)。ノード作成時、nodereferenceフィールドには、親ノードである'test'を入力して関連付けてください。nodereferenceフィールドにtestが表示されない場合、nodereferenceフィールドの設定にて、productコンテンツタイプを参照するように設定する必要があります。また、タームは仕様書・図面を子ノードの添付ファイルの種類毎に適宜選択してください。

Viewの作成

Viewsというのは、フィルターを作る機能、とでも捉えておいてください。与えられた上件において、何を表示するかを設定することができます。

1. まず、viewsのアドミニ画面にて、新しいviewを作成します(admin/build/views/add )。view typeはデフォルトのNodeにしてください。

2. Displayとは、表示方法のことで、ページ、フィード、ブロックその他を選択できます。画面左に表示されているコラムで設定でき、'Defaults'のしたに'Page'というドロップダウンボックスがあり、その下に'Add display'や'analyze'というボタンがあります。とりあえずDefaultsで設定を始めます。

引数の指定

3. まず、上件を画面中央にあるArgumentsの項にて、+ボタンを押し、したに表示されるウィンドウの'Groups'ドロップダウンから'Node'を選択します。下のリストから'Node: nid'を選択し、'add'ボタンをおしてください。

4. 'Action to take if argument is not present'にて'Provide default argument'を選択します。その下のリスト'Provide default argument options'にて、'Node ID from URL'を選択し、'Update'ボタンをおします。

表示するフィールドの指定

5. Attachmentsコンテンツタイプに添付されるファイルを表示したいので、それを選択しましょう。画面中央下の'Fields'項にて+を押下、下のウィンドウで'Content'を選択し、リストの中からファイル添付に使うフィールドを選択して'Add'ボタンを押下します。

6. 次に表示される画面最下のLabelにはNoneを、FormatにはGeneric filesを指定し、Updateボタンをおします。

表示するコンテンツタイプの指定

7. 'Defaults'ディスプレイの表示設定の最後に、画面右の'Filters'の+を押下し、Node: Typeを選択してAddを押下します

8. 表示されたコンテンツタイプのリストから子ノード作成に利用する'Attachments'を選択し、Updateを押します。

これで基本は終了です。試しに、同じ画面の最下にある'Live preview'にて、最初に作成した親ノードのノードIDを'Arguments'テキストボックスに入力し、'Preview'ボタンをおしてください。これで子ノードが表示されれば成功です。

上記の手順でking33さんが基本になるviewを作れたら、ディスプレイの作成や、これを親ノードのしたに表示される方法をお教えします。もしうまく行かなかったり、不明瞭な点があれば教えてください。

ここまでは出来たと思います

king33's picture

dokumoriさん。
詳細な説明ありがとうございました。説明に従い、作りました。
1.親ノードを一つ作りました。
 CCKでコンテンツタイプ='products'としてコンテンツタイプを作成しました。
 フィールドのところは何もせず、そのままm保存しました。それを使って親ノードを作りました。
2.子ノード用にコンテンツタイプ='attachement'としてコンテンツタイプを作成しました。
 フィールド管理で、'ノード参照'タイプで、field_tuika_testという名前を追加しました。
 フィールド管理で、'File'タイプで、field_attachmentという名前を追加しました。
3.タクソノミで、コンテンツタイプにattachmentを指定して、仕様書、図面などのタームを追加しました。
4.上の2,3で作ったものを使って、子ノードを一つづつ添付ファイルを付けて、複数作りました。

次にViewsの管理画面で
dokumoriさんご指示の1~3までをやりました。
 ドロップダウンに'Node'がなかったので、''をえらんで、'ノード:Nid'を選びました。
続けて、dokumoriさんご指示の4~8まで実施。

それで、試しに〜、のところですが、
ボックスに親ノードのIDを入れても下には何も表示されませんでした。
子ノードのIDを入れると、添付ファイルの名前が表示されました。
なにか間違っているのでしょうか。

dokumori's picture

間違ってますね、僕の手順が(苦笑)。ごめんなさい。
引数の指定#3のところが間違っていました。Node: nidではなく、ドロップダウンでContentを選択し、子ノードのnodereferenceフィールドを選択してください。

Previewで表示できました

king33's picture

dokumoriさん、ありがとうございます。
ご指示いただいた部分を修正したら、親ノードIDを指定して下にリストが出ました。

king33's picture

dokumoriさんの最初の書き込みを参照しながら、試行錯誤しながら、下記をやってみました。
(1)viewのフィルタのところで、タクソノミを追加して、'図面'を追加しました。
 すると、Previewで図面だけが出るようになりました。
(2)先ほどのviewのDefaultsの下のドロップダウンに'ブロック'を指定してdisplayを追加して保存
 すると、ブロック管理メニューをみると、そのブロックが出ていました。
 それをコンテンツに表示して、親nodeである、テストproductsのIDにだけ表示するように設定。
 これで親nodeを表示すると、そのリストが表示されました。
(3)先ほどviewで、さらにブロックを追加して、フィルタのタクソノミで'仕様書'を指定すると
 以前のブロックまで変わってしまい、ここで悩みましたが、overrideのボタンを押すと、書き換えられるようでした。
(4)上の(2)と同様にブロックを追加すると、親nodeの下に'図面','仕様書'と分かれてリストされました。

ここまでは、僕がやりたかったイメージ通りです。ありがとうございました。

しかし、このままでは、商品ごとにviewやブロックを設定する必要があるように思われました。
また、最初に作った子node用の添付ファイルコンテンツに、商品と関連づけられる引数?
商品コンテンツから、どうやって、その商品に必要な添付ファイルをリストできるんだろう。
またアドバイスをお願いします。

dokumori's picture

返事が遅れてすみません。お待たせてしまった間に色々と試されたようですね。block displayの作成、フィルターとしてタクソノミーを選択した部分は、上記の設定で合っています。

訂正する必要があるのは、#2のブロック表示設定です。node referenceにより親子の関連付けがなされており、親ノードのnidを引数にダイナミックにブロックのリストが生成されるので、ブロック表示の条件に特定のnidを指定する必要はありません。試しに、新しい商品ノードと、それに関連する図面および仕様書ノードを作成してみてください。

実際のサイトでは、URLを'http://example.com/node/[nid]'と表示せずに、'http://example.com/products/[product_name]'のように、パスを書き換えることになると思います。これにはpathautoモジュールを使うのが一番効率が良いです。

Pathautoモジュールの設定で、productコンテンツタイプのパスは作成時に'products/[title-raw]'とされるように設定し、図面・仕様書ブロックは'products/*'でのみ表示されるように設定するのが良いと思います。試してみてください。

できました

king33's picture

dokumoriさん。ありがとうございました。
ブロック表示条件をつけなくても表示できました。
最初に商品である親ページを作ってから、添付ファイルを作っていけば表示されました。
pathautoについても、これから試してみます。

私の最初のイメージどおり、実現することができました。
ありがとうございました。

ところで、商品の図面や仕様書には、それの発行日や担当者があったりします。
これらを、横にならべてリストに表示するのも、子ノードにfieldを作って、viewを使えば出来るんでしょうか。

dokumori's picture

よかったですね :)
そうですね。発行日や担当者フィールドは、子ノード用コンテンツタイプにフィールドを追加して、viewsで表示するフィールドとして追加してみてください。また、この場合の表示は、Viewsの設定でBasic settingsのStyleを'Table'にすると良いかもしれません。

aiwata55's picture

もしタグによる自動分類などの高度な機能を諦められるなら,CCK の Fieldgroup モジュールと FileField モジュールの組み合わせで,添付ファイルをグループ分けして表示することが可能なようですよ。ご参考まで。


Aki Iwata
FOREST & trees

これはどうやってやるのでしょうか

king33's picture

aiwata55さん、ありがとうございます。
>CCK の Fieldgroup モジュールと FileField モジュールの組み合わせ
との事なのですが、Fieldgroupに'図面'、Filefieldに添付ファイルを使ってコンテンツを作りましたが、すぐにグループが表示されませんでした。いろいろ試行錯誤していたところ、
fieldのリストで十字マークをドラッグしてFieldgroupの下で右にずらせることに気づくまで数日かかってしまいました。
作ったコンテンツで、カテゴリごとに添付できるフィールドを作る事が出来るようでした。
こちらの方法も、もうちょっと試してみたいと思います。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: