例えば以下のようなケースを想定またはテストしてみてください。
ボキャブラリ(分類用語集)=都道府県
ターム(分類用語)=各県名
というような分類をする時、各県をどのような順序で登録していくかは個人の好みによるとは思いますが、
例えばいわゆる「都道府県コード」の順番にしたがって登録するとします。すると、
北海道、青森県、岩手県、宮城県、秋田県、・・・最後に沖縄県、となるわけですが、いざ、コンテンツ作成画面で分類用語を選ぶ際に、
その順番がメチャクチャ(北海道、宮城県、岩手県、秋田県、青森県。。。という感じ)なことに気がつきます。
登録した順番(タームID)でないことはもちろん、アイウエオ順でもないし、とにかく規則性が垣間見られません(少なくとも私には)。
アルファベットや数字でもなく、ひらがな・カタカナでもないのである程度仕方がないとは思いますが、こうもランダムだと途方にくれてしまいます。
50近くもあるとウェイトで調整するのも難儀です。タームを一括で処理できるようなモジュール
taxonomy_batch_operations
taxonomy_manager
taxonomy_xml
も試してみましたがバグが多くて使い物になりません。
仕方なく県名の前に都道府県コードを付加して登録しましたが、なんだかなぁ、という感じです。
ほとんどボヤキに近いのですが、なんとかならんもんでしょうか?あと、どういう原理でこんなランダム現象が起こっているのでしょう?
CCKフィールドでテキストフィールドを選択し、「使用する値のリスト:」で都道府県を県コード順に並べる場合は
こういう問題は起こらないのですが、いざこれをViewsでフィルターをかけ(すべての県名を選択)、かつそれを
Exposed にすると、デフォルトでは全県名が選択されている状態で、それをいったん解除してから絞込みをかけるという、まず見かけない操作を強いることになります。
また、デフォルトで全県名が選択されているということは、すべてのデータを読み込みに行くということになるのでデータ件数によっては負荷もキツイと思います。
ということでタクソノミーに頼らざるを得ないかと思ったところが上記の始末です(まぁ、これは今に始まったことではないのですが・・・)。
ついでですが、テキストフィールドで値のリストを作成し、これのフィルターをViewsで作ると削除できないみたいです。
気に入らない場合は作成したViewsごと削除、という羽目になります(これはバグかな?)。
コメント
ちょっと違うかもしれませんが…
意図されていることとはちょっと違うかもしれませんが、
今回の件についてだけでなく、taxonomy のウェイト範囲を増やすと言うことで、
かつ、コアに手を加えてもいいというのであれば、taxonomy.module にちょっとコードを追加するだけでも可能かと…
term に関する $form['weight'] の設定が記述してある以下の部分(私の環境では 440~444行目でした)に、
$form['weight'] = array( '#type' => 'weight', '#title' => t('Weight'), '#default_value' => $edit['weight'], '#description' => t('In listings, the heavier terms will sink and the lighter terms will be positioned nearer the top.'));ウェイトを定義するフォームのタイプ?である delta の設定を追加すると言うのもありかと…
'#delta' => 10, を追記すれば、ウェイトの範囲は -10~10 まで、'#delta' => 100, を追記すれば -100~100 までのようになりますので、こんな感じに array() 中に追記すれば、-100 ~ 100 まで選択できるようになります。
$form['weight'] = array( '#type' => 'weight', '#title' => t('Weight'), '#default_value' => $edit['weight'], '#delta' => 100, '#description' => t('In listings, the heavier terms will sink and the lighter terms will be positioned nearer the top.'));ご参考までに。
余談ですが・・・
wikipediaの都道府県のページに掲載されていた都道府県コード順だと
北海道 U+5317 -10
青森 U+9752 -10
岩手 U+5ca9 -9
宮城 U+5bae -8
秋田 U+79cb -8
山形 U+5c71 -7
福島 U+798f -7
茨城 U+8328 -7
栃木 U+6803 -6
群馬 U+7fa4 -6
埼玉 U+57fc -5
千葉 U+5343 -4
東京 U+6771 -4
神奈川 U+795e -4
新潟 U+65b0 -3
富山 U+5bcc -2
石川 U+77f3 -2
福井 U+798f -2
山梨 U+5c71 -1
長野 U+9577 -1
岐阜 U+5c90 0
静岡 U+9759 0
愛知 U+611b 1
三重 U+4e09 2
滋賀 U+6ecb 2
京都 U+4eac 3
大阪 U+5927 3
兵庫 U+5175 4
奈良 U+5948 4
和歌山 U+548c 5
鳥取 U+9ce5 5
島根 U+5cf6 6
岡山 U+5ca1 7
広島 U+5e83 7
山口 U+5c71 8
徳島 U+5fb3 8
香川 U+9999 8
愛媛 U+611b 9
高知 U+9ad8 9
福岡 U+798f 10
佐賀 U+4f50 11
長崎 U+9577 11
熊本 U+718a 12
大分 U+5927 13
宮崎 U+5bae 13
鹿児島 U+9e7f 13
沖縄 U+6c96 14
のように、24のウェイトが必要になるようです。
関東甲信越、北陸、中部地方の分類が役所によって違ったりするので、それによっては20の範囲内に納められる組み合わせも、もしかして、あるかもしれません。
こういったデータをtaxonomyに簡単に追加できるようなモジュールとかでもあればいいのになーとかおもいますね。
CSVでインポートするモジュールもあるようですが、用語をインポートするだけで、ウェイトとかはインポートできないんですよね。
惜しいですね。
ありがとうございました!
試してみました。バッチリです。
用語集ごとの設定というわけには行きませんが、とりあえずこれで十分用は足せます。
実は4.7の頃から、用語のウェイト値が-10から10までだとツライなぁと思っていたので本当に助かりました。
ありがとうございました。
勉強がてら…
勉強がてらモジュールにしてみました。
XREA(無料)サーバでの動作確認しか行っていませんが、勇気があれば試してみてください。
Taxonomy weight | Drupal.0829.info
ありがとうございました
早速ダウンロードさせてもらいました。
ありがとうございます。
幾つか方法はありますが
一律の並べ替えなら、theme_taxonomy_term_selectでソートし直せばいけますね。
特定の用語集に対してならhook_form_alterで再ソートでしょうか。
でもまぁ、1回きりの作業ですし、weight付けるのが正道でしょうね。
手作業が面倒なら次のSQLで一発です。(試してないので保証はできませんが)
UPDATE term_data SET weight = tid - 用語idの最小値 WHERE vid=用語集のid
ありがとうございます
でも、えーと、
ごめんなさい、よろしければ教えてください。
ウェイト値に関しては、-10から10までしかないので、今回のケースのように用語が50もあると
機械的に割り振れないので実はとても大変です。
用語集ごとにウェイト値の上下を設定できる(例:-25<0<25)ようなモジュールがあればいいのですけど。。。
フックです。
theme_taxonomy_term_selectはテーマフックですので、各テーマでテーマ名_taxonomy_term_select関数を定義します。
hook_form_alterはモジュールのフックですので、モジュールを作成することになりますね。
再度ありがとうございます
ということは、Drupal のモジュールあるいはテーマを作成できるスキルを持った人にお願いすれば実装は難しくないという感じですね。
フォローありがとうございました。
ユニコード順の可能性
北海道、宮城県、岩手県、秋田県、青森県
この5つしか調べてませんが、先頭文字のユニコード順にソートしている可能性が高いと思います。
先頭文字/JISコード/ユニコード
北4b4c U+5317
宮355c U+5bae
岩3464 U+5ca9
秋3d29 U+79cb
青4044 U+9752
という感じになりましたので、ここから想定できるのはユニコード順にソートされているのではないかと思います。
読み仮名とか言う項目でも作って、ソートはそれで行う・・・とかいう仕組みにでもすれば比較的簡単に実現できますが・・・現実的にはスクリプトかませてソートして表示するか・・・でしょうかね。
ユニコードですか・・・
amayadoriさん、コメントありがとうございます。
なるほどですね。
コメント頂いた後、ちょっと検索してみたらこんなサイトを見つけました。
http://rtk.web.infoseek.co.jp/cjk/prns/index.html
他の言語ではどうなるのかわかりませんが、漢字という表音文字ではない文字を使う日本語の場合、
異様にややこしい問題点ですね。
本家にポストしようにもこれを英語で説明するのは至難の業ですし、仮に説明できても恐らく理解されないでしょうね・・・。
他の2バイト言語圏では?
他の2バイト言語圏ではどうなんでしょうね?
例えば、Unicodeでのコード順=読み方もしくは発音順なんでしょうかね?
だとしたらUnicode順にソートされても問題ないですよね。
日本語みたいに1つの文字に複数の読み方があったり、他の文字との組み合わせによって読み方が変わったりするような言語が他にないとすると、対応してもらうのにはなかなか難しいですよね。
そんな日本語を機械的に処理するにはまさに、ATOKのような日本語入力メソッドのエンジンが必要になりますから相当困難ですよね。
ソート順の設定が出来るようになるか、ウェイトの設定範囲が拡張される様になるかでしか、解決できなさそうですね。
悩ましい問題ですね。
テーマデザインのtemplate.phpでフックしてなんとか出来たりしないですかね?
と、ふと思ってしまいましたけど・・・。
どちらにしても難しい問題ですね。
うーん
つーか、フツーに作成した順番通り(タームIDの順)に表示されるような仕様だったら何の問題もないんですけどね。
あ、そうか、タームに階層構造を持たせることができるからそういうわけにも行かないのか・・・。
でもせめて同じレベルにあるタームに関しては作成した順番通りに表示してくれれば。。。うーん。どうなんだろう。
やはりバグなんですかね?
ryo さん、こんにちは。
これ、私も年末に CCK と VIEWS を弄っていた時に何度か繰り返して「何だこれ」と思いながらViewsごと削除しては作成と繰り返していました。やはりバグなんですかね?
そういえば、
そういえば、この件についても試してみたりしたのですが(今更ですみません)、
drupal5|Drupal 5.x
drupal6|Drupal 6.x
という値のリストをもつ TEXT フィールド(チェックボックスタイプ)を作成し、フィルタや表示するフィルタに設定してみましたが、私の環境では、どちらも設定したフィルタのみが簡単に削除できてしまうんですよね…なにが違うのでしょうね。
たぶんバグだと
本家のバグレポートをちゃんと見てませんけど、たぶんバグだと思います。
また何かわかったらお知らせします。