Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2006-03-08 18:43:47

oya
メンバー
From: 神奈川
登録日: 2006-02-22
投稿: 35

Re: NP_MultipleCategoriesのソートについて

いつもお世話になっております。

以下のプラグインを導入させて頂いてます。(感謝 smile

Multiple Categories [Custom Edition] バージョン: 0.401j
Show Blogs for Sub Categories バージョン: 2.001

質問なのですが、
例えば以下のようなサブカテゴリーを作った場合

地域           (メインカテゴリ)
  ┗ アジア       (サブカテゴリ1)
    ┗ 日本      (サブカテゴリ2)
      ┗ 関東地方 (サブカテゴリ3)
        ┗ 東京  (サブカテゴリ4)

表示が以下のようになってしまい、サブカテゴリでの階層別での正しいソートがされません。

カテゴリー:地域(日本,アジア,東京,関東地方)

nucleus_plug_multiple_categoriesテーブルや
nucleus_plug_multiple_categories_subテーブルを見た限りではサブカテゴリを階層別にソートするための
仕組みは厳しいような気がしますが、ソートさせることはできないでしょうか・・・。

nucleus_plug_multiple_categories_subテーブルのordidやsdescを使い
うまくやれちゃったりするのでしょうか?

参考までに↓
スキンに<%ShowBlogs(default/index,5,,2,DESC)%>を記入
テンプレートに<%MultipleCategories%>を記入

以上、よろしくお願いします

オフライン

#2 2006-03-08 18:56:41

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

NP_znMCListを使ってみてはいかがでしょうか。
http://wa.otesei.com/NP_znMCList

オフライン

#3 2006-03-13 10:56:36

oya
メンバー
From: 神奈川
登録日: 2006-02-22
投稿: 35

Re: NP_MultipleCategoriesのソートについて

Andyさん、返信ありがとうございます。
並びにサーバ復帰、ご苦労さまでした

フォーラムがダウンしてたため、佐藤(な)さんから直接メールで
「NP_znMCListではできません」と返事頂きました。
>佐藤(な)さん
わざわざありがとうございました。

私が実現したいことは、
テンプレートで、「アイテムが所属するカテゴリ・サブカテゴリ」の部分であり、
『 NP_znMCList 』は、スキンでカテゴリ・サブカテゴリの一覧メニューを表示するだけなので、
できないとのことでした。

別プラグイン等の情報などあれば、
引き続きご意見頂ければ幸いです

オフライン

#4 2006-03-13 12:49:29

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

oyaさん,質問の内容を勘違いしていました。すみません。
テンプレートで出てくる順番を階層順にしたいということですね。
案外難問かもしれません。

ちゃんと考えていませんが,テンプレートで取り出すときよりも,アイテムに書き込むときにMultipleCategoriesの中で処理した方が楽かもしれません(後からカテゴリーの階層構造を変えてしまうとだめですが)。

オフライン

#5 2006-03-13 13:56:23

oya
メンバー
From: 神奈川
登録日: 2006-02-22
投稿: 35

Re: NP_MultipleCategoriesのソートについて

oyaさん,質問の内容を勘違いしていました。すみません。

いえ、よくよく見たら自分の質問が誤解を招くような質問でした、こちらこそすいません :cry:

ちゃんと考えていませんが,テンプレートで取り出すときよりも,アイテムに書き込むときにMultipleCategoriesの中で処理した方が楽かもしれません(後からカテゴリーの階層構造を変えてしまうとだめですが)。

後からカテゴリーの階層構造を変えないという条件付きでもいいのですが、
アイテムに書き込むときにMultipleCategoriesの中で処理とはどのような構想ですか?

オフライン

#6 2006-03-13 14:08:55

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

oya さんの発言:

後からカテゴリーの階層構造を変えないという条件付きでもいいのですが、
アイテムに書き込むときにMultipleCategoriesの中で処理とはどのような構想ですか?

データベースにアイテムのサブカテゴリーのIDをカンマ区切りのデータとして書き込みますが,そのときに階層順になるようにしておけば,そのまま取り出せるのではないかと思いました。ソースをちゃんと見ていないので,もしかしたらはずしているかもしれません。

オフライン

#7 2006-03-13 14:14:34

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

実は、サブカテゴリをうまく並べ替える関数をsmartに作成できないでいます :cry:
ツリー表示させたときの(いや、ツリー表示はできてるんですけど)、単純な上から順番のscatidの順位をさくっと吐き出す関数が。
ツリー表示は無限に多重に配列に格納して実現しています。
えっと、getCategoryList関数とかappendChildCategory関数とか、かな。
だから、この多次元配列をスキャンして順番にフラットな配列を1個作れば良いんですけど。

...って誰かに通じる文章でしょうか? :cry:

...そして通じてしまった誰かが中身を覗いたらびっくらする程お恥ずかしいコーディングかも....


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#8 2006-03-13 14:29:03

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

こういう意味でいいですか?

アイテムのサブカテゴリーIDのリストがあるけど,階層順になっていない。
カテゴリー階層は多次元配列に入っている。
サブカテゴリーIDのリストをどう並び替えるのがスマートか?

単純に言えば,並び替えの比較ルーチンを作ればいいだけだから,二つのサブカテゴリーIDがあったときに階層をさかのぼって上から比較していってやればできますよね。
スマートってことだと,カテゴリー階層の多次元配列を作るときに,何か細工をして比較用の配列を作ってやるとかするといいかも。

オフライン

#9 2006-03-13 14:46:56

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

yes,yes,yesです。

えーーっと。
Nucleus標準機能カテゴリ直下にぶら下がるサブカテゴリはparentid=0です。
その直下にぶら下がっているparentid=0のサブカテゴリがscatid=6だとすると、その下にぶら下がるサブカテゴリのparetidは6で...以下ループ。
さらに、parentid=6を持つサブカテゴリが複数ある時はordidが若い順に並べ替えます。
(ってAndyさんなら言わなくてもわかると思うけど)

なので、parentid=0からスキャンしていく方が速い?と思います。

あと、肝心のテンプレ表示ですけれど、アイテムオプションでチェックを入れたサブカテゴリが1つの枝の孫、親、祖父の全部(or一部複数)にチェックを入れている場合ルーチンも考えた方がいいですよね?


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#10 2006-03-24 16:42:40

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

長期出張で、RSS取りこぼしてて、ここの確認が遅くなりました。汗)

