Views3で作成したリストをCCKのフィールドに設定したい

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

はじめて質問させて頂きます。
半年ほど前からDrupal7を使用しWebシステムを構築しています。

日本での情報が少ない中、このコミュニティは凄く貴重なコミュニティだと思います。
(まだ半年ですがDrupalの設計思想に感動しています)

早速の質問で恐縮なのですが、CCKのリストフィールドにユーザ一覧を表示させて
メールアドレスを選択させたいと考えています。

いろいろと調べ、Viewsでリストを作成し、それをCCKへ設定できるような感じなのかな?とまではわかったのですが、どのモジュールでどのように行ったら良いのかがイマイチ判りませんでした。。

どのような方法でも良いので、CCKフィールド(Edit画面)に、ユーザ一覧の名前(label)をリスト表示し、それを選択するとメールアドレス(value)が設定できるような方法は無いでしょうか?

すみませんが、ご教授頂ければ幸いです。

Comments

Formatterで詰まりそう

qchan's picture

方針としては、Referenceモジュールか Entity Referenceモジュール
を使ってEdit画面からUserを紐付けて情報を取ってくることになります。
これは問題なくできるはずです。

ただ、問題は表示の方です。
ぱっと質問を見たときは簡単じゃないかと思って、User referenceを試してみましたが
ユーザーページへのリンク付きのユーザー名を表示するのが基本で細かなフィールド指定が出来ないですね。
Emailだけを表示させることは標準では難しいかも知れません。
カスタムでFormatterを作ればいいのか、別の方法があるのか、どなたかわかる方おられたらお願いします!

qchanさん

sfinity's picture

qchanさん
 reference関係のモジュールというのもあるんですね。
 (時間がある時に、どのようなモジュールか試してみたいと思います)

 残念ながら、表示が難しいのですね。。
 ありそうなモジュールですが、難しいのですかね・・・
 ご連絡ありがとうございます。

何点か確認です

blauerberg's picture

Entity ReferenceとViewsだけで開発なしでおそらく実現できる気がしますが、ちょっと確認させてください。

早速の質問で恐縮なのですが、CCKのリストフィールドにユーザ一覧を表示させて
メールアドレスを選択させたいと考えています。
...
どのような方法でも良いので、CCKフィールド(Edit画面)に、ユーザ一覧の名前(label)をリスト表示し、それを選択>するとメールアドレス(value)が設定できるような方法は無いでしょうか?

これは、リスト表示する内容はユーザー名という意味でしょうか?また、「メールアドレスを設定できる」というのは、ノードのView画面に該当ユーザーのアカウント編集ページへのリンクが表示されれば良いのでしょうか?

sfinity's picture

blauerbergさん

はい、リスト表示する内容はユーザ名を想定しています。
そして、選択したユーザ名のvalueをメールアドレスにしたいと考えています。

また、「メールアドレスを設定できる」というのは、ノードのView画面に該当ユーザーのアカウント編集ページへのリンクが表示されれば良いのでしょうか?

これは違っています。
わかりにくい説明で申し訳ありません。

イメージは一般的なメーラにあるような宛先を選択する動作を考えています。
この宛先選択をリスト表示でEdit画面のCCKフィールドのリストタイプで設置
したいと考えています。

現在行っている内部処理をご参考までに記載します。
特定のノードで「依頼」を選択して保存を行うと、Rulesモジュールを使用してログインしているユーザと同じグループに設定されているメンバー全員にメール送信している状況です。

これを、ユーザを指定して送信できないものかと考えている状況です。

blauerberg's picture

ノードのView画面で何かしたいわけではなく、Edit画面でノードを保存後に
Rulesに選択されたユーザーのメールアドレスを渡したいという事ですね。

Entity Reference でフィールドを作った場合、保存されるフィールドの実体は
テキスト型の値ではなく、Entiry(この場合User Entiry)への参照になります。

ので、簡単に実現するなら、Rulesで宛先の設定にPHPコードの結果を使えますので、$nodeオブジェクトから

<?php
$user
= user_load($node->field_user_ref['und'][0]['target_id']); // field_user_refはEntity Referenceのフィールド名
echo $user->mail;
?>

のようにEntity(User)のメールアドレスを引き出すのが楽だと思います。
一応、ノード保存 -> メール送信までは動作も確認しました。

開発なしでいけるかも、と思いましたが、この方法だと4行ですがPHP Snippetを書く必要がありますね。

また、1行目のアクセス方法は微妙です。Drupal 7で追加されたAPI経由でユーザオブジェクトを取得すべきですね。

blauerberg

sfinity's picture

blauerberg さん

コードまで書いて頂きありがとうございます。
さっそく試してみたいと思います!(来週になるかもしれないですが・・・)

Drupal7について質問でき、なおかつ日本語でやりとり出来ることに
感動しています(T_T)

Rulesモジュールも本当に凄いと思います。
なによりPHPコードをかけるところも便利ですよね。

早く試してみたいです。

できました!

sfinity's picture

blauerbergさん、皆様、

ありがとうございます!

Entity ReferenceモジュールとRulesのPHPコードの組み合わせで
実現できました。
実際には、複数選択とし、PHP内でfor文にて取得しています。

やはり、Drupal凄いです。

参考まで

nobuyuki3's picture

Organic Groupのビデオ見ていて思ったのですが、

Eva Modulesとかどうでしょう。
http://drupal.org/project/eva

Viewで作成したものをAttachでFieldに取り込めるというものです。
ViewをFieldにAttachできるというものです。

それにViewのBulk Operationで、ユーザーを選択してメール送信動作加えれば
http://drupal.org/project/views_bulk_operations

Fieldにて、Viweを使ったユーザー選択 ->メール送信も可能なような気がしてきます。

試してないので、EVAでそのようにできるか分からないのですが、もしかしたら、できるかもしれません。

ご参考までに。

sfinity's picture

nobuyuki3さん

情報、ありがとうございます。

EVAもインストールして試そうと思ったのですが、イマイチ使い方が判らず
断念しました。。

Entity Reference+Rules(PHP)にて実装できました。

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

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

Group organizers

Group categories

Group notifications

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