Posted by wataru.kato on January 30, 2014 at 12:40am
Drupal7で、「プロジェクト」というコンテンツタイプを作り、投稿者とは別に「担当者」という User Reference モジュールの機能で作った複数人のUser情報を入力できるフィールドを作りました。
ですが全ユーザーが100人を越えそうで、編集画面での編集部品を単純に選択リストにしたりすると
ずらっと100人分の選択チェックが出てきて、ちょっとつらいです。
これを「組織のリスト選択」「組織内の人のリスト選択」といった2段階選択で実現できると良いと思うのですが、モジュールの配布先を探すと Field Group 的なモジュールがあったりします。
こういったグループ化のモジュールを導入するなりの方向で実現した方などいらっしゃいますでしょうか。
まだ使ったことがありません。
それとも違うアプローチがあるのか。
Comments
Viewsとの組み合わせ
これはViewsモジュールで、好みの状態に絞り込んだリストを予め作っておいて
それをReferenceの候補として出すことで可能になります。
まず、UserでViewを作り、ReferencesというDisplayのタイプでviewを追加します。
その後User referenceを設定したフィールドの管理画面を見ると、
「VIEWS - USERS THAT CAN BE REFERENCED」という欄が下にでているはずです。
ここで先ほど作ったviewを選びます。
組織のリスト選択をしたい場合も、ViewsのContexual フィルターを使えば可能ですね。
プロジェクトのコンテンツタイプを作成するリンクにArgumentを埋め込んでおきます。
node/add/2
などの数字を埋めると、それをViews側で受け取って絞り込みができるようになります。
Contexualフィルターは慣れるまで難しいですが、Viewsのすごさが実感できるところです
ので頑張ってください。
Reference field option limit はどうでしょう?
という順序での入力を想定されていて、2. で表示されるリストが 1. で選択した組織に応じて絞り込まれるような動作をさせたいのであれば、 Reference field option limit [1]で実現可能です。
ただし、7.x-1.4ではソート順が壊れる問題があります。
https://drupal.org/node/2043665 で私が投げたパッチを取り込んでもらいましたので、
ソート順に意味があるのであれば、 7.x-1.x-dev を使ってみてください。
blauerberg様
まさに今現象を返信したところです・・・
類似の現象が、Reference field option limit を使わない状態で発生しています。
Referencesモジュールあたりの不具合の可能性があるのかしら?
とはいえ情報有難う御座います。
いったん今のデバッグを止めて、Reference field option limit の dev を試したいと思います。
ご指摘の通り、2段階でリスト選択をさせたいです。
とはいえ大元の2段階選択を1リストで表現する体裁も面白いので返信した現象にも解決が見つかるとうれしいです。
惜しい所までいきます
>qchan 様
情報ありがとうございます。 References のDisplayタイプは使ったことが無かったです。
以下手順で進めました。
1)タクソノミー=「所属」を作成し、組織名のタームリストを作成
2)User に 「所属」フィールドを追加(フィールドタイプ=ターム参照、ウィジェット=選択リスト)
3)各ユーザーに「所属」の値を入力
4)Viewsで「ユーザー一覧」を作成、DisplayにReferencesを追加
(フォーマット)
・Reference list 、第1グループ=「User:所属」
・インラインフィールド 、デフォルトのまま(Provide default field wrapper elements=True)
(フィールド)
[1] User:所属 、ラベルなし、表示省略
[2] User:名前 、ラベルなし、表示する
(フィルター条件)
[1] User:アクティブ=True
(ソート条件)
なし
(PAGER) Display all items
(それ以外) デフォルトのまま
⇒プレビューで確認すると、
組織1
ユーザー11
ユーザー12
・・・
組織2
ユーザー21
ユーザー22
・・・
組織3
ユーザー31
ユーザー32
・・・
・・・
と、きちんとタクソノミーのグループ分け通りに2段階リストが出力されます。
5)この状態で、コンテンツタイプ=「プロジェクト」に、フィールド=「担当」として、
・フィールドタイプ=User Reference
・ウィジェット=選択リスト
・値の数=無制限
・VIEWS - USERS THAT CAN BE REFERENCED=users-References
・View arguments=(空)
として定義して、これで良いだろうと確定させると、
出来上がった選択リストの並びがたとえば
組織1
ユーザー31
ユーザー32
・・・
組織2
ユーザー11
ユーザー12
・・・
組織3
ユーザー21
ユーザー22
・・・
・・・
と、第1階層のグループとずれたグルーピングで第2階層のユーザーが
並んだ選択リストになってしまいます。
ためしに選択リストを選択すると、この選択リスト側の見た目とは異なる、
先ほどViewで作った4)の並びで値が入力されていることが確認できます。
要は値がずれた状態です。
暫定回避策の候補として、ウィジェットを選択リストではなく Autocomplete text field にすることも
考えています。
何か思い当たる原因がありますでしょうか。
そもそも、上記手順は qchan 様に教わった手順や条件と微妙に異なるようにも思いますが・・・
判る方がいらっしゃいましたらご助言願います。
もうちょっとですね。
グルーピングを一旦外して試してみるとズレはどうなりますか?
Contexualフィルターを使って、URLから絞込みを掛ける方法とは違いますが、
数が少なければこの方法でも混乱ないかもしれないですね。
結果が変わりました
4)のグループ条件をクリアし、なしにしました。
そうすると、4)のプレビューの並び順が、5)の選択リストの表示順と一致しました。
この辺に原因があるようですね。
おそらく 5)の処理に 4)のグループ化条件を引っ張ってくるのが仕様想定外か、単純な不具合ではないでしょうか。
グループ化行はきちんとした位置に出て来ますし、ちょっと残念です。
グループ化選択リスト?としての見た目は素人さんにわかりやすそうだったのでこれでいきたかったのですが・・・
いったん、プロジェクト側のフィールドのウィジェットまで戻って 選択リスト ⇒ Autocomplete Text field に変えました。
これでしばらく行きます。
ContexualフィルターでのURL絞り込みですと、所属ごとのプロジェクト追加URLができてしまいませんか。
私としては今回は同一URLでリスト選択で所属を切り替え>所属内の人を選択、にしたいので
そっちの方向ではなさそうです。
#反対にユーザーページに自分の記事一覧、などを作るのにContexualフィルターは使ってますよ
Taxonomy termが振られていないUserをFilterで除外
ちょっと私の環境で試してみたら、同じように、ズレる現象を確認しました。
その時、リストにはTermが入っていないUserも並んでいます。
(すべてが綺麗にグルーピングされていない状態)
これが問題かもしれないと、それらをFilterで
Operatorには[Is not empty (NOT NULL)]を選ぶことで除外して、
どのUserもTermを持つようにしグルーピングに漏れがない状態にすると、
リファレンスのズレが直りました。
これでイケるのではないでしょうか。
いけました!
ホントですね。Termのないフィールド分がゴミになってずれていたとは気が付きませんでした。
解決しました、ありがとうございます。