oya さんの発言:

>佐藤(な)さん
わざわざありがとうございました。

いえ、長期出張で次に書き込めるのがずいぶん先になっちゃうなぁと思いまして。(モデレーターの皆様の尽力のお蔭で、すぐ復活しましたね。感謝♪)

ちょっといじってみました。動作確認用をアップしますね。
サブカテゴリ並順の基準が、、、
[list=][*]階層の浅い順[/*]
[*]階層が同じ場合、ordid順[/*][/list]で、並び変わるようになってると思います。(多分。汗)良かったら確認してみてください。(NP_MultipleCategories.phpの上書きだけでOKです。)
ちなみに、カテゴリをマルチにしても、(サブじゃない)カテゴリの順番は考慮しません。(指定できないので)

処理方法は、以下の2パターンのどちらにしようか悩んだのですが、、、

  • A)SQL結果から多次元配列を作る時に、並び替える。

  • B)多次元配列を作る前の、SQL結果自体を並び替える。(subcategoriesフィールドのカンマ区切りのサブカテゴリidを並び替える。)

カンマ区切りのサブカテゴリidは(配列にしておいて)、array_intersectで一発並替することができたので、B)で処理しました。
SQL結果自体を並び替える方法は、特定の順番でアイテムを出力したいを参考にしました。
Andyさん、kosugiatkipsさん、ありがとうございます。

ところで、
今回は、動作確認用ということで、とりあえずver 0.401j[Subspecies t1855](トピック1855で派生した亜種)としたのですが、
この機能って、本流に組み込んだ方が(ver 0.402j)良いのでしょうか?
処理的にはそんなに負荷はかからないのではないかと思うのですが、どうなのでしょう?
概要、以下の感じです。
[list=][*]function init()で、順番設定用配列($this->subOrderArray)を作成しておく(全てのサブカテゴリidを、予め並び替えて一次配列に保持しておきます。)[/*]
[*]function _getScatMapのSQL結果が、指定順になるようにする(ORDER BY FIND_IN_SET)[/*][/list]今回の改造箇所には、<sato(na)t1855 />を付けておきました。(←ごちゃごちゃしてすみません。)

とんちんかんな勘違いとかしてるかも知れません。こんなんで良いのでしょうか?


Attachments:
zip NP_MultipleCategories0401j_t1855.zip, Size: 24.91 KiB, Downloads: 591

各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#11 2006-03-24 17:28:56

oya
メンバー
From: 神奈川
登録日: 2006-02-22
投稿: 35

Re: NP_MultipleCategoriesのソートについて

NP_MultipleCategories.phpの上書きだけをして、
動作確認してみました。

正に思い描いてた通りの動作をしてくれました。感激!:P

佐藤(な)さん、お忙しいとこホントにすいません、もうダメかと諦めかけていました。

オフライン

#12 2006-03-24 17:38:09

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

oya さんの発言:

正に思い描いてた通りの動作をしてくれました。感激!:P

良かった~。 big_smile


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#13 2006-03-24 22:27:00

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

佐藤(な) さんの発言:

この機能って、本流に組み込んだ方が(ver 0.402j)良いのでしょうか?

0.5でも1.0でもいいかと。

私→タカさん→私→佐藤(な)さんとバトンが渡ってますが、私もタカさんも使ってないし 8)
やっぱ使い込んでいる人がサポートするのが一番でっす。
そのうち血迷ってタカさんがPHP5の動作確認がてら、すっきり賢くかきなおしてくれるかもしれないし 8)

亜流じゃないですよ。だって、佐藤(な)さんが組み込んでくれた部分を積極的に否定する人はいないでしょうから。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#14 2006-03-24 23:53:11

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

NP_MultipleCategories(+NP_TreeMenu)を見た時に、プラグイン紹介ブログ立ち上げようと思ったりして、
ファンなんですよね。NP_MultipleCategoriesの。
なので、何か逆に恐縮しちゃうんですよね。新参者が良いのかなぁと。(などと言いながら、もうすぐNucleus暦一周年 lol
・・・わけのわからないことをすみません。

第一、大した改造したわけじゃないので、バトンだなんて、とんでもないんですが、、、
もう少し動作確認をしたら、前にNP_MultipleCategories0401jをアップしたトピックに、ダウンロード先を移動しておきます。はい。

nakahara21 さんの発言:

そのうち血迷ってタカさんがPHP5の動作確認がてら、すっきり賢くかきなおしてくれるかもしれないし 8)

女神が舞い降りると良いなぁ。 big_smile

nakahara21 さんの発言:

亜流じゃないですよ。だって、佐藤(な)さんが組み込んでくれた部分を積極的に否定する人はいないでしょうから。

いやぃゃぃゃ、あやしいっす。 lol


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#15 2006-03-26 13:47:15

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_MultipleCategoriesのソートについて

便乗質問というか依頼なんですが。
もし、無限階層版の次期リリースがあるとしたら、管理画面での無限ループに対処してもらえるとありがたいです。
現状だと管理画面ですでにサブカテゴリーツリーがあるとき、親のサブカテゴリーを子や孫にぶら下げるような操作をすると、(そんなことしなければいいんですが、なんとなく親子を入れ替えようとしたら)無限ループになってその後修正が効かなくなり、DBを直接触って修正したということがありました。
ミスって無限ループになってしまっても、(たとえばznMCListでは問題が起きないので)管理画面上だけの問題のようなのですが。
MultipleCategories無限階層版0.401jのmutliplecategories/index.phpの594行目ぐらいに
$already = array();
を入れて、
// Has a parent, so search for parent, and push it to the end of the parent's child array
if (!$this->appendChildCategory($categoryArray, $temp)) {
のところをこんな感じでループチェックすると問題は解消します。

if (!$this->appendChildCategory($categoryArray, $temp)) {
// Failed, so push category back onto the end of the array
	// and search once
	if (in_array($temp['id'],$already)) {
		$categoryArray[] = $temp;
		continue;
	} else {
		$already[] = $temp['id'];
		$flatList[] = $temp;
	}
}

でも、これは一時しのぎというか、ループチェックというよりリストへの出現を一回にするという制限で根本的な解決にはなっていません。本当は再帰検索をしているあたりでループを遮断するのが正解なんでしょうけど、根本的なコード体系がわからないので一応回避しましたっていう感じです。

オフライン

#16 2006-03-27 12:27:09

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

調子に乗って、でしゃばっちゃってすみません。

無限ループになるような指定ができないようにしてみました。(変更時だけは、自分以下のサブカテゴリを、<SELECT>のリストに出さないようにしました。)
動作確認用(0.401j[Subspecies t1855-11692)アップしておきますので、良かったら確認してみてください。

getCategoryListメソッド関連は、新規用にも共用で再利用されているようなのですが、getCategoryList関連のコードを読む理解力がなかったため :oops: 、、、
変更時用<SELECT>を出力するメソッドを、別で作成してしまいました。
ここでは、自分を含めた子孫がリストから外れますので、無限ループに陥るような指定ができなくなるかと思います。
今回の改造箇所には、<sato(na)t1855-11692 />を付けています。(2箇所)

いつもの事ながら、とんちんかんなことしてたらすみません。 lol


Attachments:
zip NP_MultipleCategories0401j_t1855_11692.zip, Size: 25.24 KiB, Downloads: 609

各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#17 2006-03-27 22:27:42

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_MultipleCategoriesのソートについて

佐藤(な) さんの発言:

変更時だけは、自分以下のサブカテゴリを、<SELECT>のリストに出さないようにしました。

更新時にループチェックするのは面倒だなぁと思っていたのですが、最初から表示させないほうがスッキリですね。
動作確認できました。ありがとうございました。

オフライン

#18 2006-03-28 11:55:21

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

でも、親を子供の子供にしたい時はかなり面倒になりますよね。
自分の子供の下にぶら下がりたい場合は、先に子供の階層を一つあげて同時に元親を子供にするって方がいいような。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#19 2006-03-28 12:59:08

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

?あれ?!(混乱)

nakahara21 さんの発言:

先に子供の階層を一つあげて同時に元親を子供にするって方がいいような。

編集は、

  • 先に子供の階層を一つあげる

  • 元親を子供にする

という手順になりますよね。

改造によって、
自分の親を決めるフォームで、自分以下がリストアップされなくなるだけなので、
編集手順としては変わらないのではと思います。

あれ?ぼく、根本的に何か勘違いしてるのかも。
問題点、外しているかもしれません。 :oops:


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#20 2006-03-28 18:06:56

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

佐藤(な) さんの発言:

編集は、

  • 先に子供の階層を一つあげる

  • 元親を子供にする

という手順になりますよね。

そうそう。その2つの手順をを踏まずに、1クリックで可能にしようと思えばできるじゃん、という意味です。
何も考えず「親となる(サブ)カテゴリ」の所で自分の子供をクリックするだけで、子供の階層が自動的に一つ上に上がって、同時にちゃんと子供になれる、というアクション。
ああやって、こうやって....(って書いてみろって話ですがorz)

....ついでに言えば、自分で自分を親にする選択はdisableにするjsとかある方がいいっすね 8)


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#21 2006-03-28 19:18:19

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_MultipleCategoriesのソートについて

nakahara21 さんの発言:

そうそう。その2つの手順をを踏まずに、1クリックで可能にしようと思えばできるじゃん、という意味です。

なるほど。この機能が実現されれば表示を制限しなくても思い通りの操作が実現できるよっていう助言ですね^^

1-2-3-4-5-6-7
という階層があったときに、
3がselectedだったとして、
「5の下にぶら下げる」が指定されたとき、
5の階層を元の3の階層に上げて、3以下を下げるので、
5の親を2(元3の親)にして切り離し
3の親を5
にするという処理で

1-2-5-3-4
    |
    └-6-7

というツリーができる?かな。どうだろう。

オフライン

#22 2006-03-28 19:27:44

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: NP_MultipleCategoriesのソートについて

kosugiatkips さんの発言:

1-2-3-4-5-6-7
という階層があったときに、
3がselectedだったとして、
「5の下にぶら下げる」が指定されたとき、
5の階層を元の3の階層に上げて、3以下を下げるので、
5の親を2(元3の親)にして切り離し
3の親を5
にするという処理で

1-2-5-3-4
    |
    └-6-7

というツリーができる?かな。どうだろう。

うーん、でも、3だけを5の下にぶら下げたいという欲求の方が自然だとしたら、3を親に持つsubcatidをすべて抽出してそれらに3の親をコピーしないといけない。

1-2-4-5-3
      |
      └-6-7

さらに、子を複数持つ親を移動すると、
下記の場合で

1-2-5-3-4
    |
    └-6-7

ここで、5を6にぶら下げるという処置をすると。3と6の親を2にして、5の親を6にするので、

1-2-3-4
  |
  └-6-5
    |
    └-7

一筋縄には行かないですね。

オフライン

#23 2006-03-28 19:45:44

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

nakahara21 さんの発言:

そうそう。その2つの手順をを踏まずに、1クリックで可能にしようと思えばできるじゃん、という意味です。

なるほど。よく分かりました。 big_smile
いや、あの、改造に問題があるとのご指摘なのかと。。。基本的に「ビビリ」なので。 :oops:

フォーム自体は、前のまま、
パラメータを受け取った側(もしくはjs)で、処理する訳ですね。
無限ループも回避でき、子にぶら下がる指定も1工程で済むので、一石二鳥ですねぇ。


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#24 2006-03-28 20:15:04

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

あら、書きかけのままお風呂入ってるあいだに、kosugiatkipsさんの投稿が。。。すみません。フォーラム慣れしてないもので。 lol

自分が、自分のひ孫になる場合、自分の子を引き連れていくか、自分だけ移動するかとか、、、これまた、なるほど。
ぼく的には、「自分だけ移動」の方が自然な気がします。

kosugiatkips さんの発言:

うーん、でも、3だけを5の下にぶら下げたいという欲求の方が自然だとしたら、3を親に持つsubcatidをすべて抽出してそれらに3の親をコピーしないといけない。

1-2-4-5-3
      |
      └-6-7

さらに、子を複数持つ親を移動すると、
下記の場合で

1-2-5-3-4
    |
    └-6-7

ここで、5を6にぶら下げるという処置をすると。3と6の親を2にして、5の親を6にするので、

1-2-3-4
  |
  └-6-5
    |
    └-7

これで良いのではないでしょうか。
処理的にも問題ないように思います。

心配なのは、「どう処理されるのか」、使う人によって捉え方が違ってしまう可能性があるってことでしょうか。
ぼく的には、「自分だけ移動」となると思います。


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#25 2006-03-29 00:17:03

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: NP_MultipleCategoriesのソートについて

なんかやってみないと問題に気付かないヤツですけど。

子供の下にぶら下がろうとする指定をした場合。
1.自分の変更前parentIDを覚えておく(遺言)
2,自分のscatidをparentidとするサブカテゴリ(つまり直下の子供)の全部のparentidを自分scatidから、1,で覚えておいたscatidに変更する(相続)
3.コレで自分はフリーになったので安心して指定したサブカテゴリの子供になる
というロジックでいいような。

あれ?もしかして比較的簡単に実装できる? 8)


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

Board footer