ECCUBEのカテゴリ管理でのお話です。
カテゴリのCSV一括登録機能では、category_id, category_name, parent_category_id フィールドが入ったCSVをアップロードして一気に登録します。新規登録ならば、色々と自動的に割り振っていい感じにしてくれるかと思いますが、更新目的で一括登録機能を使用すると、カテゴリの構成を大幅に変更したとき、いろいろと不都合が生じます。(その前にそんな大幅な変更が入らないようにしっかり構成にしろって話ですが……)
その時は仕方ないのでDBを直接操作することになると思いますが、そこでの注意点をいくつかメモっておきたいと思います。
ますは、dtb_categoryテーブルの構造です。
- category_id
カテゴリID - category_name
カテゴリ名 - parent_category_id
親カテゴリID - level
階層 - rank
ランク - creator_id
作成者ID - create_date
作成日時 - update_date
更新日時 - del_flg
削除フラグ
ECCUBEのカテゴリは、階層上に構成することができます。その際の階層レベルはlevelフィールドで設定します。一番上が1で、あとは2,3……と設定していきます。あるカテゴリの子供としてカテゴリを設定変更した際は、この辺の変更をしないとおかしくなります;;
そして、おそらく一番面倒なのが順番の設定だと思います。rankフィールドの変更です。 ほかのECCUBEのテーブルと同様、降順で番号を割り振ります。つまり、番号の大きい順から並んで「1」がリストの一番下に配置されます。
……なんだかいちいち説明するのがめんどくさいので結論から言いますと、親カテゴリ「お菓子」のrankが10だとしたら、その子供になるカテゴリは 9,8,7 という具合に、親の連番としてrankを割り振った方が変な表示になりにくいです。どうしても連番にならなければ、親カテゴリと子供カテゴリの間には、別のカテゴリは入り込まないように注意するべきです。 処理上は問題ないみたいですが、表示上では別のカテゴリが紛れ込んでいるかのような見え方になってしまいます。
自分が実際に行ったやり方は、level1の親カテゴリには、あらかじめrank200個分ぐらいの間隔を取って番号を割り振り、その範囲の中で子カテゴリに番号を割り振っていきました。 こうすれば別のカテゴリ同士が混じることはないと思います。
なんだかごちゃごちゃな説明ですが、とりあえずこの辺で……