ECCUBE 商品カテゴリをDBから手動で登録するときの注意点メモ

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個分ぐらいの間隔を取って番号を割り振り、その範囲の中で子カテゴリに番号を割り振っていきました。 こうすれば別のカテゴリ同士が混じることはないと思います。

なんだかごちゃごちゃな説明ですが、とりあえずこの辺で……

[PHP]大量の配列をPOST/GETで渡す時に、要素が途中で切れて、すべて渡せない件。

分かった今はなんてことないのですが……(・ω・`)

PHPで大量のパラメータをPOSTで送ろうとする(自分の場合は1160個程度)と、こんなエラーが出てきました。

Warning: Maximum number of allowable file uploads has been exceeded in Unknown on line 0

とりあえず調べると、php.ini内にある「max_input_vars」プロパティをいじくれよ!と公式ドキュメントに書いてありました。
http://php.net/manual/ja/info.configuration.php

自分のphp.iniを見てみると、どこにも書いていないのでとりあえず追加。

max_input_vars = 2000

ちなみにデフォルトの値は1000みたいです。普通ならこの数で十分足りるはずなんですけどね……。

ほんと、なんてことない話なんですけど、俺がこの問題にぶつかったときにいじくっていたのがECCUBEで、こいつは画面上にPHPのエラーをそのまま吐き出してくれないんですよね。
仕方ないのでapacheのエラーログを見てみると、明らかに怪しいエラーがわんさかあったので、それを手掛かりに解決できました。

……あれ、この記事を書いていて思ったんだけど、よく考えたら、ECCUBEほどのものなら、デバッグモードぐらい用意されてるんじゃないだろうか?

探してみたらありました。これで出てくるんじゃないかしらorz
http://web-karakuri.com/archives/2510