Posted by s-jack on June 5, 2016 at 2:58am
食べもの
ー生鮮食品
ーーくだもの
ーーーみかん
ーーやさい
ーーーにんじん
ー加工食品
というカテゴリーがあったとします。
#1 関連付けられるタームを限定することはできるのか?
一番最下位のみかんやくだものにしか、実態のコンテンツを関連付けられないようにするには?
系統のいくつかのうち、特定のタームはタームの分類のためだけの存在であり、関連付けは出来ないようにするなど。
#2 子に関連付けされた場合、系統の親は関連されていることになるのか?
タームのみかんに、ある地域ブランンドの特定の商品のコンテンツを関連づけした場合、このコンテンツは系統親のタームである生鮮食品でもあり、くだものでもある、という認識や検索結果を出せるのか?
単に、このコンテンツはみかん分類にしか所属(関連)しておらず、みかんのターム自体の構造化がされているだけなのか?
前者のように、子のタームに属した場合、系統親全部にも属されるという設定をするモジュールはありますでしょうか?
D7ではHierarchical Select というモジュールを試していますが、D8ではsandbox projectとしてhselect2が開発途中のようです。
ほかにこのような主旨のモジュールは見当たりませんので、あまりニーズはないのでしょうか?
モジュールでなくてもカスタマイズで対応しているとか。。。
宜しくお願いします。

Comments
s-jackさん、こんにちは。 #1 D7ですが、Taxo
s-jackさん、こんにちは。
#1
D7ですが、Taxonomy Term Reference Tree Widget (https://www.drupal.org/project/term_reference_tree) でも、ご希望の動作が実装できると思います。D8では見当たりませんので、カスタマイズで対応になるかと思います。
#2
子タームを選択することで、親が自動的に選択されていることにはなりませんが、データベースにおいて、各子タームには親タームが設定されていますのでViewsで親タームから子タームを引き出すなどが可能です。親タームを自動的に選択することも上記のモジュールで設定可能です。
教えていただきありがとうございます。 1 Taxonomy
教えていただきありがとうございます。
1 Taxonomy Term Reference Tree Widget はD8に対応していないのが残念ですが、カスタマイズで対応できることで候補の1つとさせていただきます。
Widgetの場合、D8だとモジュールになるのでしょうか?プラグインみたいな感じでしょうか。
2 ちょっと一般論で恐縮ですが、
子を選択した場合に親を選択していることを判別するためには、
コンテンツ側で関連する子のタームIDだけでなく、すべての系統親のタームIDをデータを持っておくというのではなく、
そもそものターム自体の階層構造で都度関連親を探して該当するタームを選択されているという扱いにする、というのが解なのでしょうか?
チェックボックスの機能をググっていると、Three State (3つの状態)というプロパティがあるのを知り、この値をどう活用するかとは関係ありませんか?ないかな。。。笑
PS:D7にWidgetいれて動きを確認してみます。
s-jackさん、 お疲れ様です。 1、すみません、D8の
s-jackさん、
お疲れ様です。
1、すみません、D8の場合のカスタマイズはTaxonomy Term Reference Tree Widgetのことではなく、自分でシンプルなモジュールを作って、フォームの動作をコントロールする、という意味で書きました。公開されているモジュール(同Widgetはモジュールの一つです。)の中身を自分で変更してしまうのは、セキュリティ等の理由から、オススメされていません。ただ、割とメジャーなモジュールなので、待っていればそのうちD8版ができるかもしれませんね。他の方からのリクエストもあるようです。https://www.drupal.org/node/2229889
2、選択されたタームに基づいて、どんな動作を行うかが分からないので、質問にきちんとお答えできてるか自信がないのですが、(的外れでしたらおっしゃってください。笑)、基本的に、親、子に関わらず、チェックボックスにチェックが入っていなければ、選択されたことにはなりません。ひいては、前者の「コンテンツ側で関連する子のタームIDだけでなく、すべての系統親のタームIDをデータを持っておく」必要がある、ということになると思います。
コンテンツ(記事や基本ページ)は、選択されたタームが親であるか、子であるかは、全く見ていません。
1について Taxonomy Term Reference
1について
Taxonomy Term Reference Tree Widgetについては、Maintenance status: Seeking co-maintainer(s)となっており、バグがたまる一方であまり改善されてないようですので、このモジュールを使っていくことはちょっと難しいかなと思いました。
D8版もリクエストあるも厳しいかもですね。
フォークするか、自作(業者さんに作ってもらう)するしかないですね。。。
#2 親系統のデータについて
入力登録時は、なるほど、基本的にはチェックをつけてもらって、その親系統を全部検索して、全部チェックをする動きをさせ、同時にその系統親のIDを関連で保存しておく、というのがセオリーと理解できました。
表示時は、タームのIDを関連としてでしかデータを持っていないのに、その(複数あるかもしれない)タームの系統親を全部関連するというように、プログラム上ルールを作るというのはよろしくなさそうですね。
今やりたいことは、
タクソノミーとタームを、複数選択させるために主にチェックボックス等で利用するときに、
カテゴリーの考え方と、データの扱い方のルールを要件定義しています。
原則がわからないと、混乱するので、教えていただいている次第です。
例えば、
ツリー構造の途中のあるターム、つまり下のタームからすると親のタームになるのですが、
食べ物>くだもの>みかん
くだもののタームは入力時には選択できないようにして、食べ物とみかんは選択できるようにする、
選択できないようにしたものは以下のグルーピングの分類メモ的(プレースフォルダー的)に利用する
みたいなことできないのかな、やっちゃっていいのかな
、です。
このとき、みかんだけを選択しても、みかんは実質食べ物だから選択されていなければならないし、
食べ物を選択しても、みかんとは限らない
みかん以外にその他を作る場合、みかんと同レベルに作った方が良いのか、
その他を作らなくても、食べ物を選んで、みかんではないので、その他であるということにした方が良いか。
この辺のまずの標準的な考え方や定石を知りたいなと思ってます。
タグはレベルが一般的には同レベルで(あまり階層などで複雑に管理しないスタイルや、木構造の場合複数系統にまたがって存在したい=階層の場合は異なる親を複数持つ )利用すると思います。
タグ新規に作られて登録された場合、管理側ではタグの整理を階層で整理しておこう、つまり、紐付けされるコンテンツの整理分類の役割と、タグ自体の管理分類の役割があっても間違いじゃないのではないか、ということをどうしてもやりたいです。
なぜならタグやタームが膨大になる利用をしたいからです。
本来ならば、管理用のツリーでタームを管理しておいて、実際に使うカテゴリーは、つど管理されているタームから任意に選んで構造化してツリーをセットし(これがDrupalでいうところのボキャブラリ)、そのタームの扱いもセットごとに違いような、
マスターデータとセットデータのような、
コンテンツタイプクラスとコンテンツタイプオブジェクトをいくつも作成するように、わけてカテゴリを管理運用できる機能を発注しようかなと思っています。
追加で質問です
タームの階層がかなり深かったり、ターム自体がめちゃくちゃ多かったりする時、便利な技術ってありますでしょうか?
ツリー展開を途中を改行することできるのかな?
何か良い技術ご存知でしたら教えていただけると助かります。
動きがわかるデモがあれば最高です。
Drupalのモジュール化されていないWidgetでも、Drupal用に移植カスタマイズすれば可能だよ的でかまいません。
階層深く、選択肢が多い場合の要件アイデア
*ステップ的に階層を開いていく
*すでに選択したものを別に把握できる(この場合系統親を把握するにはパン屑みたいな感じになるのかな??)
*その他
こんな感じになるのかな。